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

Why does summary() show different standard errors than coeftest()?

I 运行 使用稳健标准误差的 glm()。对于随后的 model 比较,我计算了两个回归的差异 models(系数 & se)。对于该计算,我使用 summary() 函数。但是,models 的汇总函数显示的标准错误与我从 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)

输出:

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  

如何将 mod.01 的稳健 se 放入汇总函数中?因此最终我的后续计算包括正确的鲁棒 se 也将显示在回归 table.

提前致谢!

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 **

如果将 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 **

计算稳健的标准误差

现在,使用 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 **

这就是您从 coeftest.

中获得不同标准误差的方式

发布 table 具有可靠的标准错误

要将这些更正后的标准误差放入 table,这里有一种使用 texreg::screenreg 的方法。你也可以为 LaTeX 使用 texreg::texreg 或为 HTML 使用 texreg::htmlreg,body 基本保持不变。

这里有常规的标准误差,

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

这里有稳健的标准误差,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