2015-06-22 35 views
5

Odnosząc się do Pakietu Matching, patrzymy na przykład przy użyciu GenMatch.Co to jest macierz wagi generowana w pakiecie dopasowywania

Czytamy, że Weight Matrix który jest tworzony jest matryca którego przekątna proporcjonalnej do masy podanej na każdej zmiennej X

Ale nie mamy pewności, jakie wartości generowanych reprezentują - są one związane ze standardem odchylenie.

Weźmy przykład przedstawione w 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) 

Następnie można wyprowadzić Weight.matrix że będzie później wykorzystane do pary danych

genout$Weight.matrix 

, a w szczególności wartości przypisanej do age

genout$Weight.matrix[1,1] 

Otrzymujemy wartość ~ 205. Ale co ta waga oznacza lub reprezentuje?

Co więcej, jeśli mamy losować kolejność danych, ich wartość stale się zmienia.

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] 

} 

Autor artykułu sugeruje również additional information może być pomocne, ale nie wyjaśnia, jakie wartości weight matrix reprezentować. Każdy, kto je zinterpretuje lub zrozumie, dlaczego ich wielkość zmienia się, gdy kolejność danych jest zmieniana.

Odpowiedz

3

Niestety nie jest to pytanie, na które można bardzo łatwo odpowiedzieć (ale aby odpowiedzieć na część pytania, nie, wartości macierz wagowa nie jest powiązana z odchyleniem standardowym).

GenMatch jest affinely niezmienna algorytm dopasowywania, że ​​stosuje środek odległość d(), w którym wszystkie elementy W są równe zero z wyjątkiem wzdłuż głównej przekątnej. Główna przekątna składa się z parametrów, które należy wybrać. (zauważ, że jeśli każdy z tych parametrów jest ustawiony na 1, d() jest taki sam, jak odległość Mahalanobisa). Podobnie jak w przypadku dystansu Mahalanobisa, ten parametr odległości może być użyty do przeprowadzenia chciwego lub optymalnego pełnego dopasowania. (Do wyboru ustawiania nondiagonal elementy W zera jest ze względu na samą moc obliczeniową)

Powodem, że wielkości zmienia się, gdy kolejność danych zmienia się, że matryca masy W ma nieskończoność równoważnych rozwiązań. Wygenerowane mecze są niezmiennicze ze stałą zmianą skali na miarę odległości. W szczególności, wytworzone dopasowania są takie same dla każdego W = cW dla dowolnego dodatniego skalaru c, a zatem macierz może być jednoznacznie zidentyfikowana na wiele sposobów.

Aby w pełni zrozumieć, w jaki sposób obliczane są niezerowe elementy macierzy wagowej, polecam lekturę full article za sformułowaniem GenMatch, która zajmuje nieco głęboki i złożony obraz stosowanych metod.

Jeśli interesuje Cię tylko kod źródłowy, możesz go wyświetlić na stronie GitHub. Jeśli masz dodatkowe pytania dotyczące kodu specyficznego dla R, z chęcią spróbuję odpowiedzieć na nie, ale jeśli masz dalsze pytania dotyczące algorytmów generujących macierz wagi, prawdopodobnie będziesz musiał udać się do Cross Validated.