0

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

由于 adj R^2 只有 0.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 数据集中应该有一些意义。 在此处输入图像描述

4

2 回答 2

3

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

正如你所描述的,一个使用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(请原谅我的舍入不佳)。您应该注意到 的 p 值wt没有太大变化,但是当您包含 时cyl和的 p 值am要大得多hp

这表明一些自变量之间存在某种形式或相关性。换句话说,自变量并不是真正独立的。结果是相关变量的标准误被夸大了。由于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事实证明,发动机中有更多气缸会增加马力。包括这两个变量违反了独立性假设。

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

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

于 2017-10-30T11:50:30.910 回答
0

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

于 2017-10-30T09:48:56.643 回答