【问题标题】:How to obtain standardized regression coefficients for bootstrapped models or models with robust SE in R如何获得 R 中自举模型或具有鲁棒 SE 的模型的标准化回归系数
【发布时间】:2020-04-19 07:45:47
【问题描述】:

在 R 中,当我们拟合回归模型时,不幸的是标准化系数不容易获得。幸运的是,有一个包lm.beta 可以提取它们。例如:

fit.model1.lm <- lm(Sepal.Length ~ Sepal.Width + Petal.Width, iris)
lm.beta(fit.model1.lm)

但是,如果我们使用引导程序(例如,来自包 simpleboot):

fit.model1.boot <- lm.boot(fit.model1.lm)

或者,如果我们使用稳健的标准错误(例如来自 sandwich 包):

coeftest(fit.model1.lm, vcov = vcovHC(fit.model1.lm))

不可能通过lm.beta 获得标准化系数,因为它们只适用于lm 类的对象。

那如何获得呢?

【问题讨论】:

    标签: r regression linear-regression


    【解决方案1】:

    为了得到标准化的系数,我们也可以在估计之前scale我们的变量:

    library("lm.beta")
    fit.model1.lm <- lm(Sepal.Length ~ Sepal.Width + Petal.Width, iris)
    lm.beta(fit.model1.lm)
    # Call:
    #   lm(formula = Sepal.Length ~ Sepal.Width + Petal.Width, data = iris)
    # 
    # Standardized Coefficients::
    # (Intercept) Sepal.Width Petal.Width 
    #   0.0000000   0.2100575   0.8948486 
    (fit.model1.lm.st <- lm(Sepal.Length ~ Sepal.Width + Petal.Width, 
                            cbind(lapply(iris[-5], scale), iris[5])))
    # Call:
    #   lm(formula = Sepal.Length ~ Sepal.Width + Petal.Width, data = cbind(lapply(iris[-5], 
    #                                                                              scale), iris[5]))
    # 
    # Coefficients:
    # (Intercept)  Sepal.Width  Petal.Width  
    #  -1.422e-15    2.101e-01    8.948e-01  
    

    因此在lm.boot 中使用scaled lm 拟合(此处为fit.model1.lm.st)将为您提供所需的标准化引导系数。

    library("simpleboot")
    set.seed(42)  # for sake of reproducibility
    (fit.model1.boot <- lm.boot(fit.model1.lm.st, R=200))
    # BOOTSTRAP OF LINEAR MODEL  (method = rows)
    # 
    # Original Model Fit
    # ------------------
    # Call:
    # lm(formula = Sepal.Length ~ Sepal.Width + Petal.Width, data = cbind(lapply(iris[-5], 
    #                                                                              scale), iris[5]))
    # 
    # Coefficients:
    # (Intercept)  Sepal.Width  Petal.Width  
    #  -1.422e-15    2.101e-01    8.948e-01  
    

     

    library(lmtest)
    library(sandwich)
    coeftest(fit.model1.lm.st, vcov=vcovHC(fit.model1.lm.st))
    # t test of coefficients:
    #   
    #                Estimate  Std. Error t value  Pr(>|t|)    
    # (Intercept) -1.4222e-15  4.4920e-02  0.0000         1    
    # Sepal.Width  2.1006e-01  4.7055e-02  4.4641 1.591e-05 ***
    # Petal.Width  8.9485e-01  5.2321e-02 17.1031 < 2.2e-16 ***
    # ---
    # Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    

    【讨论】:

    • 谢谢!还有一个问题——我们如何处理数字编码的分类变量?我们是让它们保持原样,还是也需要扩展它们?
    • 缩放分类变量对我来说毫无意义,我已经 cbinded 它在我的代码中(在 lapply 中)。
    猜你喜欢
    • 2020-12-15
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 2016-04-27
    • 2016-08-18
    • 2017-05-23
    • 1970-01-01
    相关资源
    最近更新 更多