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