set obs 1000 set seed 12345678 gen z=cond(uniform()<0.5,1,2) gen y=invnorm(uniform()) replace y=y+5 if z==2 histogram y, bin(20) frequency capture program drop mixing2 program define mixing2 version 11.0 args lj xb xb2 lo1 ls1 ls2 tempvar f1 f2 p s1 s2 quietly gen double `s1'=exp(`ls1') quietly gen double `s2'=exp(`ls2') quietly gen double `p'=1/(1+exp(-`lo1')) quietly gen double `f1'=exp(-0.5*(($ML_y1-`xb')/`s1')^2)/(sqrt(2*_pi)*`s1') quietly gen double `f2'=exp(-0.5*(($ML_y1-`xb2')/`s2')^2)/(sqrt(2*_pi)*`s2') quietly replace `lj'=ln(`p'*`f1'+(1-`p')*`f2') end ml model lf mixing2 (xb1: y=) /xb2 /lo1 /lsd1 /lsd2 ml init 1 6 0 0.2 -0.2, copy ml maximize program myprobit version 11 args lnf theta1 quietly replace `lnf' = ln(normal(`theta1')) if $ML_y1==1 quietly replace `lnf' = ln(normal(-`theta1')) if $ML_y1==0 end g z_bin=(z==2) ml model lf myprobit (z_bin = y) ml maximize probit z_bin y