我正在尝试为mtcars数据集做一些模型拟合。我做了一个仅包含传输的模型,它给了我:
由于adj R ^ 2仅为.338,我正在寻找另一种型号。
为了做到这一点,我通过仅使用1个变量拟合所有可能的模型(mpg~wt,mpg~cys,mpg~hp,...并且使用具有最高调整后的R ^ 2的模型,结果证明是MPG〜重量
然后我使用wt +一个其他变量拟合所有可能的模型,并采用具有最高调整后的R ^ 2的模型,其中p值不会越来越高。这是模型mpg~wt + cyl。
然后我将所有可能的模型与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%。
答案 0 :(得分:2)
为模型添加更多项的固有风险是自变量的共线性。线性回归假设自变量如上所述彼此独立。
如您所述,使用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值没有太大变化,但是当您包含cyl
时,am
和hp
的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 + cyl
和mpg ~ wt + am + hp
的模型。事实证明,hp
的模型具有稍好的R平方值(和较低的AIC),并且可能是更好的模型。这很难看,因为当您按照自己的方式顺序构建模型时,cyl
似乎更适合作为要添加的第二个变量。但是,如果您添加hp
,则hp
和am
的组合比cyl
和am
的组合具有更好的属性。这就是stepAIC
和随机森林等自动化方法如此受欢迎的原因;他们可以很快地探索很多这些细微差别。
另外一个注意事项:使用cyl
作为数字变量可能不符合实际模型。 cyl
只需要三个值,4,6和8. 3,5和7个柱面引擎非常罕见,因此cyl
可能更好地被视为一个因素。有时这可能会影响您的模型(虽然在这种特殊情况下并不多)
答案 1 :(得分:0)
我不太清楚你到底在做什么,但这听起来很像是不同功能的模型拟合: 您意识到,许多这些特征具有相关性,这意味着一个变量在一定程度上表达了另一个变量(R可以为您计算并绘制这些相关性)。因此,这意味着您在此处使用的任何模型都可能在内部找出此特征相关性,并使用与结果具有更好相关性的特征,从而减轻其他特征的重量。