2015-06-04 35 views
19

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

Link to R package here

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

+1

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'. –

+0

Se si desidera attenuare i criteri relativi all'età, è possibile variare i parametri nella matrice peso, ma non influirà sul numero di risultati ottenuti. –

risposta

1

Come Nick Kennedy descrive:

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

GenMatch corrisponderà solo M volte per ogni caso trattato. Può potenzialmente abbandonare i casi trattati e di solito abbassa i casi di controllo poiché molti non corrispondono, ma non può generare nuovi casi trattati dal nulla: questo è l'imputazione multipla ;-)

Se intendi , generando più corrispondenze per caso trattato questo si ottiene con l'argomento M, ma è necessaria cautela, soprattutto quando il numero di controlli è così vicino al numero di casi trattati, come nei dati lalonde, poiché ha già trovato il la migliore corrispondenza, e l'aggiunta di corrispondenze aggiuntive è improbabile che migliori le cose, e spesso le peggiora. Questo è meglio quando il numero di controlli >> numero di trattati.

È possibile ricostruire ogni coppia di corrispondenze quando M > 1 dai dati di output, se questo è ciò che si desidera, e questo darà un numero di righe superiore a 185 nel gruppo di trattamento, ma ovviamente con duplicati .