尽管有两个等级,但对比度仅适用于具有2个或更多等级的因子

时间:2015-05-12 17:30:43

标签: r linear-regression na lm categorical-data

我正在尝试进行线性回归,并观察到我得到了这个错误,尽管我的所有因子列都至少有两个级别。

我跟踪到了给我这个错误的列,这是该列的摘要

> 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

1 个答案:

答案 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