You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 03:17:22