在带有分类变量的 r 输出中使用 lm() 的多元线性回归不完整?

Multiple Linear Regression using lm() in r output with categorical variable is incomplete?

我正在处理这个数据集 https://archive.ics.uci.edu/ml/datasets/automobile。有一个名为 'num.of.doors' 的分类变量,它可以是(二,四)这给我带来了麻烦。

当我运行lm(formula = price ~ horsepower + num.of.doors, data = train.sample)预测价格时,输出是:

Call: lm(formula = price ~ horsepower + num.of.doors, data = train.sample)

Coefficients: (Intercept) horsepower num.of.doorstwo
-4006.5 174.1 -1856.2

但是我想看看四扇门的num.of.doors系数。我该怎么做?

如果 num.of.doors 只有两个值(“二”和“四”),则此模型中“四”的系数为 0。

你的公式是 price = -4006.6 + 174.1(horsepower)-1856.2(num.of.doors = Two)

因此,如果这辆车有四扇门,您的价格就是: 价格 = -4006.6 + 174.1*马力

发生这种情况是因为变量是分类的。它可以解释为“如果汽车有两扇门而不是四扇,我的模型估计价格将比四扇门的汽车低 1856.20。”

我认为你的问题是因为当你用分类变量调整线性回归时,其中一个类别将被用作“参考”并且它的值将在“截距”中表示(成为一部分) .

因此,要查看“四扇门”的系数,您应该更改变量的基准引用。你可以这样做:

train_sample$num.of.doors = relevel(train_sample$num.of.doors, ref=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)