使用lm构建回归模型时出错(对比中的错误< -`(`* tmp *`...对比只能应用于具有2级或更多级别的因子)

时间:2016-01-15 21:03:48

标签: r linear-regression lm

我得到这个错误取决于我包含哪些变量以及我在公式中指定它们的顺序:

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

1 个答案:

答案 0 :(得分:1)

twofac = data.frame("y" = c(1,2,3,4,5,1), "x" = c(2,56,3,5,2,1), "f" = c("apple","apple","apple","apple","apple","banana"))
onefac = twofac[1:5,]

lm(y~x+f,data=twofac)
lm(y~x+f,data=onefac)

> str(onefac)
'data.frame':   5 obs. of  3 variables:
 $ y: num  1 2 3 4 5
 $ x: num  2 56 3 5 2
 $ f: Factor w/ 2 levels "apple","banana": 1 1 1 1 1
> str(twofac)
'data.frame':   6 obs. of  3 variables:
 $ y: num  1 2 3 4 5 1
 $ x: num  2 56 3 5 2 1
 $ f: Factor w/ 2 levels "apple","banana": 1 1 1 1 1 2
> lm(y~x+f,data=twofac)

Call:
lm(formula = y ~ x + f, data = twofac)

Coefficients:
(Intercept)            x      fbanana  
    3.30783     -0.02263     -2.28519  

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

如果您运行上述操作,您会注意到twofac,一个具有2级因子的模型,其中存在两个因子,将运行没有问题。 onefac,一个具有相同2级因子但只有一个级别的模型,会产生相同的错误。

如果您的因子只有其中一个级别,则对该因子进行回归不会给出任何其他信息,因为它在所有响应变量中都是常量