Je voudrais faire une décomposition d'Oaxaca dans R. Il est utilisé par ex. l'économie du travail pour distinguer la variance expliquée par rapport à la variance inexpliquée, je crois. Je n'ai pas été capable de trouver une solution appropriée dans R, et je suis plutôt réticent à en créer un moi-même (je le ferais probablement gâcher).Décomposition d'Oaxaca dans R
Quoi qu'il en soit, la procédure est brièvement expliquée ici:
http://en.wikipedia.org/wiki/Ronald_Oaxaca
Stata est doté d'un ensemble assez bon pour cela, mais Stata est pas facilement disponible pour moi.
www.stata.com/meeting/5german/SINNING_stata_presentation.pdf
S'il vous plaît noter: J'ai posté un message sur R-help, mais il n'a obtenu aucune réponse. J'espère que vous pouvez aussi poster sur cette liste.
Merci à l'avance, Rasmus
Edit: j'ai fait la fonction suivante, qui semble donner des mauvaises réponses (urgh). J'ai essayé de suivre le lien ci-dessus Stata, mais cela n'a pas fonctionné comme je l'espérais :)
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, ne pas cross-post (mailinglist) les mêmes personnes lisent cela. –
il n'a pas été répondu après une semaine si sûrement après cette période de temps, il est autorisé à demander ailleurs. –
D'accord, je mettrais le -1 à son appartenance. des excuses pour être rapide à le distribuer. Maintenant, avec le code a déclaré la question semble beaucoup mieux de toute façon ... –