为什么 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
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