Использование стандартных отклонений в GenMatch для поощрения большего количества пар
Итак, следуя примеру из пакета Matching и, в частности, примера GenMatch. Это продолжается по предыдущему вопросу
Ссылка на пакет R здесь
Следуя примеру в 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))
Но это не приводит к значительному увеличению числа возвращаемых пар.
Любые подсказки или решения, в которых я ошибаюсь
Ответы
Ответ 1
Как Ник Кеннеди описывает:
summary(as.logical(lalonde$treat))
Mode FALSE TRUE NA
logical 260 185 0
GenMatch будет соответствовать только M
раз для каждого обработанного случая. Это может привести к потере обработанных случаев и, как правило, сбрасывает контрольные случаи, поскольку многие из них не совпадают, но он не может генерировать новые обработанные случаи из воздуха: для этого требуется несколько условных обозначений; -)
Если вы имеете в виду, генерируя больше совпадений для каждого обработанного случая, это достигается с помощью аргумента M
, но необходимо соблюдать осторожность, особенно если количество элементов управления настолько близко к количеству обработанных случаев, как в lalonde
данных, так как он уже нашел наилучшее совпадение, и добавление дополнительных совпадений вряд ли улучшит ситуацию и часто ухудшает их. Это лучше всего, когда количество элементов управления → количество обработанных.
Вы можете восстановить каждую "пару" совпадений, когда M > 1
из выходных данных, если это то, что вы хотели бы, и это даст несколько строк, превышающих 185 в группе лечения, но, конечно, с дубликаты.