我最初有这个公式:
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
数据集和回归mpg
上disp
和drat
;或在 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值;然后从 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/