在带有分类变量的 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)
我正在处理这个数据集 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)