使用feols构建IV固定效应模型时Kleibergen-Paap检验报错求助
解决feols中Kleibergen-Paap检验报错的建议
针对你遇到的non-conformable arrays错误,结合你的模型设定,可按以下步骤排查解决:
1. 检查固定效应与聚类变量的重复设定
你的模型中同时将clust2作为固定效应(公式第一个|后)和聚类VCOV的分组变量(vcov = vcov_cluster("clust2")),这种重复设定可能导致Kleibergen-Paap检验计算时矩阵维度不匹配:
- 尝试暂时移除固定效应,测试检验是否正常:
# 移除固定效应,仅保留聚类VCOV iv_tsls_test <- feols(mort_u65_pop ~ year + datacoverage + GDP + unemployment_rate + at_risk_poverty | | pm25 ~ rain_yr_mm + temp_c + wdsp, data = df2, vcov = vcov_cluster("clust2")) fitstat(iv_tsls_test, "kpr") - 若必须保留
clust2固定效应,可不在模型拟合时指定聚类VCOV,转而在fitstat中单独指定:iv_tsls_fe <- feols(mort_u65_pop ~ year + datacoverage + GDP + unemployment_rate + at_risk_poverty | clust2 | pm25 ~ rain_yr_mm + temp_c + wdsp, data = df2) fitstat(iv_tsls_fe, "kpr", vcov = vcov_cluster("clust2"))
2. 检查聚类组的数量与变异
Kleibergen-Paap检验对聚类组的数量和组内变异有要求:
- 运行
length(unique(df2$clust2))确认分组数量,若组数过少(少于工具变量+内生变量总数),会导致矩阵计算异常。 - 检查工具变量在每个聚类组内是否有足够变异,若某组内工具变量完全无波动,也可能引发维度问题。
3. 调整ssc参数
尝试修改聚类调整参数,统一矩阵计算的维度规则:
iv_tsls_fe <- feols( mort_u65_pop ~ year + datacoverage + GDP + unemployment_rate + at_risk_poverty | clust2 | pm25 ~ rain_yr_mm + temp_c + wdsp, data = df2, vcov = vcov_cluster("clust2"), ssc = ssc(cluster.adj = FALSE, fixef.K = "none") ) fitstat(iv_tsls_fe, "kpr")
4. 更新fixest包
该错误可能是旧版本fixest的已知bug,更新到最新版可解决:
install.packages("fixest") library(fixest)
5. 简化模型逐步排查
先拟合无控制变量的基础IV模型,测试检验是否正常:
iv_base <- feols(mort_u65_pop ~ 1 | clust2 | pm25 ~ rain_yr_mm + temp_c + wdsp, data = df2, vcov = vcov_cluster("clust2")) fitstat(iv_base, "kpr")
若基础模型正常,再逐步添加控制变量,定位引发错误的变量。
内容的提问来源于stack exchange,提问作者Lorena Popescu
相关产品推荐
相关产品推荐

