【问题标题】:R mtcars dataset model selection - model changes dramatically when including amR mtcars 数据集模型选择 - 包含 am 时模型发生显着变化
【发布时间】:2018-04-11 05:51:33
【问题描述】:

我正在尝试为 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 以查看是否有区别时,一切都会改变: 调整后的R^2 变得更好; p 变得更糟。 但突然间 cyl 不再显着了。(它从 Pr 0.000222 变为 0.2119)从系数输出中我会明确地将 am 从列表中排除,因为它的不显着的概率是 31 ,42%。

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

【问题讨论】:

    标签: r model-comparison


    【解决方案1】:

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

    【讨论】:

    • 是的,那是真的,但是我怎样才能找到一个好的模型呢?我了解了向后消除或向前选择,但这似乎在这里不起作用
    • 现在你最好的模型,假设你保持相同的分类/回归算法,是表现最好的模型,给定一个特定的指标(r2_score,混淆指标,mse...)。特征选择和卷积(从特征子集导出新特征)本身就是一门艺术
    【解决方案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 值没有太大变化,但是当您包含 hp 时,cylam 的 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 + cylmpg ~ wt + am + hp 所在的模型是明智的。事实证明,hp 的模型具有稍好的 R 平方值(和更低的 AIC),并且可能是更好的模型。这很难看出,因为当您按顺序构建模型时,cyl 似乎更适合作为要添加的第二个变量。但如果包含hp,则hpam 的组合比cylam 的组合具有更好的属性。这就是为什么stepAIC和随机森林等自动化方法如此受欢迎的原因;他们可以相当快地探索其中的许多细微差别。

    另外一点:使用cyl 作为数值变量可能不适合实际模型。 cyl 只接受三个值,4、6 和 8。3、5 和 7 缸发动机非常少见,因此 cyl 可能更好地被视为一个因素。有时这可能会影响您的模型拟合(尽管在这种特殊情况下影响不大)

    【讨论】:

    • 哇,谢谢本杰明,这是一个非常棒的解释!
    猜你喜欢
    • 2019-01-17
    • 2013-09-08
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    相关资源
    最近更新 更多