【问题标题】:Standardizing regression coefficients changed significance标准化回归系数改变了显着性
【发布时间】:2019-02-01 05:08:10
【问题描述】:

我最初有这个公式: lm(PopDif ~ RailDensityDif + Ports + Coast, data = Pop),RailDensityDif 的系数为 1,419,000,港口为 -0.1011,Coast 为 3418。缩放变量后:lm(scale(PopDif) ~ scale(RailDensityDif) + scale(Ports) + scale(Coast), data = Pop),我的 RailDensityDif 系数为 0.02107,Coast 为 0.2221,所以现在 Coast 比 RailDensityDif 更重要。我知道缩放不应该改变重要性——为什么会发生这种情况?

【问题讨论】:

  • “所以现在 Coast 比 RailDensityDif 更重要” 这句话的依据是什么?您报告的只是参数估计值;请通过包含 (1) 示例数据和 (2) 代码来重现两个模型的参数估计,从而使您的帖子可重现。关于如何提供minimal reproducible example/attempt 的建议可能在这种情况下(以及未来的帖子)有用。
  • 同样相关的是以下帖子,它解释了在标准化(缩放)变量时,表征线性模型中参数统计显着性的 p 值实际上如何变化:Standardized estimates give different p-value with a glmer/lmer
  • 要扩展我上面的 cmets,请查看我下面的帖子以获取实际示例(基于 mtcars)。
  • 这太旧了,无法迁移,但确实属于 CrossValidated。

标签: r regression scale linear-regression


【解决方案1】:

tldr; 表征线性模型中参数统计显着性的 p 值可能会随着缩放(标准化)变量而改变。


例如,我将使用mtcars 数据集,并在dispdrat 上回归mpg;或 R 的 formula 语言 mpg ~ disp + drat

1。三个线性模型

我们实现了三种不同的 (OLS) 线性模型,不同之处在于变量的缩放策略不同。

  1. 首先,我们不进行任何缩放。

    m1 <- lm(mpg ~ disp + drat, data = mtcars)
    
  2. 接下来,我们使用scale 缩放值,默认情况下它会做两件事:(1) 它通过减去均值来将值居中在0,以及 (2) 它通过除以 (居中) 来缩放值以具有单位方差) 值的标准偏差。

    m2 <- lm(mpg ~ disp + drat, data = as.data.frame(scale(mtcars)))
    

    请注意,我们可以将scale 直接应用于data.frame,这将按列缩放值。 scale 返回 matrix,因此我们需要将生成的对象转换回 data.frame

  3. 最后,我们使用scale 缩放值而不进行居中,但缩放值以具有单位方差

    m3 <- lm(mpg ~ disp + drat, data = as.data.frame(scale(mtcars, center = F)))
    

2。参数估计和统计显着性的比较

让我们检查m1的参数估计

summary(m1)$coef
#               Estimate  Std. Error   t value     Pr(>|t|)
#(Intercept) 21.84487993 6.747971087  3.237252 3.016655e-03
#disp        -0.03569388 0.006652672 -5.365345 9.191388e-06
#drat         1.80202739 1.542091386  1.168561 2.520974e-01

我们从参数估计和标准误差的比率中得到t值; p-值然后从df = nrow(mtcars) - 3 的 pdf 曲线下的区域遵循(因为我们有 3 个参数)其中x &gt; |t|(对应于两侧 t em>-测试)。例如,对于disp,我们确认 t

summary(m1)$coef["disp", "Estimate"] / summary(m1)$coef["disp", "Std. Error"]
#[1] -5.365345

p-值

2 * pt(summary(m1)$coef["disp", "Estimate"] / summary(m1)$coef["disp", "Std. Error"], nrow(mtcars) - 3)
#[1] 9.191388e-06

我们来看看m2的结果:

summary(m2)$coef
#                 Estimate Std. Error       t value     Pr(>|t|)
#(Intercept) -1.306994e-17 0.09479281 -1.378790e-16 1.000000e+00
#disp        -7.340121e-01 0.13680614 -5.365345e+00 9.191388e-06
#drat         1.598663e-01 0.13680614  1.168561e+00 2.520974e-01

请注意 t 值(即估计值和标准误差的比率)与 m1 的值相比有何不同,这是由于数据的中心化和缩放以具有单位方差。

但是,如果我们不将值居中,而仅将它们缩放为具有单位方差

summary(m3)$coef
#              Estimate Std. Error   t value     Pr(>|t|)
#(Intercept)  1.0263872 0.31705513  3.237252 3.016655e-03
#disp        -0.4446985 0.08288348 -5.365345 9.191388e-06
#drat         0.3126834 0.26757994  1.168561 2.520974e-01

我们可以看到,虽然估计值和标准误差与m1 的(未缩放)结果相比不同,但它们各自的比率(即 t 值)为 相同。所以(默认)scale(...) 会改变参数估计的统计显着性,而scale(..., center = FALSE) 不会。

当查看 OLS 参数估计值和标准误差的封闭形式时,很容易看出 为什么将值除以它们的标准差不会改变 OLS 参数估计值和标准误差的比率,参见例如here.

【讨论】:

  • 请注意,在这种情况下,p 值仅针对截距变化。如果模型包含交互作用,则居中只会改变除截距以外的系数的 p 值。
猜你喜欢
  • 2020-11-23
  • 2020-09-07
  • 2015-11-13
  • 2016-02-28
  • 1970-01-01
  • 2021-04-06
  • 2013-10-09
  • 1970-01-01
  • 2018-05-04
相关资源
最近更新 更多