【问题标题】:Do I need Indicators for Regression with Categorical Variables?我需要分类变量回归指标吗?
【发布时间】:2017-08-27 03:07:21
【问题描述】:

人们总是说,为了回归,我们需要为分类值创建预测变量。我做了一个测试,首先为一个五层分类变量创建一个 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)

【问题讨论】:

    标签: r statistics regression linear-regression lm


    【解决方案1】:

    问题是,你原来有一个字符列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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 2019-02-27
      相关资源
      最近更新 更多