tldr; 表征线性模型中参数统计显着性的 p 值可能会随着缩放(标准化)变量而改变。
例如,我将使用mtcars 数据集,并在disp 和drat 上回归mpg;或 R 的 formula 语言 mpg ~ disp + drat。
1。三个线性模型
我们实现了三种不同的 (OLS) 线性模型,不同之处在于变量的缩放策略不同。
-
首先,我们不进行任何缩放。
m1 <- lm(mpg ~ disp + drat, data = mtcars)
-
接下来,我们使用scale 缩放值,默认情况下它会做两件事:(1) 它通过减去均值来将值居中在0,以及 (2) 它通过除以 (居中) 来缩放值以具有单位方差) 值的标准偏差。
m2 <- lm(mpg ~ disp + drat, data = as.data.frame(scale(mtcars)))
请注意,我们可以将scale 直接应用于data.frame,这将按列缩放值。 scale 返回 matrix,因此我们需要将生成的对象转换回 data.frame。
-
最后,我们使用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 > |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.