Подтвердить что ты не робот

Использование стандартных отклонений в 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))

Но это не приводит к значительному увеличению числа возвращаемых пар.

Любые подсказки или решения, в которых я ошибаюсь

4b9b3361

Ответ 1

Как Ник Кеннеди описывает:

summary(as.logical(lalonde$treat))
   Mode   FALSE    TRUE    NA 
logical     260     185       0 

GenMatch будет соответствовать только M раз для каждого обработанного случая. Это может привести к потере обработанных случаев и, как правило, сбрасывает контрольные случаи, поскольку многие из них не совпадают, но он не может генерировать новые обработанные случаи из воздуха: для этого требуется несколько условных обозначений; -)

Если вы имеете в виду, генерируя больше совпадений для каждого обработанного случая, это достигается с помощью аргумента M, но необходимо соблюдать осторожность, особенно если количество элементов управления настолько близко к количеству обработанных случаев, как в lalonde данных, так как он уже нашел наилучшее совпадение, и добавление дополнительных совпадений вряд ли улучшит ситуацию и часто ухудшает их. Это лучше всего, когда количество элементов управления → количество обработанных.

Вы можете восстановить каждую "пару" совпадений, когда M > 1 из выходных данных, если это то, что вы хотели бы, и это даст несколько строк, превышающих 185 в группе лечения, но, конечно, с дубликаты.