2015-06-22 26 views
5

In riferimento al pacchetto Matching, esaminiamo l'esempio utilizzando GenMatch.Qual è la Weight Matrix generata nel pacchetto di corrispondenza

si legge che il Weight Matrix creato viene una matrice avente corrisponde diagonale al peso attribuito a ciascuna variabile X

Ma non sono sicuri quali sono i valori generati rappresentano - sono riportate standard deviazione.

consente di dare l'esempio fornito in GenMatch

library(Matching) 
data(lalonde) 
attach(lalonde) 
#The covariates we want to match on 
X = cbind(age, educ, black, hisp, married, nodegr, u74, u75, re75, re74) 
#The covariates we want to obtain balance on 
BalanceMat <- cbind(age, educ, black, hisp, married, nodegr, u74, u75, re75, re74, 
I(re74*re75)) 
#Let's call GenMatch() to find the optimal weight to give each 
#covariate in 'X' so as we have achieved balance on the covariates in 
#'BalanceMat'. This is only an example so we want GenMatch to be quick 
#so the population size has been set to be only 16 via the 'pop.size' 
#option. This is *WAY* too small for actual problems. 
#For details see http://sekhon.berkeley.edu/papers/MatchingJSS.pdf. 
# 
genout <- GenMatch(Tr=treat, X=X, BalanceMatrix=BalanceMat, estimand="ATE", M=1, 
pop.size=16, max.generations=10, wait.generations=1) 

Quindi possiamo uscita Weight.matrix che verrà utilizzato successivamente per associare i dati

genout$Weight.matrix 

ed in particolare il valore assegnato al age

genout$Weight.matrix[1,1] 

Otteniamo un valore di ~ 205. Ma cosa significa questo peso o rappresenta ??

Inoltre, se siamo in ordine casuale dei dati, il valore è in continua evoluzione.

n <- 100 
P1 <- rep(NA, n) 
for (i in 1:n) { 

    lalonde <- lalonde[sample(1:nrow(lalonde)), ] # randomise order 

    X = cbind(lalonde$age, lalonde$educ, lalonde$black, lalonde$hisp, 
      lalonde$married, lalonde$nodegr, lalonde$u74, lalonde$u75, 
      lalonde$re75, lalonde$re74) 

    BalanceMat <- cbind(lalonde$age, lalonde$educ, lalonde$black, 
         lalonde$hisp, lalonde$married, lalonde$nodegr, 
         lalonde$u74, lalonde$u75, lalonde$re75, lalonde$re74, 
         I(lalonde$re74*lalonde$re75)) 

    genout <- GenMatch(Tr=lalonde$treat, X=X, BalanceMatrix=BalanceMat, estimand="ATE", M=1, 
        pop.size=16, max.generations=10, wait.generations=1) 

    P1[i] <- genout$Weight.matrix[1,1] 

} 

L'autore del documento suggerisce anche l'additional information può essere d'aiuto, ma non spiega quali sono i valori weight matrix rappresentano. Qualcuno lo interpreta o capisce perché la loro grandezza cambia quando l'ordine dei dati è variato

risposta

3

Purtroppo questa non è una domanda alla quale si può rispondere molto facilmente (ma per rispondere a una parte della domanda, no, i valori del la matrice di peso non è correlata a una deviazione standard).

GenMatch è un algoritmo di corrispondenza affinely invariante che utilizza la distanza misurata d(), in cui tutti gli elementi di W sono pari a zero eccetto lungo la diagonale principale. La diagonale principale è composta da k parametri che devono essere scelti. (nota che se ognuno di questi parametri k è impostato su 1, d() è lo stesso della distanza di Mahalanobis). Come la distanza di Mahalanobis, questa distanza metrica può essere utilizzata per condurre una corrispondenza completa avida o ottimale. (La scelta di fissare gli elementi nondiagonal di W a zero è fatto solo per ragioni di potenza computazionale)

La ragione per cui le grandezze cambiano quando l'ordine dei dati è variata è che la matrice peso W trovi un'infinità di soluzioni equivalenti. Le partite prodotte sono invarianti rispetto a una variazione in scala costante della misura della distanza. In particolare, le partite prodotte sono le stesse per ogni W = cW per qualsiasi scalare positivo c, e quindi la matrice può essere identificata univocamente in molti modi.

Per comprendere appieno come vengono calcolati gli elementi diversi da zero della matrice di peso, è consigliabile leggere lo full article dietro la formulazione di GenMatch che consente di analizzare in modo approfondito e complesso i metodi utilizzati.

Se sei interessato solo al codice sorgente, puoi visualizzarlo su GitHub. Se hai altre domande sul codice specifico R, sarò lieto di provare a rispondere, tuttavia se hai ulteriori domande sugli algoritmi alla base della generazione della matrice di peso dovrai probabilmente andare su Cross Validated.