【问题标题】:R MatchIt: Using ratio and caliper arguments seems to force replace=TR MatchIt:使用比率和卡尺参数似乎强制替换 = T
【发布时间】:2021-12-14 13:31:30
【问题描述】:

我正在使用 R 中的 MatchIt 包来执行倾向得分匹配。匹配方法是最近邻,距离度量是 glm。当我将比率和卡尺设置为默认值时,或者如果我只为其中一个输入非默认值,我会得到我期望的权重分布而不需要替换,即全部为 0 或 1。但是,当我将两者都设置为非默认值我得到一些高于 1 和一些介于 0 和 1 之间的权重,这是我与替换相关联的分布。

我是否误解了带替换和不带替换采样之间的区别,还是这种情况会覆盖 replace=F 参数?我已阅读包文档,但很可能我错过或误解了解释这一点的部分。如果是这样,请随时将我引导至相关部分!

一个(希望)可重现的例子:

set.seed(42)
DF<-data.frame(Group=factor(c(rep("Treatment",40),rep("Control",360))),
               mVar1=factor(c(sample(LETTERS[c(1,1,1,2)],40,replace=T),sample(LETTERS[c(1,2)],360,replace=T))),
               mVar2=factor(c(sample(LETTERS[c(3,3,4,4,4,5)],40,replace=T),sample(LETTERS[c(3,4,5)],360,replace=T))),
               mVar3=c(rpois(40,3),rpois(360,1)))
str(DF)

(m1<-matchit(Group~mVar1+mVar2+mVar3,data=DF,method="nearest",distance="glm",ratio=3,replace=F))
plot(m1,type="jitter",interactive=FALSE)
hist(m1$weights)

(m2<-matchit(Group~mVar1+mVar2+mVar3,data=DF,method="nearest",distance="glm",caliper=0.1,replace=F))
plot(m2,type="jitter",interactive=FALSE)
hist(m2$weights)

(m3<-matchit(Group~mVar1+mVar2+mVar3,data=DF,method="nearest",distance="glm",ratio=3,caliper=0.1,replace=F))
plot(m3,"jitter",interactive=FALSE)
hist(m3$weights)

谢谢!

【问题讨论】:

    标签: r propensity-score-matching


    【解决方案1】:

    使用?matchit 中描述的公式计算匹配权重。正如您所做的那样,在匹配 而没有 替换时使用此公式。公式如下:

    每个单元都分配给一个子类,它代表它们的对 是(在 k:1 匹配的情况下)或它们所属的层的一部分 to(在精确匹配的情况下,粗化精确匹配,全 匹配或子分类)。计算权重的公式 取决于提供给 estimand 的参数。一个新的阶层 “倾向得分” (p) 计算为每个单元的比例 治疗组中的层,以及该层中的所有单位 被分配该倾向得分。然后使用计算权重 逆概率权重的标准公式:对于 ATT, 处理单元的权重为 1,控制单元的权重为 p/(1-p); 对于 ATC,处理单位的权重为 (1-p)/p,处理单位的权重为 1 控制单元;对于 ATE,处理单位的权重为 1/p,并且 1/(1-p) 用于控制单元。

    ...

    在每个治疗组中,权重除以 该治疗组中的非零权重,使权重总和为 该治疗组的单位数。

    当使用恒定匹配率时(例如,每个处理单元获得 1 个匹配或每个处理单元获得 3 个匹配),所有控制单元的权重将是恒定的。否则,控制单元的权重会有所不同。您所看到的是控制单元的重量变化。碰巧这也可能发生在有替换匹配的情况下,但也可能发生在变比匹配或完全匹配时,两者都没有替换。

    要查看您是否真的与替换匹配,请运行table(table(m3$match.matrix))table(m3$match.matrix) 告诉您每个控制单元被用作匹配的次数,在该输出上运行 table() 告诉您每个控制单元被使用多少次。您会看到每个控制单元只使用一次,因此table(table()) 的输出中只有一个条目,表示正在完成匹配,无需替换。

    【讨论】:

    • 谢谢@Noah。这非常有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    相关资源
    最近更新 更多