我正在处理这个数据集https://archive.ics.uci.edu/ml/datasets/automobile。有一个分类变量叫做"门的数目",它可以是(2,4(,这给我带来了麻烦。
当我运行lm(formula = price ~ horsepower + num.of.doors, data = train.sample)
来预测价格时,输出是:
调用:lm(公式=价格~马力+门数,数据=列车样本(
系数:(拦截(门的马力数两个
-4006.5 174.1-1856.2
但我想看看四扇门的门数系数。我该怎么做?
有几个选项:
1-将num.of.doors转换为一个因子,并重新编码,使两个门成为基准面。运行lm命令后,它将在线性回归中显示四个门的系数。这可以通过以下方式实现:
library(tidyverse)
new_train_sample <- train.sample %>%
mutate(num.of.doors = factor(num.of.doors, levels = c("two", "four")))
lm_1 <- lm(formula = price ~ horsepower + num.of.doors, data = new_train_sample)
summary(lm_1)
2-通过原点进行回归。这将使两个系数在相同的lm命令下可用,但对截距的解释将略有变化。这不会影响预测或系数的大小。
lm_origin <- lm(formula = price ~ 0 + horsepower + num.of.doors, data = train.sample)
summary(lm_origin)
我认为你的问题是因为当你用分类变量调整线性回归时,其中一个类别将被用作"参考";并且其值将表示(为部分(在";截距";。
因此,要查看";四个门";您应该更改变量的基引用。你可以用
train_sample$num.of.doors = relevel(train_sample$num.of.doors, ref=2)
请记住,随着这种变化;两个门";现在将作为基本参考。
如果num.of.doors只有两个值("两个"one_answers"四个"(;四";在此模型中为0。
你的公式是价格=-4006.6+174.1(马力(-1856.2(门数=两个(
因此,如果汽车有四个车门,您的价格只是:价格=-4006.6+174.1*马力
之所以会发生这种情况,是因为变量是分类的。它可以被解释为";如果这辆车有两个门而不是四个门,我的模型估计价格将比四个门的车低1856.20">