【发布时间】:2016-04-21 13:30:39
【问题描述】:
我收到此错误取决于我包含哪些变量以及我在公式中指定它们的顺序:
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels
我对此进行了一些研究,看起来这可能是由所讨论的变量不是因子变量引起的。在这种情况下(is_women_owned),它是一个具有 2 个级别(“是”、“否”)的因子变量。
> levels(customer_accounts$is_women_owned)
[1] "No" "Yes"
没有错误:
f1 <- lm(combined_sales ~ is_women_owned, data=customer_accounts)
没有错误:
f2 <- lm(combined_sales ~ total_assets + market_value + total_empl + empl_growth + sic + city + revenue_growth + revenue + net_income + income_growth, data=customer_accounts)
回归上述公式加上因子变量“is_women_owned”:
f3 <- lm(combined_sales ~ total_assets + market_value + total_empl + empl_growth + sic + city + revenue_growth + revenue + net_income + income_growth + is_women_owned, data=customer_accounts)
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels
如您所料,在应用逐步线性回归时,我得到了同样的错误。
这似乎是一个错误,它应该给我们一个模型,其中“is_women_owned”可能没有提供额外的解释价值,因为它与其他变量高度相关,而不是像这样的错误。
我验证了这个变量也没有丢失数据:
> which(is.na(customer_accounts$is_women_owned))
integer(0)
此外,因子变量中存在两个值:
customer_accounts$is_women_owned[1:20]
[1] No No No No No No No No No No No No No No Yes No
[17] No No No No
Levels: No Yes
【问题讨论】:
-
对于 F2,is_women_owned 的值始终相同?这就是导致错误的原因。此外,如果变量在所有响应中都相同,则它不会提供有关响应变量的信息,并且不应成为回归中的一个因素
-
很难理解这实际上意味着什么。因子变量 is_women_owned 有两个值。可能与其他变量存在某种关系。也许它与其中的一个或多个高度相关。在这种情况下,它在模型中是多余的。但它不限于一个值。
-
您说“is_women_owned 对于 f2 始终是相同的值”。您的数据也没有显示任何过滤来明确这一点。在 customer_accounts 中是否存在 f2 是不同值的情况?
-
我认为我对 f2 评论的措辞具有误导性/混淆性。我将对其进行编辑以使其更清晰。我应该首先写f3。其次,我的评论是关于回归模型,而不是变量的值。我的意思是“is_women_owned”是否等同于“total_assets + market_value + total_empl + empl_growth + sic + city +income_growth +income + net_income +income_growth”)?所有模型的预测变量值都相同(f1、f2、 f3).
-
当我过去使用一些人为的示例变量完成此操作时,这不会导致错误。例如,添加第三个变量 x3 = x1 + x2 并对 y ~ x1 + x2 + x3 进行回归可以正常工作,它只是包含冗余信息。
标签: r linear-regression lm