program define spautosacnw version 10.0 args lnf $spat_ARGS tempvar L0 L1 L2 L3 rhowy D0 D1 if $spat_w1==0 { qui gen double `rhowy'=`rho'*w1y_`e(depvar)' qui gen double `L0'=`rho'*spat_eigw qui gen double `L3'= `rho'*`lambda'*w2y_`e(depvar)' } else { qui gen double `rhowy'=`rho'*w1y_`e(depvar)' qui gen double `L0'=`rho'*spat_eigw1 qui gen double `L3'= `rho'*`lambda'*spat_w2w1y } qui gen double `L1'=`lambda'*spat_eigw qui gen double `L2'=`lambda'*w1y_`e(depvar)' forv i=1/$spat_nx { tempvar X`i' XX`i' qui gen double `X`i''=`beta`i''*`:word `i' of `:colnames(spat_ols)'' local XB "`XB'`X`i''-" qui gen double `XX`i''=`lambda'*`beta`i''*spat_w1x_`i' local ZB "`ZB'`XX`i''+" } qui gen double `D0'=0 qui gen double `D1'=0 qui replace `D0' =1 if `e(depvar)' ==0 qui replace `D1' =1 if `e(depvar)' >0 qui replace `lnf' =`D1'*(((`e(depvar)'-`rhowy'-`L2'+`L3'-`XB'`beta0'+`ZB'`lambda'*`beta0')/`sigma')-exp((`e(depvar)'-`rhowy'-`L2'+`L3'-`XB'`beta0'+`ZB'`lambda'*`beta0')/`sigma')) /// -`D0'*exp((`rhowy'+`L2'-`L3'+`XB'`beta0'-`ZB'`lambda'*`beta0')/`sigma')-`D1'*ln(`sigma') end