【问题标题】:glmnet: extracting standardized coefficientsglmnet:提取标准化系数
【发布时间】:2020-06-05 22:13:00
【问题描述】:

我正在使用函数cv.glmnet() 运行回归模型。参数standardize = TRUE 在拟合模型之前标准化所有 x 变量(预测变量)。但是,系数始终以输出/结果的原始比例返回。 有没有办法接收输出的标准化系数(β 权重),以便系数具有可比性?

【问题讨论】:

    标签: r glmnet


    【解决方案1】:

    当你标准化或缩放时,你会做 (x - mean(x))/sd(x)。当对此进行回归时,居中部分 (- mean(x) ) 进入截距,因此只有标准偏差会影响您的系数。

    要从未缩放系数变为已缩放系数,您可以乘以标准差。

    我们可以检查这一点,首先是缩放 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
    

    但请注意,这并不一定使它们具有可比性,因为它们是按标准差缩放的。缩放更重要的目的是使它们居中,这样您就可以更轻松地解释积极或消极的关系。

    【讨论】:

      猜你喜欢
      • 2021-03-13
      • 2014-08-09
      • 2020-12-01
      • 2013-06-19
      • 2020-11-15
      • 2019-07-25
      • 2019-07-12
      • 2020-01-27
      • 2015-03-04
      相关资源
      最近更新 更多