R在model.matrix中缺少级别

scr*_*Owl 3 r model.matrix

我正在尝试将带有分类变量的数据框转换为model.matrix但却失去了变量级别.

这是我的代码:

df1 <- data.frame(id = 1:200, y =rbinom(200, 1, .5),  var1 = factor(rep(c('abc','def','ghi','jkl'),50)))
df1$var2 <- factor(rep(c('ab c','ghi','jkl','def'),50))
df1$var3 <- factor(rep(c('abc','ghi','nop','xyz'),50))

df1$var2 <- as.character(df1$var2)
df1$var2 <- gsub('\\s','',df1$var2)
df1$var2 <- factor(df1$var2)
sapply(df1, levels)

mm1 <- model.matrix(~ 0+.,df1)
head(mm1)
Run Code Online (Sandbox Code Playgroud)

有什么建议?这是矩阵不可逆性问题吗?

krl*_*mlr 5

模型矩阵完全正确.对于因子,模型矩阵包含的一列少于因子:该信息已包含在(Intercept)列中.您缺少此列,因为您已+0在模型术语中指定.试试这个:

mm2 <- model.matrix(~., df1)
head(mm2)
Run Code Online (Sandbox Code Playgroud)

现在,您将看到(Intercept)编码"默认"信息的列,现在var1列名中也缺少第一个级别.的(Intercept)代表你在"参考水平",这是每一个分类属性的第一电平的组合观察.与此参考级别的任何偏差都会在var*???列中进行编码,并且由于您的模型假设这些列之间没有相互作用,因此您将获得(4 - 1)*3 var*???列加上(Intercept)列(var1abc在您的初始模型矩阵中替换).

不幸的是,我缺乏描述这一点的确切术语.有人帮帮我吗?