gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:38:17 25 4
gpt4 key购买 nike

当我尝试按如下方式在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com