You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

熵平衡后KHB分解报错求助:R中ATT估计变量需在design参数内

解决KHB分解结合调查设计的报错问题

问题根源

报错的核心原因:

  1. 完整模型错误使用普通glm而非适配调查设计的svyglm,导致模型未关联调查权重与设计结构;
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:22:44