熵平衡后KHB分解报错求助:R中ATT估计变量需在design参数内
解决KHB分解结合调查设计的报错问题
问题根源
报错的核心原因:
- 完整模型错误使用普通
glm而非适配调查设计的svyglm,导致模型未关联调查权重与设计结构; khb函数处理调查模型时,要求所有变量必须包含在svydesign指定的数据集中,且模型需基于调查设计对象构建。
修复步骤
- 替换完整模型的拟合函数:将
glm改为svyglm,与简约模型保持一致,确保模型绑定调查设计:full <- svyglm(y~treat+edu+retire, design=des, family=binomial) - 确保变量在数据集内:检查
edu、retire及报错提及的raeducat、r7retemp均存在于dt数据框中,svydesign仅能识别data参数指定数据集内的变量。 - 规范权重定义:将抽样权重与熵平衡权重的乘积存入
dt的新列,避免直接引用外部对象,防止作用域问题:dt$combined_weights <- dt$ral67wtrsp * w.out$weights des <- svydesign(~1, data = dt, weights=~combined_weights) - 指定KHB的调查模型类型:调用
khb时添加survey=TRUE参数,适配调查设计类模型:khb_model <- khb(reduced, full, survey = TRUE)
完整修正代码
# 合并权重到数据集 dt$combined_weights <- dt$ral67wtrsp * w.out$weights # 创建调查设计 des <- svydesign(~1, data = dt, weights=~combined_weights) # 拟合简约模型 reduced <- svyglm(y~treat, design=des, family=binomial) summary(reduced) # 拟合完整模型(使用svyglm) full <- svyglm(y~treat+edu+retire, design=des, family=binomial) summary(full) # 执行KHB分解 khb_model <- khb(reduced, full, survey = TRUE)
内容的提问来源于stack exchange,提问作者saroja
相关产品推荐
相关产品推荐

