分类变量的多个值,GLM,model.matrix
multiple values of a categorical variable , GLM , model.matrix
我有一个看起来像这样的数据
id var1 var2 var3 response var4
1 1 0 cat1 E 1 T4
2 1 0 cat1 E 1 T2
3 2 0 cat2 B 1 <NA>
4 3 0 cat3 C 0 <NA>
5 4 0 cat4 D 0 T3
6 4 0 cat4 D 0 T1
7 5 1 cat1 A 1 T4
8 5 1 cat1 A 1 T3
9 6 1 cat3 C 1 T3
10 7 0 cat1 C 0 T1
我想 运行 因变量的 glm "response"
如您所见,ID 不是唯一的,这是因为每个 ID 可以为 "var4"、
取多个值
为此我尝试了 model.matrix
但它不保留 ID,因此很难检查结果,
我确信有一种简单的方法可以做到这一点,有人可以帮忙吗?
要生成上述数据,您可以使用
# GENERATING THE FIRST DATA FRAME
set.seed(1984)
df1 <- data.frame(id = 1:15,
var1 = sample(0:1, 15, replace = T, prob = c(.7,.3)),
var2 = sample(c('cat1','cat2', 'cat3','cat4'),15, replace = T),
var3 = sample(LETTERS[1:5],15, replace = T ),
response = sample(0:1, 15, replace = T)
)
# GENERATING THE 2ND DATA FRAME
set.seed(1984)
df2 <- data.frame(id = sample(1:15, 20, replace = T),
var4 = sample(c('T1','T2','T3','T4'), 20, replace = T))
df2 <- unique(df2[order(df2$id), ])
row.names(df2) <- NULL
# MERGING THE TWO
df3 <- merge(df1, df2, by = 'id', all = T )
df3
我会使用 reshape2 包中的 dcast 重塑数据。这将重塑您的数据,因此每个 id 都在一行中,并且在将数据帧输入 model.matix 之前对 var4 进行单热编码。使用您的最小工作示例,这将类似于:
library(reashpe2)
newDF <- dcast(df3, ...~var4,function(x) length(x))
model.matrix(response ~., newDF)
我有一个看起来像这样的数据
id var1 var2 var3 response var4
1 1 0 cat1 E 1 T4
2 1 0 cat1 E 1 T2
3 2 0 cat2 B 1 <NA>
4 3 0 cat3 C 0 <NA>
5 4 0 cat4 D 0 T3
6 4 0 cat4 D 0 T1
7 5 1 cat1 A 1 T4
8 5 1 cat1 A 1 T3
9 6 1 cat3 C 1 T3
10 7 0 cat1 C 0 T1
我想 运行 因变量的 glm "response"
如您所见,ID 不是唯一的,这是因为每个 ID 可以为 "var4"、
取多个值为此我尝试了 model.matrix
但它不保留 ID,因此很难检查结果,
我确信有一种简单的方法可以做到这一点,有人可以帮忙吗?
要生成上述数据,您可以使用
# GENERATING THE FIRST DATA FRAME
set.seed(1984)
df1 <- data.frame(id = 1:15,
var1 = sample(0:1, 15, replace = T, prob = c(.7,.3)),
var2 = sample(c('cat1','cat2', 'cat3','cat4'),15, replace = T),
var3 = sample(LETTERS[1:5],15, replace = T ),
response = sample(0:1, 15, replace = T)
)
# GENERATING THE 2ND DATA FRAME
set.seed(1984)
df2 <- data.frame(id = sample(1:15, 20, replace = T),
var4 = sample(c('T1','T2','T3','T4'), 20, replace = T))
df2 <- unique(df2[order(df2$id), ])
row.names(df2) <- NULL
# MERGING THE TWO
df3 <- merge(df1, df2, by = 'id', all = T )
df3
我会使用 reshape2 包中的 dcast 重塑数据。这将重塑您的数据,因此每个 id 都在一行中,并且在将数据帧输入 model.matix 之前对 var4 进行单热编码。使用您的最小工作示例,这将类似于:
library(reashpe2)
newDF <- dcast(df3, ...~var4,function(x) length(x))
model.matrix(response ~., newDF)