标准化回归系数改变了意义

时间:2019-02-01 05:08:11

标签: r regression scale linear-regression

我最初有以下公式: lm(PopDif ~ RailDensityDif + Ports + Coast, data = Pop),RailDensityDif的系数为1,419,000,港口的系数为-0.1011,海岸的系数为3418。缩放变量lm(scale(PopDif) ~ scale(RailDensityDif) + scale(Ports) + scale(Coast), data = Pop)之后,我的RailDensityDif系数为0.02107,Coast的系数为0.2221,因此,Coast比RailDensityDif的重要性更大。我知道缩放不应该改变重要性—为什么会这样?

1 个答案:

答案 0 :(得分:0)

tldr; 表征线性模型中参数统计意义的 p 值可能会在缩放(标准化)变量后发生变化。


作为示例,我将使用mtcars数据集,并在mpgdisp上回归drat;或使用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(因为我们有3个参数)的pdf曲线下的区域开始,其中x > |t|(对应于双面 t -test)。因此,例如,对于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参数估计值和标准误差的封闭形式,见例如here