2011-02-25 11 views
6

Me gustaría hacer una Descomposición de Oaxaca en R. Se usa en, p. economía laboral para distinguir la varianza explicada versus la varianza inexplicada, creo. No he podido encontrar una solución adecuada en R, y soy bastante reacio a crear una yo mismo (probablemente lo estropee).Descomposición de Oaxaca en R

De todos modos, el procedimiento se explica brevemente a continuación:

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

Stata ha sido bendecida con un buen paquete en lugar de esto, pero Stata no es fácilmente disponible para mí.

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

Tenga en cuenta: También he publicado un mensaje en el R-ayuda, pero ha recibido ninguna respuesta. Espero que esté bien publicarlo en esta lista también.

Gracias de antemano, Rasmus

Editar: Yo hice la siguiente función, que parece dar respuestas erróneas (Urgh). Traté de seguir el enlace de Stata arriba pero no funcionó como esperaba :)

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, no haga una publicación cruzada (lista de correo) la misma gente lee eso. –

+1

no fue respondida después de una semana, así que seguramente después de ese período de tiempo tiene derecho a preguntar en otro lado. –

+0

bien, pondría el -1 de nuevo a donde pertenece. Disculpas por ser rápido de repartir. Ahora con el código establecido, la pregunta se ve mucho mejor de todos modos ... –

Respuesta

7

He usado Oaxaca type decompositions. Nunca encontré ningún paquete para R, así que escribí algunas funciones que lo hacen. Es similar al paquete correspondiente en Stata. Puede encontrar una copia de la misma en: https://github.com/eyjo/Oaxaca

Tenga en cuenta que en el momento que estaba interesado en el uso de modelos de efectos fijos (datos de panel), que no son directamente compatibles con estas descomposiciones. Hay un controlador inacabado para los modelos de tipo FE, pero no debe utilizarse. Quise crear un paquete, pero nunca lo logré.

+1

Oh maravilloso. ¡Mi función ciertamente/no/da resultados correctos! Editar: Creo que tienes razón, en FE. Probé un modelo usando factores, y devuelve 'Error en B1 [1, 1] <- m1 $ interceptar: el número de elementos para reemplazar no es un múltiplo de la longitud de reemplazo'. Con suerte, alguien aceptará este paquete. Es un buen comienzo :) – Rasmus

+0

Muy, muy bien. Esta función debería convertirse en un paquete real en el representante oficial. :) – S12000

4

El paquete oaxaca en CRAN puede estimar descomposiciones Blinder-Oaxaca para los modelos lineales, así como la producción de gráficos de barras que muestran los resultados: http://cran.r-project.org/web/packages/oaxaca/index.html

También puede calcular bootstrap errores estándar para proporcionar una idea de la cantidad de estimación incertidumbre allí es.

La viñeta ofrece una descripción detallada de las capacidades del paquete, así como también algunos ejemplos de su uso. Consulte aquí: "oaxaca: Blinder-Oaxaca Decomposition in R"

Cuestiones relacionadas