我使用强大的标准错误运行 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,也将显示在回归表中。
提前致谢!
的优点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)