因此,遵循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/