wild cluster bootstrap sandwich与lmtest coeftest小样本校正问题咨询
问题解答
对coeftest小样本校正机制的判断结论
你的判断完全正确。lmtest::coeftest()本身仅负责基于传入的协方差矩阵计算标准误、检验统计量与对应p值,没有内置独立的小样本校正逻辑:
- 未指定协方差矩阵时,它直接调用回归模型自带的协方差矩阵输出结果,默认使用正态分布计算p值
- 所有和聚类、小样本相关的校正规则,完全由你传入的协方差矩阵(如
sandwich包的各类vcov函数)决定,coeftest本身不会额外施加校正。
wild cluster bootstrap与coeftest搭配的小样本校正实现
完全可以实现,常用方案有两种:
方案1:调用vcovBS内置校正后传入coeftest
sandwich::vcovBS()本身就支持wild cluster bootstrap的小样本校正配置,你可以先在校准协方差矩阵时完成校正设置,再直接传给coeftest即可:
library(sandwich) library(lmtest) library(dplyr) # 仅用于示例中的n_distinct函数,可替换为其他计算聚类数的方法 # fit为你的线性回归模型对象,cluster_id为聚类变量 vcov_wild_corrected <- vcovBS( fit, cluster = ~cluster_id, type = "wild", # 开启小样本校正,自动施加聚类数、参数个数调整因子 adjust = TRUE, # 小样本场景下建议选Rademacher分布作为bootstrap权重 wild = "rademacher", nboot = 9999 ) # 传入校正后的协方差矩阵,同时指定自由度为「聚类数-1」,用t分布替代正态分布完成进一步校正 coeftest(fit, vcov = vcov_wild_corrected, df = n_distinct(cluster_id) - 1)
注:
adjust=TRUE触发的默认小样本校正因子为 $\frac{G}{G-1} \times \frac{n-1}{n-k}$,其中G为聚类数、n为总样本量、k为模型参数个数,是聚类标准误场景下通用的小样本校正规则。
方案2:自定义bootstrap检验结果合并
如果需要更灵活的小样本校正逻辑(比如逐系数的bootstrap检验p值校正),可以先单独跑wild cluster bootstrap得到校正后的统计量,再替换到coeftest的输出中:
# 1. 运行自定义wild cluster bootstrap,得到校正后的标准误与p值 wild_boot_output <- custom_wild_cluster_bootstrap(fit, cluster = ~cluster_id, nboot = 9999) # 2. 得到coeftest基础输出 coef_table <- coeftest(fit, vcov = vcov_wild_corrected) # 3. 替换为bootstrap校正后的结果 coef_table[, 2] <- wild_boot_output$corrected_se coef_table[, 4] <- wild_boot_output$corrected_pval
内容的提问来源于stack exchange,提问作者A.Fischer
相关产品推荐
相关产品推荐

