mata: function kern(string scalar kernel,real matrix x) { real matrix y,Iy if (strmatch(kernel,"epan")==1) { y=3/4:*(1:-x:^2):*(abs(x):<1) Iy=(1/2:+1/4:*(3:*x:-x:^3)):*(abs(x):<1):+(x:>=1) } return((y,Iy)) } function Ikern(string scalar kernel, real scalar l, real matrix x1, real matrix x2) { real matrix y, x1m, x2m if (strmatch(kernel,"epan")==1) { x1m=(x1:+1):*(x1:>-1):-1 x2m=(x2:-1):*(x2:<1):+1 x1m=(x1m:^(l+1)):/(l+1)-(x1m:^(l+3)):/(l+3) x2m=(x2m:^(l+1)):/(l+1)-(x2m:^(l+3)):/(l+3) y=3/4:*(x1:<1):*(x2:>-1):*(x1:0)) nr=rows(mat) mats=sort(mat,1) rangs=range(0,nr-1,1)/(nr-1) rangh = select(rangs, (mats[.,2]:==1)) rangf = select(rangs, (mats[.,2]:==2)) nrh=rows(rangh) nrf=rows(rangf) prang=range(1,nbp,1)/nbp sKh=J(nbp,1,0) sIKh=J(nbp,1,0) sI0Kh=J(nbp,1,0) sI1Kh=J(nbp,1,0) sKf=J(nbp,1,0) sIKf=J(nbp,1,0) sI0Kf=J(nbp,1,0) sI1Kf=J(nbp,1,0) sigmh=sqrt(variance(rangh)) hh=h*(nrh)^(-1/5)*1.06*sigmh prangh=prang:/hh prangh_1=(prang:-1):/hh I0=Ikern(kernel,0,prangh_1,prangh) I1=Ikern(kernel,1,prangh_1,prangh) I2=Ikern(kernel,2,prangh_1,prangh) Denom=I2:*I0:-I1:^2 for (i=1; i<=nrh; i++) { calc=(prang:-rangh[i,1]):/hh kcalc=kern(kernel,calc) sKh=sKh:+(I2:-I1:*calc):*kcalc[.,1]:/Denom I0k=Ikern(kernel,0,prangh_1,calc) I1k=Ikern(kernel,1,prangh_1,calc) sI0Kh=sI0Kh:+I0k sI1Kh=sI1Kh:+I1k sIKh=sIKh:+(I2:*I0k-I1:*I1k):/Denom } sKh=sKh:/nrh:/hh sIKh=sIKh:/nrh sigmf=sqrt(variance(rangf)) hf=h*(nrf)^(-1/5)*1.06*sigmf prangh=prang:/hf prangh_1=(prang:-1):/hf I0=Ikern(kernel,0,prangh_1,prangh) I1=Ikern(kernel,1,prangh_1,prangh) I2=Ikern(kernel,2,prangh_1,prangh) Denom=I2:*I0:-I1:^2 for (i=1; i<=nrf; i++) { calc=(prang:-rangf[i,1]):/hf kcalc=kern(kernel,calc) sKf=sKf:+(I2:-I1:*calc):*kcalc[.,1]:/Denom I0k=Ikern(kernel,0,prangh_1,calc) I1k=Ikern(kernel,1,prangh_1,calc) sI0Kf=sI0Kf:+I0k sI1Kf=sI1Kf:+I1k sIKf=sIKf:+(I2:*I0k-I1:*I1k):/Denom } sKf=sKf:/nrf:/hf sIKf=sIKf:/nrf res=sKf:*sIKh:/(sKh:*sIKf) nvar=st_nvar() st_addvar("float",("hu","prang","fh","gFh","ff","gFf")) st_store((1,nbp),(nvar+1,nvar+2,nvar+3,nvar+4,nvar+5,nvar+6),(res,prang,sKh,sIKh,sKf,sIKf)) } void calcquant(string scalar wage, string scalar sexe, string scalar kernel, real scalar h, real scalar nbp, /// string scalar outh, string scalar outf, string scalar rang) { real matrix mat,mats,rangs,rangh,rangf,wageh,wagef,prang,sKh,sIKh,sKf,sIKf,calc,kcalc,qlsalh,qlsalf real scalar nr,nrh,nrf,i,hf,hh,sigmh,sigmf,nvar mat=st_data( ., (wage,sexe) ) mats=sort(mat,1) nr=rows(mat) rangs=range(0,nr-1,1)/(nr-1) rangh = select(rangs, (mats[.,2]:==1)) rangf = select(rangs, (mats[.,2]:==2)) wageh = select(mats[.,1], (mats[.,2]:==1)) wagef = select(mats[.,1], (mats[.,2]:==2)) nrh=rows(wageh) nrf=rows(wagef) prang=range(0,nbp-1,1)/(nbp-1) sKh=J(nbp,1,0) sIKh=J(nbp,1,0) sKf=J(nbp,1,0) sIKf=J(nbp,1,0) sigmh=sqrt(variance(rangh)) hh=h*(nrh)^(-1/5)*1.06*sigmh for (i=1; i<=nrh; i++) { calc=(prang:-i/(nrh+1)):/hh kcalc=kern(kernel,calc) sKh=sKh:+wageh[i,1]:*kcalc[.,1] sIKh=sIKh:+kcalc[.,1] } qlsalh=sKh:/sIKh sigmf=sqrt(variance(rangf)) hf=h*(nrf)^(-1/5)*1.06*sigmf for (i=1; i<=nrf; i++) { calc=(prang:-i/(nrf+1)):/hf kcalc=kern(kernel,calc) sKf=sKf:+wagef[i,1]:*kcalc[.,1] sIKf=sIKf:+kcalc[.,1] } qlsalf=sKf:/sIKf nvar=st_nvar() st_addvar("float",(outh,outf,rang)) st_store((1,nbp),(nvar+1,nvar+2,nvar+3),(qlsalh,qlsalf,prang)) } end **************