如何在stargazer中添加coeftest模型的观测数、R²等统计量
解决方法
问题根源
coeftest返回的对象仅包含系数和稳健标准误,不携带模型拟合的核心统计量(观测数、R²等),因此需要从原svyglm模型中提取这些统计量,再手动传入stargazer。
具体步骤与代码
- 提取稳健系数与标准误
从coeftest结果或直接用vcovHC提取稳健标准误:
# 提取稳健系数和标准误 coef_r <- coef(short_model_r) se_r <- sqrt(diag(vcovHC(short_model, type = "HC1")))
- 提取原模型的拟合统计量
稳健方差仅调整标准误,拟合优度、观测数等核心统计量仍基于原svyglm模型:
# 提取核心统计量 n_obs <- nobs(short_model) r2 <- summary(short_model)$r.squared r2_adj <- summary(short_model)$adj.r.squared resid_se <- summary(short_model)$sigma f_stat <- summary(short_model)$fstatistic[1] f_pval <- summary(short_model)$fstatistic[3]
- 用stargazer生成带统计量的表格
通过coef/se传入稳健结果,用add.lines手动添加统计量:
stargazer(short_model, type = "text", coef = list(coef_r), # 传入稳健系数 se = list(se_r), # 传入稳健标准误 column.labels = c("Short model"), title = 'Table 1: Short model', omit.stat = "all", # 关闭默认统计量,避免重复 add.lines = list( c("观测数", format(n_obs, big.mark = ",")), c("R²", format(r2, digits = 3)), c("调整后R²", format(r2_adj, digits = 3)), c("残差标准误", format(resid_se, digits = 3)), c("F统计量", paste0(format(f_stat, digits = 3), " (p = ", format(f_pval, digits = 3), ")")) ), digits = 3)
多模型扩展
如果需要展示多个稳健模型,只需将coef和se改为对应模型的列表,add.lines中每一行的第二个元素对应各模型的统计量即可。
内容的提问来源于stack exchange,提问作者Isidora
相关产品推荐
相关产品推荐

