因此,遵循Matching包中的示例,尤其是GenMatch示例。 This continues on from a previous question

Link to R package here

遵循GenMatch中的示例

library(Matching)
data(lalonde)
attach(lalonde)

X = cbind(age, educ, black, hisp, married, nodegr, u74, u75, re75, re74)

BalanceMat <- cbind(age, educ, black, hisp, married, nodegr, u74, u75, re75, re74,
                    I(re74*re75))

genout <- GenMatch(Tr=treat, X=X, BalanceMatrix=BalanceMat, estimand="ATE", M=1,
                   pop.size=16, max.generations=10, wait.generations=1)

genout$matches
genout$ecaliper

Y=re78/1000

mout <- Match(Y=Y, Tr=treat, X=X, Weight.matrix=genout)
summary(mout)


我们看到185个治疗观察与270个非治疗观察配对。

我们可以通过以下方式生成表格,左侧为治疗案例及其年龄,右侧为对照案例和年龄:

pairs <- data.frame(mout$index.treated, lalonde$age[mout$index.treated], mout$index.control, lalonde$age[mout$index.control])


现在,关于从Weight.Matrix生成的GenMatch的文献非常神秘,并且没有解释这些值代表什么。我有一个未解决的问题here。现在说我们要放松匹配,以便根据年龄标准进行更灵活的配对。

我们看到sd(lalonde$age)为我们的数据提供了7年的SD。

因此,我希望Weight.matrix对此进行解释。我想对age变量使用1 SD的限制,从而返回比原始185-270更多的对。

我的猜测是生成第二个GenMatch函数,然后继续执行我的代码。所以我用:

genout <- GenMatch(Tr=treat, X=X, BalanceMatrix=BalanceMat, estimand="ATE",
                   pop.size=1000, max.generations=10, wait.generations=1,
                   caliper=c(2,1,1,1,1,1,1,1,1,1))


但这并不会显着增加我返回的对的数量。

我要去哪里的任何提示或解决方案

最佳答案

Nick Kennedy所述:

summary(as.logical(lalonde$treat))
   Mode   FALSE    TRUE    NA's
logical     260     185       0


GenMatch将仅匹配每个已治疗案例的M次。它可能会丢弃已处理的案例,并且通常会丢弃控制案例,因为许多案例不匹配,但是它无法凭空生成新的已处理案例:这就是多重​​插补的目的;-)

如果要在每个已处理的案例中生成更多匹配项,这可以通过M参数实现,但是需要特别注意,尤其是当控件的数量与已处理案例的数量如此接近时(如在lalonde数据中),因为它已经找到了最佳匹配,添加更多匹配不太可能改善问题,并且通常会使情况恶化。当对照数>>已处理数时,这是最好的。

您可以根据需要从输出数据中重建M > 1时的每个“对”匹配,这将使处理组中的行数大于185,但当然会有重复项。

关于r - 在GenMatch中使用标准差来鼓励更多配对,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30647201/

10-10 15:54