program define binphat * Quick-and-dirty program to compute predicted probabilities of * a binomial probit. Outcomes are presumed to be {0,1,2} with * omitted category 0. Value functions are: * * V0 = 0 * V1 = XB1 + u1 * V2 = XB2 + u2 * * This program computes P(Y=0) = P(V0 > max(V1,V2)), * P(Y=1) = P(V1 > max(V0,V2)), and P(Y=2) = P(V2 > max(V0,V1)). * * Usage: binphat xb1 xb2 rho phat0 phat1 phat2 * xb1 [in] variable with XB1 * xb2 [in] variable with XB2 * rho [in] scalar representing corr(u1,u2) * phat0 [out] variable with predicted P(Y=0) * phat1 [out] variable with predicted P(Y=1) * phat2 [out] variable with predicted P(Y=2) * * Stan Panis, 31 March 2003 version 7 **************************************** * Confirm that all arguments are OK. * **************************************** local error = "Usage: binphat xb1 xb2 rho phat0 phat1 phat2" if ("`6'"=="" | "`7'"!="") { display in red "`error'" exit 999 } confirm variable `1' local xb1 "`1'" confirm variable `2' local xb2 "`2'" confirm number `3' local rho = `3' macro shift 3 local varlist "required new min(3) max(3)" parse "`*'" parse "`varlist'", parse(" ") local phat0 "`1'" local phat1 "`2'" local phat2 "`3'" *************************** * All arguments are OK. * *************************** * Calculate predicted P(Y=0) qui replace `phat0' = binorm(-`xb1',-`xb2',`rho') * Calculate predicted P(Y=1) local newrho = (1-`rho')/sqrt(2-2*`rho') qui replace `phat1' = binorm(`xb1', (`xb1'-`xb2')/sqrt(2-2*`rho'), `newrho') * Calculate predicted P(Y=2) local newrho = (1-`rho')/sqrt(2-2*`rho') qui replace `phat2' = binorm(`xb2', (`xb2'-`xb1')/sqrt(2-2*`rho'), `newrho') end