告诉你的教授他们错了绝非易事。
正如那篇文章所解释的那样,标准化系数可以大于 1.00,而且很容易证明。是否应该排除它们取决于它们发生的原因——但可能不是。
它们表明你有一些非常严重的共线性。它们经常发生的一种情况是当您有非线性效应时,例如当和作为预测变量包含在模型中时。 xx2
这是一个快速演示:
data(cars)
cars$speed2 <- cars$speed^2
cars$speed3 <- cars$speed^3
fit1 <- lm(dist ~ speed, data=cars)
fit2 <- lm(dist ~ speed + cars$speed2, data=cars)
fit3 <- lm(dist ~ speed + cars$speed2 + speed3, data=cars)
summary(fit1)
summary(fit2)
summary(fit3)
lm.beta(fit1)
lm.beta(fit2)
lm.beta(fit3)
最后一点输出:
> lm.beta(fit3)
speed speed2 speed3
1.395526 -2.212406 1.681041
或者,如果您愿意,可以先标准化变量:
zcars <- as.data.frame(rapply(cars, scale, how="list"))
fit3 <- lm(dist ~ speed + speed2 + speed3, data=zcars)
summary(fit3)
Call:
lm(formula = dist ~ speed + speed2 + speed3, data = zcars)
Residuals:
Min 1Q Median 3Q Max
-1.03496 -0.37258 -0.08659 0.27456 1.73426
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7.440e-16 8.344e-02 0.000 1.000
speed 1.396e+00 1.396e+00 1.000 0.323
speed2 -2.212e+00 3.163e+00 -0.699 0.488
speed3 1.681e+00 1.853e+00 0.907 0.369
Residual standard error: 0.59 on 46 degrees of freedom
Multiple R-squared: 0.6732, Adjusted R-squared: 0.6519
F-statistic: 31.58 on 3 and 46 DF, p-value: 3.074e-11
你不需要用 lm() 来做,如果你愿意,你可以用矩阵代数来做:
Rxx <- cor(cars)[c(1, 3, 4), c(1, 3, 4)]
Rxy <- cor(cars)[2, c(1, 3, 4)]
B <- (ginv(Rxx)) %*% Rxy
B
[,1]
[1,] 1.395526
[2,] -2.212406
[3,] 1.681041