我正在尝试将带有分类变量的数据框转换为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)
有什么建议吗?这是矩阵不可逆性问题吗?
答案 0 :(得分:5)
模型矩阵完全正确。对于因子,模型矩阵包含的一列少于因子:此信息已包含在(Intercept)
列中。您缺少此列,因为您在模型术语中指定了+0
。试试这个:
mm2 <- model.matrix(~., df1)
head(mm2)
现在,您将看到编码“默认”信息的(Intercept)
列,现在列名中也缺少第一级var1
。 (Intercept)
代表您在“参考级别”的观察,这是每个分类属性的第一级的组合。与此参考级别的任何偏差都会在var*???
列中进行编码,由于您的模型假定这些列之间没有互动,因此您会获得(4 - 1)* 3 var*???
列加上(Intercept)
列(在初始模型矩阵中由var1abc
替换)。
不幸的是,我没有准确的术语来描述这一点。有人帮帮我吗?