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

时间:2017-10-30 09:41:40

标签: r model-comparison

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

由于adj R ^ 2仅为.338,我正在寻找另一种型号。

为了做到这一点,我通过仅使用1个变量拟合所有可能的模型(mpg~wt,mpg~cys,mpg~hp,...并且使用具有最高调整后的R ^ 2的模型,结果证明是MPG〜重量 enter image description here

然后我使用wt +一个其他变量拟合所有可能的模型,并采用具有最高调整后的R ^ 2的模型,其中p值不会越来越高。这是模型mpg~wt + cyl。 enter image description here

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

所以,我的问题出现了:

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

这里发生了什么?从我的第一个模型(mpg~am)我得出结论,在mtcars-dataset中应该有一些am的重要性。 enter image description here

2 个答案:

答案 0 :(得分:2)

为模型添加更多项的固有风险是自变量的共线性。线性回归假设自变量如上所述彼此独立。

如您所述,使用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值没有太大变化,但是当您包含cyl时,amhp的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时,VIF会为cyl变量加倍。事实证明,在发动机中装有更多气缸会增加马力。包括这两个变量违反了独立性假设。

如果我们尝试使用这些变量构建模型,我们最好比较mpg ~ wt + am + cylmpg ~ wt + am + hp的模型。事实证明,hp的模型具有稍好的R平方值(和较低的AIC),并且可能是更好的模型。这很难看,因为当您按照自己的方式顺序构建模型时,cyl似乎更适合作为要添加的第二个变量。但是,如果您添加hp,则hpam的组合比cylam的组合具有更好的属性。这就是stepAIC和随机森林等自动化方法如此受欢迎的原因;他们可以很快地探索很多这些细微差别。

另外一个注意事项:使用cyl作为数字变量可能不符合实际模型。 cyl只需要三个值,4,6和8. 3,5和7个柱面引擎非常罕见,因此cyl可能更好地被视为一个因素。有时这可能会影响您的模型(虽然在这种特殊情况下并不多)

答案 1 :(得分:0)

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