Quindi, seguendo l'esempio dal pacchetto Corrispondenza e in particolare l'esempio GenMatch. This continues on from a previous questionUtilizzo di deviazioni standard in GenMatch per incoraggiare più coppie
Seguendo l'esempio in 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)
Vediamo 185 osservazione trattati sono accoppiati con 270 osservazione non-trattamento.
Siamo in grado di generare una tabella con i casi di trattamento e la loro età a sinistra e il caso di controllo e l'età a destra da:
pairs <- data.frame(mout$index.treated, lalonde$age[mout$index.treated], mout$index.control, lalonde$age[mout$index.control])
Ora, la letteratura sulla Weight.Matrix
generato da GenMatch
è molto criptica e non spiega cosa rappresentano questi valori. Ho una domanda aperta here. Ora diciamo che vogliamo rilassare la corrispondenza in modo che si verifichi un accoppiamento più flessibile sui criteri di età.
Vediamo che sd(lalonde$age)
ci fornisce una SD di 7 anni per i nostri dati.
Quindi voglio il Weight.matrix
per tenere conto di questo. Voglio usare un limite di 1 SD per la variabile age
e quindi restituire più coppie dell'originale 185-270.
La mia ipotesi è di generare una seconda funzione GenMatch
quindi continuare con il mio codice. Quindi io uso:
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))
Ma questo non aumenta significativamente il numero di coppie che ritorno.
Eventuali suggerimenti o soluzioni dove sto andando male
Non è molto chiaro quello che vuoi. Ci sono solo 185 osservazioni trattate e 260 non trattate, e la funzione Match sta cercando di eseguire la corrispondenza 1 a 1. La ragione per cui ci sono più di 185 partite non pesate è dovuta a legami in cui c'è più di 1 individuo non trattato che è ugualmente un buon match.Se si desidera più di 1 persona non trattata per individuo, è necessario utilizzare il parametro M per la corrispondenza. per esempio. 'mout <- Match (Y = Y, Tr = treat, X = X, Weight.matrix = genout, M = 2)' mirerà a restituire 2 match non trattati per individuo trattato. Se vuoi esattamente 2, devi usare 'legami = FALSO'. –
Se si desidera attenuare i criteri relativi all'età, è possibile variare i parametri nella matrice peso, ma non influirà sul numero di risultati ottenuti. –