我正在尝试进行线性回归,并观察到我得到了这个错误,尽管我的所有因子列都至少有两个级别。
我跟踪到了给我这个错误的列,这是该列的摘要
> summary(df[,30])
0 1 <NA>
31543 14 0
> unique(df[,30])
[1] 0 1
Levels: 0 1 <NA>
我还通过执行以下操作消除了所有具有NA值的行
df = na.omit(df)
请注意,上面的NA是我使用addNA函数添加的额外因子级别。
如何解决此问题?
编辑: 我在http://aftabubuntu.cloudapp.net/的公开分享中放置了一个可重复的示例。请从此处下载reproduce.RDS文件。
这是我正在使用的代码
df = readRDS('reproduce.RDS')
model = lm(formula = COL_101~.,data=traindf)
predict.lm(model, df[1:5,])
这是我的输出
> model = lm(formula = COL_101~.,data=df)
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels
答案 0 :(得分:1)
如果事实证明这个问题,那么这不是一个很好的答案,尽管可能是这样。我可以重新创建看起来像你的数据,但这样可行,如下所示。
set.seed(5)
df <- data.frame(y=rnorm(100), x=addNA(rep(c(0,1), c(80,20))))
table(df$x)
## 0 1 <NA>
## 80 20 0
lm(y~x, data=df)
## Call:
## lm(formula = y ~ x, data = df)
##
## Coefficients:
## (Intercept) x1
## 0.007601 0.120172