首页 > 解决方案 > R MatchIt:使用比率和卡尺参数似乎强制替换 = T

问题描述

我正在使用 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)

谢谢!

标签: rpropensity-score-matching

解决方案


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

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

...

在每个处理组中,权重除以该处理组中非零权重的平均值,以使权重总和等于该处理组中的单位数。

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

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


推荐阅读