如何解决modelsummary中plm面板模型异方差稳健标准误差报告异常?
解决modelsummary中plm双向随机效应模型异方差稳健标准误不更新的问题
问题根源
当你给modelsummary的vcov参数直接传"HC1"时,lm模型的vcovHC可以直接计算异方差稳健标准误;但plm的双向随机效应模型需要明确指定面板聚类方式(如个体、时间或双向)才能让vcovHC生成正确的稳健方差-协方差矩阵,仅传"HC1"无法触发正确计算,导致标准误未更新。
解决方案
给plm模型单独指定包含聚类参数的vcovHC调用,可通过以下两种方式实现:
方法1:针对每个模型单独配置vcov
modelsummary::msummary( list("lm" = lm, "random effects" = re), coef_map = c( "(Intercept)" = "Intercept", "capital" = "Capital", "inv" = "Investment" ), stars = TRUE, statistic = c("p.value", "conf.int", "std.error"), vcov = list( # lm模型直接使用HC1 "lm" = "HC1", # plm模型明确调用vcovHC并指定聚类方式(可按需换成"time"或"twoways") "random effects" = function(x) vcovHC(x, type = "HC1", cluster = "group") ) )
方法2:自定义通用vcov函数(适合多模型批量处理)
如果需要处理多个lm和plm模型,可写一个自动判断模型类型的函数:
vcov_custom <- function(model) { if (inherits(model, "plm")) { # 针对plm模型指定聚类方式 vcovHC(model, type = "HC1", cluster = "group") } else { # 其他模型(如lm)直接用HC1 vcovHC(model, type = "HC1") } } modelsummary::msummary( list("lm" = lm, "random effects" = re), coef_map = c( "(Intercept)" = "Intercept", "capital" = "Capital", "inv" = "Investment" ), stars = TRUE, statistic = c("p.value", "conf.int", "std.error"), vcov = vcov_custom )
验证
运行上述代码后,plm模型的标准误会和coeftest(re, vcov = vcovHC(re, type = "HC1"))的结果完全一致,同时modelsummary会正确标注HC1校正。
内容的提问来源于stack exchange,提问作者ArN
相关产品推荐
相关产品推荐

