REn*_*ast 41 database statistics r
当我尝试在R中定义我的线性模型时,如下所示:
lm1 <- lm(predictorvariable ~ x1+x2+x3, data=dataframe.df)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels
Run Code Online (Sandbox Code Playgroud)
有没有办法忽略它或修复它?有些变量是因素,有些则不是.
Met*_*ics 57
如果您的自变量(RHS变量)是一个因子或只占一个值的字符,则会发生该类型的错误.
示例:R中的iris数据
(model1 <- lm(Sepal.Length ~ Sepal.Width + Species, data=iris))
# Call:
# lm(formula = Sepal.Length ~ Sepal.Width + Species, data = iris)
# Coefficients:
# (Intercept) Sepal.Width Speciesversicolor Speciesvirginica
# 2.2514 0.8036 1.4587 1.9468
Run Code Online (Sandbox Code Playgroud)
现在,如果您的数据只包含一个物种:
(model1 <- lm(Sepal.Length ~ Sepal.Width + Species,
data=iris[iris$Species == "setosa", ]))
# Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
# contrasts can be applied only to factors with 2 or more levels
Run Code Online (Sandbox Code Playgroud)
如果变量是numeric(Sepal.Width)但是只取一个值表示3,则模型会运行,但您将获得NA该变量的系数,如下所示:
(model2 <-lm(Sepal.Length ~ Sepal.Width + Species,
data=iris[iris$Sepal.Width == 3, ]))
# Call:
# lm(formula = Sepal.Length ~ Sepal.Width + Species,
# data = iris[iris$Sepal.Width == 3, ])
# Coefficients:
# (Intercept) Sepal.Width Speciesversicolor Speciesvirginica
# 4.700 NA 1.250 2.017
Run Code Online (Sandbox Code Playgroud)
解决方案:因变量的变化不足,只有一个值.因此,您需要删除该变量,无论是数字,字符还是因子变量.
根据注释更新:由于您知道错误仅发生在因子/字符上,因此您只能关注那些因素,并查看这些因子变量的级别长度是1(DROP)还是大于1(NODROP).
要查看变量是否是因子,请使用以下代码:
(l <- sapply(iris, function(x) is.factor(x)))
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# FALSE FALSE FALSE FALSE TRUE
Run Code Online (Sandbox Code Playgroud)
然后,您只能获得因子变量的数据框
m <- iris[, l]
Run Code Online (Sandbox Code Playgroud)
现在,找到因子变量的级别数,如果这是你需要删除的那个
ifelse(n <- sapply(m, function(x) length(levels(x))) == 1, "DROP", "NODROP")
Run Code Online (Sandbox Code Playgroud)
注意:如果因子变量的级别只有一个,那么这就是变量,你必须放弃.
Sve*_*ein 15
看来,你预测的至少一个,x1,x2,或者x3,只有一个因素水平,因此是一个常数.
看一下
lapply(dataframe.df[c("x1", "x2", "x3")], unique)
Run Code Online (Sandbox Code Playgroud)
找到不同的价值观.
当数据包含NAs时,也可能出现此错误消息。
在这种情况下,行为取决于默认值(请参阅文档),并且可能NA会悄悄删除变量中提到的列中带有' 的所有情况。因此,一个因素可能确实有多个结果,但是当限制为没有NA's的情况时,该因素只有一个结果。
在这种情况下,要修复错误,请更改模型(从公式中删除有问题的因素),或更改数据(即完成案例)。
小智 5
其他作者的答案已经解决了只有一个级别或 NA 的因素问题。
今天,我在使用该rstatix::anova_test()函数时偶然发现了同样的错误,但我的因素还可以(不止一个级别,没有 NA,没有字符向量,......)。相反,我可以通过删除数据框中未包含在模型中的所有变量来修复错误。我不知道这种行为的原因是什么,但在遇到此错误时,仅了解这一点也可能会有所帮助。
| 归档时间: |
|
| 查看次数: |
116286 次 |
| 最近记录: |