如何在R中构建含聚类Bootstrap的模型并传入sensemakr()
我希望有人能帮我关闭这个问题。该问题最初发布在Cross Validated,本应留在那里,因为答案更偏向统计问题而非编程问题,但在那边被关闭后,我被要求重新发布到此处。不过答案确实属于统计范畴,我会在此发布答案,若有人能帮忙关闭问题我将不胜感激。
聚类Bootstrap模型传入sensemakr()的求助
核心需求
我一直在尝试用R中的lm执行聚类Bootstrap,并将结果传入sensemakr()包。sensemakr()是Cinelli & Hazlett(2020)相关研究的实现,支持接收lm或feols类对象作为输入。
基础示例代码
library(palmerpenguins) library(sensemakr) penguin_dat <- penguins model_lm <- lm(flipper_length_mm ~ sex + body_mass_g, data=penguin_dat) summary(model_lm) sensitivity1 <- sensemakr(model=model_lm, treatment="body_mass_g", benchmark_covariates="sexmale") summary(sensitivity1)
问题难点
我需要找到方法,将带有复杂误差结构(尤其是聚类Bootstrap)的模型传入sensemakr()。已知开发版sensemakr()可接收fixest包的feols对象,但尚未尝试。
已尝试的方案
- 使用
simpleboot包的lm.boot()处理现有lm类对象,但该工具无聚类Bootstrap功能; - 尝试使用
fwildclusterboot包的野生聚类Bootstrap,但该包因依赖问题已从CRAN移除,无法安装; - 考虑使用
clusbootglm或lmeresampler等聚类Bootstrap包,再将结果转换为lm类对象,但这超出我的R能力范围。以下是使用lmtest的coeftest()和sandwich的vcovBS()的示例,但不知如何转换为lm对象:
library(palmerpenguins) library(sandwich) library(sensemakr) library(lmtest) penguin_dat <- penguins model_lm <- lm(flipper_length_mm ~ sex + body_mass_g, data=penguin_dat) clustered_bootstrap_model_lm <- coeftest(model_lm, vcov = vcovBS, cluster = penguin_dat$species, R = 1000)
Stata版本参考
sensemakr()的Stata实现中,聚类Bootstrap操作很简单:
sysuse auto2.dta regress price mpg weight rep78, vce(bootstrap, reps(100)) cluster(foreign) est sto m1
但Stata版本不支持传入已训练好的模型,必须在sensemakr内部运行回归,且不允许复杂误差结构。
请问有什么解决方法?感谢您的建议。
参考文献
- Cinelli, C., & Hazlett, C. (2020). Making sense of sensitivity: Extending omitted variable bias. Journal of the Royal Statistical Society Series B: Statistical Methodology, 82(1), 39-67.
- Cinelli, C., Ferwerda, J., & Hazlett, C. (2020). sensemakr: Sensitivity analysis tools for OLS in R and Stata. Available at SSRN.
内容的提问来源于stack exchange,提问作者J. Holiday
相关产品推荐
相关产品推荐

