为什么summary() 显示的标准误差与coeftest() 不同?

P_M*_*MA1 4 r summary glm

我使用强大的标准错误运行 glm() 。为了进行后续模型比较,我计算了两个回归模型(系数和se)的差异。对于该计算,我使用summary() 函数。然而,模型的汇总函数显示的标准误差与我从 coeftest() 获得的标准误差不同。系数值保持相同。

输入:

mod.01 <- glm(dep ~ indep1 + indep2 + indep3,
          family = binomial (link = "logit"), data = data)
coeftest(mod.01, vcov. = vcovHC, type= "HC3", df = NULL)

summary(mod.01, robust=T)
Run Code Online (Sandbox Code Playgroud)

输出:

coeftest()      
                           Estimate  Std. Error  t value  Pr(>|t|)    
    (Intercept)         -2.72917626  0.16367787 -16.6741 < 2.2e-16 ***
    indep1               0.00427870  0.41928906   0.0102  0.991859    
    indep2               2.00243724  0.19757861  10.1349 < 2.2e-16 ***
    indep3               0.36385098  0.32783817   1.1098  0.267159    


summary()
                           Estimate Std. Error z value Pr(>|z|)    
    (Intercept)          -2.7291763  0.1758744 -15.518  < 2e-16 ***
    indep1                0.0042787  0.3389472   0.013  0.98993    
    indep2                2.0024372  0.1746829  11.463  < 2e-16 ***
    indep3                0.3638510  0.2604196   1.397  0.16236  
Run Code Online (Sandbox Code Playgroud)

如何将 mod.01 的鲁棒性输入到汇总函数中?因此,最终我的后续计算包括正确的鲁棒性SE,也将显示在回归表中。

提前致谢!

jay*_*.sf 6

的优点lmtest::coeftest是可以使用与 计算得出的协方差矩阵不同的协方差矩阵lm()

fit <- glm(am ~ hp + cyl, family=binomial(link="logit"), mtcars)

summary(fit)
#             Estimate Std. Error z value Pr(>|z|)   
# (Intercept)  5.83220    2.06595   2.823  0.00476 **
# hp           0.02775    0.01366   2.031  0.04228 * 
# cyl         -1.70306    0.60286  -2.825  0.00473 **
Run Code Online (Sandbox Code Playgroud)

如果将初始协方差矩阵从lm()放入coeftest,则标准误差是相同的。

library(sandwich); library(lmtest)

coeftest(fit, vcov.=vcov(fit))
#              Estimate Std. Error z value Pr(>|z|)   
# (Intercept)  5.832204   2.065949  2.8230 0.004757 **
# hp           0.027748   0.013664  2.0307 0.042282 * 
# cyl         -1.703064   0.602862 -2.8250 0.004729 **
Run Code Online (Sandbox Code Playgroud)

计算稳健的标准误差

现在,coeftest我们可以指定不同的协方差矩阵。(旁注:具有“稳健”标准误差的实际标准误差,也称为白色标准误差,用 指定type='HC0',其他'HC*'是细化的,例如 Stata 使用'HC1')。

(ct <- coeftest(fit, vcov.=vcovHC(fit, type='HC0')))
#              Estimate Std. Error z value Pr(>|z|)   
# (Intercept)  5.832204   2.139307  2.7262 0.006407 **
# hp           0.027748   0.012254  2.2643 0.023553 * 
# cyl         -1.703064   0.572045 -2.9772 0.002909 **
Run Code Online (Sandbox Code Playgroud)

这就是您如何从 中获得不同的标准错误coeftest

发布具有强大标准错误的表

要将这些更正的标准误差放入表中,可以使用以下方法texreg::screenreg。您也可以texreg::texreg使用 LaTeX 或texreg::htmlregHTML,主体保持基本相同。

这里使用传统的标准误差,

texreg::screenreg(fit)
# =========================
#                 Model 1  
# -------------------------
# (Intercept)       5.83 **
#                  (2.07)  
# hp                0.03 * 
#                  (0.01)  
# cyl              -1.70 **
#                  (0.60)  
# -------------------------
# AIC              34.63   
# BIC              39.02   
# Log Likelihood  -14.31   
# Deviance         28.63   
# Num. obs.        32      
# =========================
# *** p < 0.001; ** p < 0.01; * p < 0.05
Run Code Online (Sandbox Code Playgroud)

在这里,对于稳健的标准误差,p值和标准误差都需要被覆盖。

texreg::screenreg(fit, 
                  override.pvalues=ct[, 4],
                  override.se=ct[, 3])
# =========================
#                 Model 1  
# -------------------------
# (Intercept)       5.83 **
#                  (2.73)  
# hp                0.03 * 
#                  (2.26)  
# cyl              -1.70 **
#                 (-2.98)  
# -------------------------
# AIC              34.63   
# BIC              39.02   
# Log Likelihood  -14.31   
# Deviance         28.63   
# Num. obs.        32      
# =========================
# *** p < 0.001; ** p < 0.01; * p < 0.05
Run Code Online (Sandbox Code Playgroud)