Итак, следуя примеру из пакета 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])
Теперь литература о Weight.Matrix
, сгенерированная из GenMatch
, очень загадочна и не объясняет, что представляют эти значения. У меня есть открытый вопрос здесь. Теперь скажем, что мы хотим смягчить соответствие, чтобы произошло более гибкое сопряжение по возрастным критериям.
Мы видим, что sd(lalonde$age)
дает нам SD за 7 лет для наших данных.
Поэтому я хочу, чтобы Weight.Matrix
учитывал это. Я хочу использовать предел 1 SD для переменной 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))
Но это не приводит к значительному увеличению числа возвращаемых пар.
Любые подсказки или решения, в которых я ошибаюсь