如何向cobalt包绘制的Love图中添加额外变量展示协变量平衡
cobalt包Love图同时展示模型内/外协变量平衡的实现方法
你原有的权重拟合逻辑不需要做任何修改,核心是通过addl参数传入未纳入倾向得分模型的变量,cobalt会自动计算这些变量的加权前后平衡统计量,和模型内的混杂变量一起呈现在图中。
可直接运行的修改后代码
W <- weightit(Y ~ X1 + X2 + X3, data = d1, method = "cbps", over = FALSE) love.plot(W, stats = c("c"), thresholds = c(cor = .1), abs = TRUE, wrap = 20, var.order = "unadjusted", line = TRUE, # 核心新增参数:传入未纳入PS模型的额外变量 addl = ~ Z1 + Z2 + Z3, # 可选配置:给两类变量加分组,提升可读性 var.group = list( "倾向得分模型纳入的混杂变量" = c("X1", "X2", "X3"), "未纳入模型的其他协变量" = c("Z1", "Z2", "Z3") ))
参数说明
addl:接收单侧公式,右侧列出所有未放入weightit()拟合公式、但需要展示平衡结果的变量即可,该操作不会修改你原本计算得到的CBPS权重,只是额外补充这些变量的平衡统计量计算。var.group:可选参数,用于给变量做分组归类,绘图时会在两组变量间增加分组标题,方便快速区分两类变量,不需要可以直接删除。
如果你习惯先计算平衡结果再绘图,逻辑完全一致,示例如下:
# 先计算包含额外变量的平衡统计结果 bal_result <- bal.tab(W, stats = "c", addl = ~ Z1 + Z2 + Z3, thresholds = c(cor = .1)) # 传入平衡结果对象绘图即可 love.plot(bal_result, abs = TRUE, wrap = 20, var.order = "unadjusted", line = TRUE)
注意:不要把Z1-Z3加入
weightit()的拟合公式,否则会改变原有倾向得分/权重的估计结果,和你原本的研究设计不符。
内容的提问来源于stack exchange,提问作者abhithetree
相关产品推荐
相关产品推荐

