【发布时间】: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,你还记得你是怎么解决这个问题的吗?
标签: r linear-regression na lm categorical-data