所以,根据Matching软件包中的示例,特别是GenMatch示例。这个问题是从之前的一个问题继续的
遵循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])
现在,有关由GenMatch
生成的Weight.Matrix
的文献非常晦涩,并且没有解释这些值代表什么。我在这里提出了一个问题。现在假设我们想要放宽匹配,使年龄标准上更灵活的配对发生。
我们注意到sd(lalonde$age)
给出了我们数据的7年标准差。
因此,我希望Weight.matrix
能够考虑到这一点。 我想使用1个标准差的限制来匹配age
变量,因此返回比原始的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))
但这并没有显著增加我返回的配对数量。
有什么提示或解决方案可以告诉我哪里出了问题吗?
mout <- Match(Y=Y, Tr=treat, X=X, Weight.matrix=genout, M = 2)
将旨在返回每个处理过的个体2个未处理的匹配对象。如果您想要确切的2个匹配对象,则需要使用tis = FALSE
。 - Nick Kennedy