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

如何在modelsummary包中为lm和fixest模型设置不同vcov标准误

实现方法

modelsummary原生支持为列表中不同模型单独配置标准误,不需要提前用coeftest或者summary预处理模型对象,你之前运行失败是因为传参格式不符合要求。

正确可运行代码

# 加载依赖包
library(fixest)
library(modelsummary)
library(sandwich)

df <- mtcars
# 按顺序存入模型列表
models <- list(
  lm(cyl ~ disp, data = df),
  feols(cyl ~ disp | as.factor(gear), data = df)
)

# 按模型位置传入对应vcov配置
modelsummary(
  models,
  vcov = list(
    "HC3",                          # 第1个lm模型使用HC3校正标准误
    ~vcovCluster(., cluster = ~gear)# 第2个feols模型按gear维度计算聚类稳健标准误
  )
)

传参说明

  • 多模型异质vcov配置必须用列表传入,不能用原子向量,列表元素顺序和模型列表顺序一一对应
  • 常用内置标准误可以直接传带引号的别名,比如"HC3"、"classical"、"stata"等
  • 需要自定义标准误计算逻辑(比如指定聚类维度)时,推荐用单侧公式写法:~开头,用.代指当前模型对象,直接嵌入标准误计算函数即可
  • 如果给模型列表设置了名称,也可以用命名列表匹配传参,不需要严格遵守顺序:
models <- list(
  "基准OLS" = lm(cyl ~ disp, data = df),
  "固定效应模型" = feols(cyl ~ disp | as.factor(gear), data = df)
)

modelsummary(
  models,
  vcov = list(
    "固定效应模型" = ~vcovCluster(., cluster = ~gear),
    "基准OLS" = "HC3"
  )
)
  • 如果不想用公式语法,也可以传入匿名函数自定义计算逻辑,效果完全一致:
modelsummary(
  models,
  vcov = list(
    function(model) vcovHC(model, type = "HC3"),
    function(model) vcovCluster(model, cluster = ~gear)
  )
)

之前写法报错的原因

  • 用c()传入向量格式的配置:vcov参数仅识别列表格式的多模型配置,原子向量会被当作单个配置应用到所有模型
  • 直接写裸的HC3/cluster/vcovHC:字符串别名需要加引号,未绑定的函数/变量名无法被函数正确识别
  • 聚类标准误只写"cluster":没有指定聚类维度,程序无法判断按哪个变量聚类,必须明确传入聚类变量信息

你之前用预处理模型对象的方法虽然可以得到正确结果,但属于冗余操作,上面的写法是包设计原生支持的规范用法,后续调整标准误或者修改模型时更方便。

内容的提问来源于stack exchange,提问作者Daycent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.05 16:15:45