R mtcars 数据集模型选择 - 包含 am 时模型会发生显着变化

R mtcars dataset model selection - model changes dramatically when including am

我正在尝试为 mtcars 数据集做一些模型拟合。我做了一个只包含传输的模型,它给了我这个:

由于 adj R^2 只有 .338,所以我正在寻找其他型号。

为此,我通过仅使用 1 个变量( mpg~wt 、 mpg~cyl 、 mpg~hp ……)来拟合所有可能的模型,然后采用调整后 R^2 最高的模型,结果成为 mpg~wt

然后我用 wt + 另一个变量拟合所有可能的模型,并采用调整后 R^2 最高的模型,其中 p 值没有变高。这是模型 mpg ~ wt+cyl。

然后我用 wt + cyl + 另一个变量拟合所有可能的模型,并寻找具有最高调整 R^2 的模型,其中 p 值没有变高。 我发现没有其他模型具有更高的 R^2 和更小的 p 值。 (有mpg ~ wt+cyl+hp 但它的p值比mpg ~ wt+cyl高)

那么,我的问题来了:

当我现在包含 am 以查看是否存在差异时,一切都会发生变化: adjustedR^2 变得更好; p 变得更糟。 但突然之间,cyl 不再重要了。(它从 Pr 0.000222 变为 0.2119)从系数输出中,我明确地将 am 从列表中排除,因为它不蜂鸣的概率重要的是 31,42%。

这是怎么回事? 从我的第一个模型 (mpg~am) 我得出结论,mtcars 数据集中应该有一些意义。

我不太清楚你到底在做什么,但这听起来很像具有不同特征集的模型拟合: 你意识到,这些特征中有许多具有相关性,这意味着一个变量在一定程度上表达了另一个变量(R 可以为你计算和绘制这些相关性)。因此,这意味着您在这里使用的任何模型都可能在内部计算出这种特征相关性,并使用与结果具有更好相关性的特征来代替,从而降低其他特征的权重。

向模型中添加更多项的固有风险是自变量的共线性。如前所述,线性回归假设自变量是相互独立的。

如您所述,使用 wtcyl 的模型如下所示

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 值变化不大,但是 cylam 的 p 值在包含 hp 时要大得多。

这表明某些自变量之间存在某种形式或相关性。换句话说,自变量并不是真正独立的。结果是相关变量的标准误差被夸大了。由于 t = estimate / std.error,较大的标准误差导致较小的 t 值,从而导致较大的 p 值。

构建模型时,您应该记住模型假定预测变量之间是独立的。一种看待这个问题的好方法是使用方差 Inflation 因子。对于我们的模型,我们得到以下内容

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 + cylmpg ~ wt + am + hp 的模型。事实证明,hp 的模型具有更好的 R 平方值(和更低的 AIC),并且可能是更好的模型。这很难看出,因为当您按顺序构建模型时,cyl 似乎更适合作为要添加的第二个变量。但是如果包含hphpam的组合比cylam的组合有更好的性能。这就是 stepAIC 和随机森林等自动化方法如此受欢迎的原因;他们可以很快探索其中的许多细微差别。

一个附加说明:使用 cyl 作为数值变量可能不适合实际模型。 cyl 只取三个值,4、6 和 8。3、5 和 7 缸发动机非常少见,因此 cyl 可能更适合作为一个因素。有时这会对您的模型拟合产生影响(尽管在这种特殊情况下影响不大)