尽管有两个水平,但对比只能应用于具有两个或更多水平的因素[重复]

Posted

技术标签:

【中文标题】尽管有两个水平,但对比只能应用于具有两个或更多水平的因素[重复]【英文标题】:contrasts can be applied only to factors with 2 or more levels in spite of having two levels [duplicate] 【发布时间】:2015-07-23 17:33:36 【问题描述】:

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

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

> 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

【问题讨论】:

你必须给我们一些可重现的东西;除了您在此处描述的内容之外,还有其他事情正在发生。我会举一个反例作为答案。 @Aaron 我明白了,让我试着创造一些你可以复制的东西 请在how to make a great reproducible example 上查看此问题以获取建议。 好的,我偷看了,即使它在另一个网站上。首先,您有 100 个观察值和 104 个预测变量,所以这甚至不是明智之举。其次,运行na.omit 后,您的摘要行不在数据集中;该数据集只有 13 个观测值。请参阅上面的链接以获取有关如何制作出色的可重现示例的建议;如果您遵循该建议,您会注意到这一点。 @PepperBoy,你还记得你是怎么解决这个问题的吗? 【参考方案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  

【讨论】:

我在编辑中提到的公共共享中放置了一个可重现的示例。请参阅我上面的编辑。 为了后代,最好不要依赖其他网站上发布的数据或信息。您可以将其简化为最简单的情况并在此处发布吗?

以上是关于尽管有两个水平,但对比只能应用于具有两个或更多水平的因素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用具有 2 个或更多水平的因素运行(混合模型)回归时,错误“对比只能应用于具有 2 个或更多水平的因素”

回归在输入变量之一上给出错误“对比只能应用于具有2个或更多水平的因素”[重复]

使用 lm 构建回归模型时出错(`对比<-`中的错误(`*tmp*`...对比只能应用于具有2个或更多级别的因素)[重复]

`contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) 中的错误:对比只能应用于具有 2 个或更多级别的因子

固定水平位置,但允许使用 jQuery 进行垂直滚动

尽管应用了正确的 CSS 规则,但按钮没有水平居中 [重复]