database - 在 R 中定义线性模型时出现对比错误

标签 database r statistics

当我尝试按如下方式在 R 中定义我的线性模型时:

lm1 <- lm(predictorvariable ~ x1+x2+x3, data=dataframe.df)

我收到以下错误消息:

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
contrasts can be applied only to factors with 2 or more levels 

有什么办法可以忽略或修复它吗?有些变量是因素,有些则不是。

最佳答案

如果您的自变量(RHS 变量)是一个因子或一个仅取一个值的字符,则会发生此类错误。

示例:R 中的虹膜数据

(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  

现在,如果您的数据仅包含一个物种:

(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

如果变量是数字 (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

解决方案:因变量只有一个值,变异不够。因此,您需要删除该变量,无论它是数字变量、字符变量还是因子变量。

根据评论更新:因为您知道错误只会发生在因子/字符上,您可以只关注那些因子变量的水平长度是否为 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 

然后就可以只得到因子变量的数据框了

m <- iris[, l]

现在,找到因子变量的水平数,如果这是一个你需要删除那个

ifelse(n <- sapply(m, function(x) length(levels(x))) == 1, "DROP", "NODROP")

注意:如果因子变量的水平只有一个那么就是变量,则必须删除。

关于database - 在 R 中定义线性模型时出现对比错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18171246/

相关文章:

mysql - 复合主要和基数

android - 以编程方式获取我的应用程序的数据库目录

html - knitr、R Markdown 和 xtable : xtable tables within HTML table

algorithm - 生成排序的随机数而不涉及求幂?

unit-testing - 如何进行不确定性的单元测试?

python - 使用 pandas 数据帧和约束最小化距离 (Knn)

Python通过TCPS连接Oracle数据库

mysql - 不同品类的数据库结构设计

r - 按特定(自定义)顺序对整数向量进行排序

r - R中的 "{"类是什么?