使用R语言PSweight包计算IPW时遇错:多水平变量分析求助
问题解决步骤
错误原因
报错核心是处理变量treatment未被识别为分类因子,PSweight包处理多分类逆概率加权时,需要明确处理变量为因子类型;同时公式内使用as.factor()可能引发协变量类型混淆,导致因子比较的无效操作。
修正方案
- 将
treatment转换为因子类型,明确其分类属性 - 提前在数据框中转换协变量
cov2、cov3为因子,避免公式内转换的潜在问题 - 重新运行
SumStat函数
修正后代码
# 加载包 library(PSweight) library(tidyverse) # 处理缺失值+转换变量类型 df <- df %>% na.omit() %>% mutate( treatment = factor(treatment, levels = c(0,1,2)), # 指定分类水平顺序 cov2 = factor(cov2), cov3 = factor(cov3) ) # 构建倾向得分公式(无需再用as.factor) ps.mult <- treatment ~ cov1 + cov2 + cov3 + cov4 + cov5 # 计算倾向得分并评估加权协变量平衡 bal.mult <- SumStat( ps.formula = ps.mult, weight = "IPW", data = df )
后续处理效应估算
平衡评估通过后,可使用ATE()函数估算二分类结局的处理效应:
# 估算平均处理效应(ATE) ate_result <- ATE( ps.formula = ps.mult, outcome.formula = outcome_var ~ 1, weight = "IPW", data = df, family = binomial() # 适配二分类结局 ) # 查看结果详情 summary(ate_result)
内容的提问来源于stack exchange,提问作者crytpodoc
相关产品推荐
相关产品推荐

