I'm trying to replicate the results of the oaxaca9 command manually, but I have problems calculating the standard deviations since in no case do they give me the same as the direct command. All this prior to the classic Heckman corrections. I think my mistake is that the way he calculates the variances oaxaca9 is not the same as the one I do, but if that's the problem I do not know how to calculate the variances oaxaca.
My command of oaxaca9 is:
Code:
oaxaca9 lwage_h $controles2 if lwage_h>0, by(female) svy
Code:
mat K = (X1' * B1_var * X1) + (B1' * var1 * B1) + trace(var1 * B1_var) + (X2' * B2_var * X2) + (B2' * var2 * B2) + trace(var2 * B2_var) matrix oax[2,1] = sqrt(K[1,1]) matrix oax[3,1] = oax[1,1]/oax[2,1] matrix L = (X1-X2)' * B1_var * (X1-X2)+ B1' * (var1+var2) * B1 matrix oax[2,2] = sqrt(L[1,1]) matrix oax[3,2] = oax[1,2]/oax[2,2] matrix M = X2' * (B1_var+B2_var)*X2 + (B1-B2)'*var2*(B1-B2) matrix oax[2,3] = sqrt(M[1,1]) matrix oax[3,3] = oax[1,3]/oax[2,3] matlist oax
Code:
global malelist "0 1" foreach sexo in $malelist { svy: reg lwage_h $controles2 if female==`sexo' & lwage_h>0 if `sexo'==0 { gen used = e(sample)==1 matrix B1 = e(b) matrix B1_var = e(V) //matriz de varianzas y covarianzas predict yhat1 if used==1 & female==0, xb } if `sexo'==1 { replace used=1 if e(sample)==1 matrix B2 = e(b) matrix B2_var = e(V) //matriz de varianzas y covarianzas predict yhat2 if used==1 & female==1, xb } } drop if used==0 mat B1=B1' mat B2=B2' mat B1_v=B1_v' mat B2_v=B2_v'
Code:
global controles3 "educ exper exper2 rural publico used" // used at the end for the vector of 1 of the variables matrix local nvar = 6 matrix X=J(`nvar',4,0) qui forval i=0/1 { local a=1 foreach v in $controles3 { local j=`i'+1 svy: mean `v' if female==`i' mat x_`a'_`j'=e(b) mat X[`a',`j']= x_`a'_`j'[1,1] mat v_`a'_`j'=e(V) mat X[`a',`j'+2]= v_`a'_`j'[1,1] local ++a } } mat X = X' matrix rownames X = hombre mujer hombre_var mujer_var matrix colnames X = $controles3 // matrix X1 = J(`nvar',1,0) matrix X2 = J(`nvar',1,0) matrix X1_v = J(`nvar',1,0) matrix X2_v = J(`nvar',1,0) qui forval i=1/6 { mat X1[`i',1] = X[1,`i'] mat X2[`i',1] = X[2,`i'] mat X1_v[`i',1] = X[3,`i'] mat X2_v[`i',1] = X[4,`i'] } svy: mean $controles2 if female==0 & lwage_h>0 mat var1=e(V) svy: mean $controles2 if female==1 lwage_h>0 mat var2=e(V)
0 Response to Help with standard deviations of oaxaca command
Post a Comment