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