r - 标准化回归系数改变了显着性

标签 r regression scale linear-regression

我最初有这个公式: 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 更重要。我知道缩放不应该改变重要性——为什么会发生这种情况?

最佳答案

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


作为示例,我将使用 mtcars数据集和回归mpgdispdrat ;或在 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)))
    

    请注意,我们可以申请scaledata.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值;然后从 df = nrow(mtcars) - 3 的 pdf 曲线下方的区域得出 p 值(因为我们有 3 个参数)其中 x > |t| (对应于双面 t 测试)。例如,对于 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 .

关于r - 标准化回归系数改变了显着性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54473198/

相关文章:

r - 获取矩阵每一列中第一次出现值的索引

javascript - 如何根据歌曲的频率调整图片比例?

r - R中的非线性回归分析

r - 如何使用R中的QR分解计算最小二乘估计量的方差?

r - 提高拟合许多模型的效率

css - 相同高度图像和文本

animation - CSS3 动画比例在 Safari 中无法正常工作

r - 使用 tidymodels 和 treesnip 包的 LightGBM 算法出错

r - 使用grid.arrange保留图的比例

r - 将基于模式匹配的参数传递给 R 中的函数