program define dmtest, rclass *! v1.3 gmh july 11 2002 syntax varname [if] [in], m1(string) m2(string) tempvar pm1 pm2 v1 v2 lhs1 lhs2 dif factor1 factor2 touse mark `touse' `if' `in' markout `touse' `m1' `m2' qui probit `varlist' `m1' if `touse' qui predict `pm1' qui predict `v1' , stdp qui probit `varlist' `m2' if `touse' qui predict `pm2' qui predict `v2', stdp qui gen `lhs1' = `varlist' - `pm1' qui gen `lhs2' = `varlist'- `pm2' qui gen `factor1' = normd(invnorm(`pm1')) qui gen `factor2' = normd(invnorm(`pm2')) capture drop R1* R2* capture gen one=1 qui foreach var in `m1' one { gen R1_`var' = `factor1'*`var' } qui foreach var in `m2' one { gen R2_`var'= `factor2'*`var' } qui gen `dif' = `pm1'-`pm2' di _n in gr " Davidson-MacKinnon Nonnested Model Test for Binary Regression Model" di " " qui count if `touse' global N = r(N) di in gr " Number of Observations = " in ye $N di " " ** test model 1 qui reg `lhs2' `dif' R2_* [w=1/ `v2'] if `touse', nocon di in gr "TEST OF 1 VERSUS 2 (R says Model 1 adds pred. power)" test `dif'=0 return scalar df_r1= r(df_r) return scalar F_1=r(F) return scalar df_1 = r(df) return scalar p_1 = r(p) ** test model 2 qui reg `lhs1' `dif' R1_* [w=1/ `v1'] if `touse', nocon di in gr "TEST OF 2 VERSUS 1 (R says Model 2 adds pred. power)" test `dif'=0 return scalar df_r2= r(df_r) return scalar F_2=r(F) return scalar df_2 = r(df) return scalar p_2 = r(p) return scalar N = $N end