R model.matrix 中缺少级别

2023-12-09

我正在尝试将带有分类变量的数据框转换为 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) * 3var*???列加上(Intercept)列(替换为var1abc在您的初始模型矩阵中)。

不幸的是我缺乏准确的术语来描述这一点。有人帮我吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R model.matrix 中缺少级别 的相关文章

随机推荐