繁体   English   中英

模型中的R缺失水平

[英]R missing levels in a 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)

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

模型矩阵是完全正确的。 对于因子,模型矩阵所包含的列比不包含因子的列少:该信息已包含在(Intercept)列中。 您缺少此列,因为您在模型项中指定了+0 尝试这个:

mm2 <- model.matrix(~., df1)
head(mm2)

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

不幸的是,我缺乏确切的术语来描述。 有人帮我吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM