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

Love.plot仅展示未加权与IPW组,MW权重组缺失问题咨询

排查MW组未在love.plot显示的原因及解决办法

1. 先确认MW权重生成是否有效

  • 用matchit()生成MW匹配对象时,参数得设对——比如做带替换的近邻匹配,要写method = "nearest", replace = TRUE,别搞混权重相关参数。
  • 直接跑weights(mw_obj)查看权重值:得保证处理组和对照组都有非零权重,不能全是NA或者只有处理组有权重,不然cobalt没法识别。

2. 检查love.plot的输入格式

  • 如果你是分开生成IPW和MW的权重对象,得把两组权重都塞进weights参数里,比如:
    love.plot(treat ~ age + educ + race + married + nodegree + re74 + re75,
              data = lalonde,
              weights = list(未加权 = NULL, IPW = ipw_weights, MW = mw_weights),
              var.order = "unadjusted")
    
  • 要是用matchit生成的完整对象,直接把多个对象放进列表传给love.plot就行,记得给列表元素命名,不然图里的分组标签会混乱:
    love.plot(list(未加权 = NULL, IPW = ipw_obj, MW = mw_obj), data = lalonde)
    

3. 确认MW权重覆盖全数据集

  • 要是做的是无替换的近邻匹配,没匹配上的观测权重会是0,这时候得确保love.plot没过滤掉权重为0的观测——可以试试加include.weights = TRUE参数。
  • 先跑cobalt::bal.tab(list(IPW = ipw_obj, MW = mw_obj))看看平衡统计量里有没有MW组的结果,如果bal.tab()里都没有,那肯定是权重生成或传入的问题,先搞定这个再看绘图。

4. 检查包版本兼容性

  • 旧版本的cobalt对某些权重类型支持有限,直接更新到最新版试试:
    install.packages(c("cobalt", "MatchIt"))
    

可复现的示例代码

给你一段能跑通的代码,照着对比下你的写法:

library(MatchIt)
library(cobalt)
data(lalonde)

# 生成IPW权重(逻辑回归PS)
ipw_obj <- matchit(treat ~ age + educ + race + married + nodegree + re74 + re75,
                   data = lalonde, method = "weighting", estimand = "ATE")

# 生成MW权重(带替换的近邻匹配)
mw_obj <- matchit(treat ~ age + educ + race + married + nodegree + re74 + re75,
                  data = lalonde, method = "nearest", replace = TRUE, caliper = 0.2)

# 绘制包含三组的love.plot
love.plot(list(未加权 = NULL, IPW = ipw_obj, MW = mw_obj),
          data = lalonde,
          var.order = "unadjusted",
          title = "不同加权方法的协变量平衡情况")

要是跑这段代码MW组还是不显示,就查table(weights(mw_obj)),看看对照组有没有被匹配到的权重值——要是全是1(处理组)和0(对照组),那说明匹配没成功,得调整匹配参数比如caliper或者匹配比例。

内容的提问来源于stack exchange,提问作者geek45

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:53:16