program define int2way syntax , x(varname) z(varname) zval(numlist) [notitle name(string) XLABel(string) ZLABel(string) DVLABel(string) xaxis addplot(string) LEVel(numlist)] qui { matrix V=e(V) local dv `e(depvar)' tempvar ZV star conb conse consb upper lower gen `ZV' = . local n = 1 foreach i of numlist `zval' { replace `ZV' = `i' if _n==`n' local ++n } forval k=1/3 { tempname b`k' v`k' } *nois macro dir scalar `b1'=_b[`x'] /*bx*/ scalar `b2'=_b[`z'] /*bz*/ scalar `b3'=_b[`x'#`z'] /*bxz*/ scalar `v1'=_se[`x']^2 /*vx*/ scalar `v2'=_se[`z']^2 /*vz*/ scalar `v3'=_se[`x'#`z']^2 /*vxz*/ tempname covb1b3 covb2b3 mat `covb1b3'=V["`x'","`x'#`z'"] /*covb1b3 */ mat `covb2b3'=V["`z'","`x'#`z'"] /*covb2b3 */ gen `conb' = `b1'+`b3'*`ZV' if `ZV'~=. gen `conse' = sqrt(`v1'+`v3'*(`ZV'^2) + 2*`ZV'*`covb1b3'[1,1]) if `ZV'~=. gen `consb' = `conb' if "`level'"=="" local level=95 replace `consb' = . if abs(`conb'/`conse')<(invttail(`e(N)', (100-`level')/100/2)) if "`xlabel'"=="" { local xlabel="`x'" } if "`zlabel'"=="" { local zlabel="`z'" } gen `upper'=`conb'+(invttail(`e(N)', (100-`level')/100/2))*`conse' gen `lower'=`conb'-(invttail(`e(N)', (100-`level')/100/2))*`conse' if "`xaxis'"=="" { local xaxis = "" } if "`xaxis'"~="" { local xaxis ="xlab(`zval')" } if "`title'"=="" { #delim ; graph twoway line `conb' `ZV', clpattern(solid ) clwidth(thin ...) clcolor(black) || line `upper' `ZV' , clpattern(dash) clwidth(thin) clcolor(black) || line `lower' `ZV' , clpattern(dash) clwidth(thin) clcolor(black) || , `addplot' yscale(noline) xscale(noline) yline(0, lcolor(black)) title("Marginal Effect of `xlabel' on `dvlabel'" "As `zlabel' changes", size(4)) xtitle(`zlabel', size(3)) `xaxis' ytitle(Marginal Effect of `xlabel', size(3)) xsca(titlegap(2)) ysca(titlegap(4)) name(`name') legend(label(1 "Marg Effect of `xlabel'") label(2 "`level'% CI") order(1 2)) scheme(s2mono) graphregion(fcolor(white)) graphregion(margin(r=28)); #delim cr } if "`title'"~="" { #delim ; graph twoway line `conb' `ZV', clpattern(solid ) clwidth(thin ...) clcolor(black) || line `upper' `ZV' , clpattern(dash) clwidth(thin) clcolor(black) || line `lower' `ZV' , clpattern(dash) clwidth(thin) clcolor(black) || , `addplot' yscale(noline) xscale(noline) yline(0, lcolor(black)) /* title("Marginal Effect of `xlabel' on `dvlabel'" "As `z' changes", size(4)) */ xtitle(`z', size(3)) xlab(`zval') /* ytitle(Marginal Effect of `xlabel', size(3)) */ xsca(titlegap(2)) ysca(titlegap(4)) name(`name') /* legend(label(1 "Marg Effect of `xlabel'") label(2 "95% CI") order(1 2)) */ legend(off) nodraw scheme(s2mono) graphregion(fcolor(white)) graphregion(margin(r=28)); #delim cr } } end