GLMNET:提取标准化系数

4

我正在使用cv.glmnet()函数来运行回归模型。参数standardize = TRUE会在拟合模型之前标准化所有的x变量(预测变量)。然而,系数总是以原始比例返回输出/结果。

是否有一种方法可以接收标准化系数(beta权重)的输出,使系数可以进行比较?

1个回答

5

当你标准化或者缩放时,你会使用公式 (x - mean(x))/sd(x)。当对此做回归时,中心化部分 (- mean(x)) 将被纳入截距项(intercept),因此只有标准偏差对系数(coefficient)产生影响。

要从未缩放的系数转换为缩放后的系数,可以乘以标准差。

我们可以进行检查,首先对缩放后的 x 变量进行回归:

scaled_mt = mtcars
scaled_mt[,-1] = scale(scaled_mt[,-1])
fit_scaled = lm(mpg ~ .,data=scaled_mt)

原始数据上的回归:

fit = lm(mpg ~ .,data=mtcars)

glmnet是一种回归分析工具,我设置了非常低的lambda值以包含所有术语:

fit_lasso = cv.glmnet(y=as.matrix(mtcars[,1]),x=as.matrix(mtcars)[,-1],lambda=c(0.0001,0.00001))

所有x变量的标准差:

AllSD = apply(mtcars[,-1],2,sd)

展示变换是否正常:
cbind(scaled=coefficients(fit_scaled)[-1],
from_lm = coefficients(fit)[-1]*allSD,
from_glmnet = coefficients(fit_lasso)[-1]*allSD)

         scaled    from_lm from_glmnet
cyl  -0.1990240 -0.1990240  -0.1762826
disp  1.6527522  1.6527522   1.6167872
hp   -1.4728757 -1.4728757  -1.4677513
drat  0.4208515  0.4208515   0.4268243
wt   -3.6352668 -3.6352668  -3.6071975
qsec  1.4671532  1.4671532   1.4601126
vs    0.1601576  0.1601576   0.1615794
am    1.2575703  1.2575703   1.2563485
gear  0.4835664  0.4835664   0.4922507
carb -0.3221020 -0.3221020  -0.3412025

请注意,这并不意味着它们是可比较的,因为它们是按标准差缩放的。缩放的更重要目的是将它们居中,这样您可以更轻松地解释正或负的关系。


当所有系数都为负数时,这意味着什么?我的意思是解释。 - PesKchan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接