我是否需要使用分类变量进行回归指标?

时间:2017-04-02 03:55:36

标签: r statistics regression linear-regression lm

总是说我们需要为分类值创建预测变量以便进行回归。我做了一个测试,首先创建一个1,2,3的预测器列,用于五层分类变量。然后,我运行相同的模型,没有预测变量列,但使用分类列本身。

总之,系数不同;然而,它们的相对重要性和对y值的影响是相同的。此外,在这两种情况下,R平方和p值数字完全相同。那么,我是否必须创建预测变量,或者R是否足够智能自动执行?

for(i in 1:74)
{
  if(travel$accommodation[i] == "Hotel")
  {
    travel$pred_hotel[i] <- 1
  }

  if(travel$accommodation[i] == "Airbnb")
  {
    travel$pred_hotel[i] <- 2
  }

  if(travel$accommodation[i] == "Hostel")
  {
    travel$pred_hotel[i] <- 3
  }

  if(travel$accommodation[i] == "With friend/family")
  {
    travel$pred_hotel[i] <- 4
  }

  if(travel$accommodation[i] == "Other")
  {
    travel$pred_hotel[i] <- 5
  }
}

travel$pred_hotel <- as.factor(travel$pred_hotel)

然后:

msf <- lm(ticket_events_money ~ museum_fee + nationality + 
    ticket_events_frequency + accommodation + line + activity_1 + 
    locals + vacation_days, data = travel[-1, ])

mm <- lm(ticket_events_money ~ museum_fee + nationality + 
    ticket_events_frequency + pred_hotel + line + activity_1 + 
    locals + vacation_days, data = travel[-1, ])

summary(msf)
summary(mm)

1 个答案:

答案 0 :(得分:2)

问题是,您最初有一个字符列accommodation。您的新变量pred_hotel是一个因素。函数lm自动将字符协变量转换为因子。在您的测试中,唯一的区别在于因子水平;其余的都是一样的。如果您想查看差异,请移除as.factor行。

另一个常见的失败是如下的最小,可重复的例子。

dat <- data.frame(y = rnorm(20), x = rep(letters[1:2], 10), stringsAsFactors = FALSE)
m1 <- lm(y ~ x, dat)

dat$x[dat$x == 'a'] <- 1
dat$x[dat$x == 'b'] <- 2
class(dat$x)    # still a character column!!
m2 <- lm(y ~ x, dat)

但如果你使用真正的数字,你会发现不同之处:

dat$x <- as.numeric(dat$x)
m3 <- lm(y ~ x, dat)