2011-02-25 13 views
6

Chciałbym dokonać dekompozycji Oaxaca w R. Jest on stosowany w np. ekonomia pracy, by rozróżnić wyjaśnioną wariancję od niewyjaśnionej wariancji. Nie byłem w stanie znaleźć odpowiedniego rozwiązania w R i raczej nie jestem chętny do stworzenia takiego rozwiązania (prawdopodobnie zepsułbym to).Rozkład Oaxaca w R

Zresztą, procedura jest krótko wyjaśnione tutaj:

http://en.wikipedia.org/wiki/Ronald_Oaxaca

Stata jest obdarzona dość dobry pakiet do tego, ale Stata nie jest łatwo dostępna do mnie.

www.stata.com/meeting/5german/SINNING_stata_presentation.pdf

Uwaga: Ja również wysłana wiadomość na R-pomoc, ale ona ma zdobyć żadnej odpowiedzi. Mam nadzieję, że można również zamieszczać posty na tej liście.

Dzięki z góry, Rasmus

Edit: zrobiłem następującą funkcję, która wydaje się w celu uzyskania błędnych odpowiedzi (Urgh). Starałem się podążać za łączem Stata powyżej, ale nie wyszło tak jak miałem nadzieję :)

oaxaca <- function (fsex,frace1,frace2) { 
    ## First we make regresions 
    data1 <- subset(l2,sex==fsex & race==frace1) 
    data2 <- subset(l2,sex==fsex & race==frace2) 

    mindata1 <- subset(cbind(grade,exp,I(exp^2)),sex==fsex & race==frace1) 
    mindata2 <- subset(cbind(grade,exp,I(exp^2)),sex==fsex & race==frace2) 

    reg1 <- lm(log(wage)~grade+exp+I(exp^2), data=data1) 
    reg2 <- lm(log(wage)~grade+exp+I(exp^2), data=data2) 

    ## DECOMPOSITION 
    ################ 

    ## Variables 
    gap <- mean(log(wage[race==frace1 & sex==fsex]))-mean(log(wage[race==frace2 & sex==fsex])) 

    mean1 <- colMeans(mindata1) 
    mean2 <- colMeans(mindata2) 

    beta1 <- summary(reg1)$coefficients[,1] 
    beta2 <- summary(reg2)$coefficients[,1] 
    beta1incep <- summary(reg1)$coefficients[1,1] 
    beta2incep <- summary(reg2)$coefficients[1,1] 
    beta1coef <- summary(reg1)$coefficients[c(2,3,4),1] 
    beta2coef <- summary(reg2)$coefficients[c(2,3,4),1] 
    betastar <- .5*(beta1coef+beta2coef) 
    betastar2 <- (beta1+beta2)/2 

    expl <- sum((mean1-mean2)*beta1coef) 
    uexpl <- sum(mean2*(beta2coef-beta1coef)) 

    pct=expl/gap 
    pct2=uexpl/gap 

    ## output 
    out <- data.frame(Gap=gap, 
     Explained=expl, 
     Unexplained=uexpl, 
     Pct=pct*100) 

    return(out) 
} 
+0

eh, nie przesyłaj listów (lista mailingowa), które czytali ci sami ludzie. –

+1

nie otrzymał odpowiedzi po tygodniu, więc na pewno po tym czasie ma prawo poprosić gdzie indziej. –

+0

okej, postawiłbym -1, gdyby był. przepraszam za szybkie rozdanie. Teraz z kodem oznaczonym pytanie i tak wygląda o wiele lepiej ... –

Odpowiedz

7

Użyłem dekompozycji typu Oaxaca. Nigdy nie znalazłem żadnej paczki dla R, więc napisałem kilka funkcji, które to robią. Jest podobny do odpowiedniego pakietu w Stata. można znaleźć kopię w: https://github.com/eyjo/Oaxaca

Należy pamiętać, że w tym czasie byłem zainteresowany wykorzystaniem efektów stałych (dane panel) modele, które nie są bezpośrednio kompatybilne z tych rozkładów. Istnieje nieukończona procedura obsługi dla modeli typu FE, ale nie należy jej używać. Chciałem stworzyć z tego pakiet, ale nigdy się do niego nie zbliżyłem.

+1

Och cudownie. Moja funkcja z pewnością robi/nie daje poprawnych wyników! Edycja: Myślę, że masz rację, na FE. Próbowałem modelu z użyciem współczynników i zwracałem komunikat "Błąd w B1 [1, 1] <- m1 $ intercept: liczba elementów do zamiany nie jest wielokrotnością długości wymiany". Mam nadzieję, że ktoś zajmie się tym pakietem. To dobry początek :) – Rasmus

+0

Bardzo, bardzo dobrze. Ta funkcja powinna stać się prawdziwą paczką w oficjalnym r rep. :) – S12000

4

Pakiet oaxaca na CRAN może oszacować dekompozycji Blinder-Oaxaca dla modeli liniowych, a także produkujących wykresy słupkowe, które pokazują wyniki: http://cran.r-project.org/web/packages/oaxaca/index.html

Można również obliczyć bootstrapped błędy standardowe, aby zapewnić poczucie Ile estymacji niepewność jest.

Winieta zawiera szczegółowy opis możliwości pakietu, a także podaje przykłady jego użycia. Zobacz tutaj: "oaxaca: Blinder-Oaxaca Decomposition in R"

Powiązane problemy