R中fixest与sandwich包兼容性问题:feols使用vcovBS()计算自助法标准误报错
R中fixest与sandwich包兼容性问题:feols使用vcovBS()计算自助法标准误报错
嘿,我来聊聊你遇到的这个fixest和sandwich包搭配的问题哈。先给你理理背景:
fixest的官方文档明确说明它和sandwich包兼容,feols、feglm、fepois这类模型都能调用sandwich里的方差-协方差矩阵函数,比如官方示例里就有这样用vcovHC计算异方差稳健标准误的写法:
library(fixest) library(sandwich) data(base_did) feols(y ~ x1 | id, base_did, vcov = function(x) sandwich::vcovHC(x, type = "HC1"))
但实际用的时候,你会发现sandwich里的vcovBS()(用于计算自助法标准误的函数),在传入某些type参数值时会触发报错。比如用mtcars数据集做的这个测试案例:
data(mtcars) fit1 <- feols(mpg ~ wt | am, data = mtcars, vcov = function(x) sandwich::vcovBS(x, type = "你测试时用的报错类型"))
出现这个问题的核心原因,大概率是vcovBS()的部分type参数对应的计算逻辑,和fixest模型对象的结构适配性不好——毕竟自助法的计算逻辑和异方差稳健标准误差异很大,vcovHC能顺畅处理的fixest对象,换到vcovBS的某些计算分支就出了问题。
给你提个可行的 workaround 思路:别把vcovBS直接作为参数传入feols,而是分两步走:先拟合基础模型,再单独计算自助法标准误,最后把结果替换到模型对象里。代码示例如下:
# 第一步:拟合不带自定义标准误的基础模型 fit1 <- feols(mpg ~ wt | am, data = mtcars) # 第二步:用sandwich单独计算自助法标准误 bs_vcov <- sandwich::vcovBS(fit1, type = "你需要的合法类型") # 第三步:替换模型的方差-协方差矩阵 vcov(fit1) <- bs_vcov # 查看更新后的模型结果 summary(fit1)
另外也别忘了检查下你用的type参数值是不是vcovBS支持的合法选项,比如"mammen"、"webb"、"wild"这些,要是传了不合法的类型也会触发报错哦。
备注:内容来源于stack exchange,提问作者jlp
相关产品推荐
相关产品推荐

