向模型添加更多项的固有风险是自变量的共线性。如前所述,线性回归假设自变量相互独立。
如您所述,使用wt 和cyl 的模型如下所示
library(rms)
library(broom)
fit0 <- lm(mpg ~ wt + cyl, data = mtcars)
tidy(fit0)
term estimate std.error statistic p.value
1 (Intercept) 39.686261 1.7149840 23.140893 3.043182e-20
2 wt -3.190972 0.7569065 -4.215808 2.220200e-04
3 cyl -1.507795 0.4146883 -3.635972 1.064282e-03
以及添加am的模型
fit1 <- lm(mpg ~ wt + cyl + am, data = mtcars)
tidy(fit1)
term estimate std.error statistic p.value
1 (Intercept) 39.4179334 2.6414573 14.9227979 7.424998e-15
2 wt -3.1251422 0.9108827 -3.4308942 1.885894e-03
3 cyl -1.5102457 0.4222792 -3.5764148 1.291605e-03
4 am 0.1764932 1.3044515 0.1353007 8.933421e-01
比较,cyl变量的系数从-1.507变为-1.510;变化不大。标准误从 0.414 变为 0.422;变化不大。虽然 p 值确实变大了,但也不是很大。
您显示的实际更改了一些内容的模型还包括hp。让我们看看这个模型:
fit2 <- lm(mpg ~ wt + cyl + am + hp, data = mtcars)
tidy(fit2)
term estimate std.error statistic p.value
1 (Intercept) 36.14653575 3.10478079 11.642218 4.944804e-12
2 wt -2.60648071 0.91983749 -2.833632 8.603218e-03
3 cyl -0.74515702 0.58278741 -1.278609 2.119166e-01
4 am 1.47804771 1.44114927 1.025603 3.141799e-01
5 hp -0.02495106 0.01364614 -1.828433 7.855337e-02
在这种情况下,cyl 系数的幅度变小了,标准误从 0.422 增加到了 0.582。为了比较,am 的标准误差只有在 1.304 到 1.441 时;相比之下,wt 的标准误差仅从 0.910 变为 0.919(请原谅我的舍入不佳)。您应该注意到 wt 的 p 值没有太大变化,但是当您包含 hp 时,cyl 和 am 的 p 值要大得多。
这表明某些自变量之间存在某种形式或相关性。换句话说,自变量并不是真正独立的。结果是相关变量的标准误被夸大了。由于t = estimate / std.error,标准误越大,t 值越小,p 值越大。
在构建模型时,您应该记住模型假定预测变量之间是独立的。看待这一点的一种好方法是使用方差膨胀因子。对于我们的模型,我们得到以下结果
vif(fit0)
wt cyl
2.579312 2.579312
vif(fit1)
wt cyl am
3.609011 2.584066 1.924955
vif(fit2)
wt cyl am hp
3.988305 5.333685 2.546159 4.310029
您会注意到,当我们添加 hp 时,cyl 变量的 VIF 加倍。事实证明,发动机中有更多气缸会增加马力。包括这两个变量违反了独立性假设。
如果我们尝试使用这些变量构建模型,比较mpg ~ wt + am + cyl 和mpg ~ wt + am + hp 所在的模型是明智的。事实证明,hp 的模型具有稍好的 R 平方值(和更低的 AIC),并且可能是更好的模型。这很难看出,因为当您按顺序构建模型时,cyl 似乎更适合作为要添加的第二个变量。但如果包含hp,则hp 和am 的组合比cyl 和am 的组合具有更好的属性。这就是为什么stepAIC和随机森林等自动化方法如此受欢迎的原因;他们可以相当快地探索其中的许多细微差别。
另外一点:使用cyl 作为数值变量可能不适合实际模型。 cyl 只接受三个值,4、6 和 8。3、5 和 7 缸发动机非常少见,因此 cyl 可能更好地被视为一个因素。有时这可能会影响您的模型拟合(尽管在这种特殊情况下影响不大)