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