capture program drop xpost program define xpost, rclass version 6.0 * V1.08 Done -- 5/15/00, by Simon Cheng * V1.08 add ologit, 5/15/00 * V1.07 add mlogit, 5/14/00 * V1.06 add poisson and nbreg - xpostg, 5/13/00 * V1.05 add probit, 5/13/00 * V1.04 add ologit, 5/11/00 * V1.02 for logit, 5/10/00, sc * V1.01 for logit, incomplete, 5/10/00, sc *Vraibles for All Models, unless specified * di "comaand" = `cmd' * di "y-name" = `lhsnm'" * di "x-name" = `rhsnam'" * di "# of x" = `rhsnum'" * di "Cat Name" = `cnames'" * di "# of cat" = `ncats'" * di "# of rows" = `rown'" --- gologit only --- equal (rhsnum + 1)*(ncats - 1) * mat "Mean of X" = `mnnoy' * mat "std of X" = `sdnoy' * mat "Min of X" = `minnoy' * mat "Max of X" = `maxnoy' * sca "Mean of Y" = `ymn' * sca "std of Y" = `ysd' * sca "Min of Y" = `ymin' * sca "Max of Y" = `ymax' * mat "b no cons" = `bnoc' -- logit probit ologit poisson nbreg-- * mat "z no cons" = `znoc' -- logit probit ologit poisson nbreg-- * mat "b matrix" = `b' -- gologit mlogit b matrix, with con on the top * sca "Bconstant" = `bcon' -- logit probit poisson nbreg -- * sca "Zconstant" = `zcon' -- logit probit poisson nbreg -- * mat "cutpoints" = `ycut' -- ologit -- *Command Conditions local cmd "`e(cmd)'" if "`cmd'" != "logit" & "`cmd'" != "probit" & "`cmd'" != "ologit" /* */ & "`cmd'" != "gologit" & "`cmd'" != "mlogit" /* */ & "`cmd'" != "poisson" & "`cmd'" != "nbreg" { di in r " -xpost- must be run after logit, probit, ologit, gologit, /* */ mlogit, poisson, or nbreg. " exit } di di in g " -The output is generated to be directly pasted to Excel XPOST- " *Grab name of y local lhsnm "`e(depvar)'" *Information on x _perhs local rhsnam "`r(rhsnms)'" local rhsnum "`r(nrhs)'" *Information of categories if "`cmd'" != "gologit" { _pecats local ncats = r(numcats) local cnames = r(catnms) di local rfnm = r(refnm) } if "`cmd'" == "gologit" { tempname gv /* gv is the v matrix of gologit */ mat `gv' = e(V) local rown = rowsof(`gv') local df = e(df_m) local ncats = `rown' - `df' + 1 quietly ologit `lhsnm' `rhsnam' _pecats local cnames = r(catnms) quietly gologit `lhsnm' `rhsnam' } *Grab mean sd min max; determine var type if "`cmd'" == "gologit" { quietly ologit `lhsnm' `rhsnam' } tempname mn sd min max vtype tempname mnnoy sdnoy minnoy maxnoy tempname ymn ysd ymin ymax _pesum if e(sample)==1 /*-if e(sample)==1- works when missing present"*/ mat `mn' = r(Smean) mat `sd' = r(Ssd) mat `min' = r(Smin) mat `max' = r(Smax) _pesum if e(sample)==1, dummy /* Determine Var Type */ mat `vtype' = r(Sdummy) mat `mnnoy' = `mn'[1,2...] /* trim off _y */ mat `sdnoy' = `sd'[1,2...] mat `minnoy' = `min'[1,2...] mat `maxnoy' = `max'[1,2...] mat `mnnoy' = `mnnoy'' /* transpose to be a column vector */ mat `sdnoy' = `sdnoy'' mat `minnoy' =`minnoy'' mat `maxnoy' =`maxnoy'' scalar `ymn' = `mn'[1,1] scalar `ysd' = `sd'[1,1] scalar `ymin' = `min'[1,1] scalar `ymax' = `max'[1,1] if "`cmd'" == "gologit" { quietly gologit `lhsnm' `rhsnam' } *Grab b bnoc their std and compute z * ------------------------------------- * --logit probit ologit poisson nbreg-- * ------------------------------------- * | bnoc and znoc | * ----------------- if "`cmd'"=="logit" | "`cmd'"=="probit" | "`cmd'"=="ologit" /* */ | "`cmd'"=="poisson" | "`cmd'"=="nbreg" { tempname b bnoc sdb sdbnoc znoc mat `b' = e(b) mat `bnoc' = `b'[1,1..`rhsnum'] /* trim off _con */ mat `bnoc'=`bnoc'' mat `sdb' = e(V) mat `sdb' = vecdiag(`sdb') mat `sdbnoc' = `sdb'[1,1..`rhsnum'] /* trim off _con */ mat `sdbnoc' = `sdbnoc'' mat `znoc' = `bnoc' local nbnoc = rowsof(`bnoc') local i = 1 while `i' <= `nbnoc' { mat `znoc'[`i',1] = `bnoc'[`i',1] / sqrt(`sdbnoc'[`i',1]) local i = `i' + 1 } } * ------------------------------ * --logit probit poisson nbreg-- * ------------------------------ * | bnoc and znoc | * ----------------- if "`cmd'"=="logit" | "`cmd'"=="probit" /* */ | "`cmd'"=="poisson" | "`cmd'"=="nbreg" { tempname bcon zcon scalar `bcon' = `b'[1,`rhsnum'+1] scalar `zcon' = `b'[1,`rhsnum'+1] / sqrt(`sdb'[1,`rhsnum'+1]) } * ------------ * -- ologit -- * ------------ * | cutpoint | * ------------ if "`cmd'"=="ologit" { tempname ycut mat `ycut' = `b'[1,`rhsnum'+1..`rhsnum'+`ncats'-1] mat `ycut' = (`ycut')' } * ---------------------------------------------------- * --gologit mlogit-- get b matrix, including constant * ---------------------------------------------------- if "`cmd'"=="gologit" { tempname b bmat mat `bmat' = e(b) local numeq = `ncats' - 1 local eqnum = 1 local rhsnum1 = `rhsnum' + 1 local icount = 0 mat `b' = J(`rhsnum1',`numeq',-999) while `eqnum' <= `numeq' { local varnum = 1 while `varnum' <= `rhsnum1' { local icount = `icount' + 1 mat `b'[`varnum',`eqnum'] = `bmat'[1,`icount'] local varnum = `varnum' + 1 } /* varnum */ local eqnum = `eqnum' + 1 } /* eqnum loop */ *put con on top row mat `bmat' = `b' mat `b' = J(`rhsnum1',`numeq',-999) local icol = 1 while `icol' <= `numeq' { mat `b'[1,`icol'] = `bmat'[`rhsnum1',`icol'] local icol = `icol' + 1 } local irow = 1 while `irow' <= `rhsnum' { local icol = 1 while `icol' <= `numeq' { mat `b'[`irow'+1,`icol'] = `bmat'[`irow',`icol'] local icol = `icol' + 1 } local irow = `irow' + 1 } } if "`cmd'" == "mlogit" { tempname b bnoc bcon version 5.0 mat `b' =get(_b) version 6.0 mat `bnoc' = `b'[1..`ncats'-1,1..`rhsnum'] mat `bcon' = `b'[1..`ncats'-1,`rhsnum'+1] mat `b' = `bcon', `bnoc' mat `b'=`b'' } * Print Output *========================= * Table 1. Y Information *========================= * ALL MODELS *============ tempname t1 mat `t1'=[`ymn', `ysd', `ymin', `ymax'] mat colnames `t1' = mean std min max mat rownames `t1' = `lhsnm' di di in g "---------------------------------" di in g " Table 1: Input of Y Information " di in g "---------------------------------" mat list `t1', f(%5.0g) noh if "`cmd'" == "mlogit" { di di "Reference Category = `rfnm'" } *========= * Table 2 *============== * logit probit *============== tempname t2 di local i = 10 local c1 "10" local c2 "20" local c3 "30" local c4 "40" local c5 "50" local c6 "60" local c7 "70" if "`cmd'" == "logit" | "`cmd'" == "probit" { mat `t2' = `bnoc', `znoc', `mnnoy', `sdnoy', `minnoy', `maxnoy' di di in g "--------------------------------" di in g " Table 2: Input of X Information" di in g "--------------------------------" di di " b z mean std min" /* */ " max VType" di "Constant" _col(`c1') %9.5f `bcon' _col(`c2') %8.2f `zcon' /* */ " --- --- --- --- ---" local i = 1 while `i' < `rhsnum' + 1 { local vt`i' = "C" if `vtype'[1,`i'+1]==1 { local vt`i' = "B" } local vname : word `i' of `rhsnam' di in y %8s "`vname'" /* */ _col(`c1') %9.5f `t2'[`i',1] /* */ _col(`c2') %8.2f `t2'[`i',2] /* */ _col(`c3') %9.5f `t2'[`i',3] /* */ _col(`c4') %9.5f `t2'[`i',4] /* */ _col(`c5') %8.2f `t2'[`i',5] /* */ _col(`c6') %8.2f `t2'[`i',6] /* */ _col(`c7') %5s "`vt`i''" local i = `i' + 1 } } *============ * T2: ologit *============ if "`cmd'" == "ologit" { di in g "--------------------------" di in g " Table 2: Tau & Cat Names " di in g "--------------------------" di di " A: Tau (1 to k)" di local i = 1 while `i' < `ncats' { di in y %9.5f _col(6) `ycut'[`i',1] local i = `i' + 1 } di di " B: Cat Names" di local i = 1 while `i' <= `ncats' { local vname : word `i' of `cnames' di in y %10s "`vname'" local i = `i' + 1 } } *========================= * T2: poissin nbreg mlogit *========================= if "`cmd'" == "poisson" | "`cmd'" == "nbreg" | "`cmd'" == "mlogit" { mat `t2' = `mnnoy', `sdnoy', `minnoy', `maxnoy' di di in g "---------------------------------" di in g " Table 2: Input of X Information " di in g "---------------------------------" di di " mean std min max VType" local i = 1 while `i' < `rhsnum' + 1 { local vt`i' = "C" if `vtype'[1,`i'+1]==1 { local vt`i' = "B" } local vname : word `i' of `rhsnam' di in y %8s "`vname'" /* */ _col(`c1') %9.5f `t2'[`i',1] /* */ _col(`c2') %9.5f `t2'[`i',2] /* */ _col(`c3') %8.2f `t2'[`i',3] /* */ _col(`c4') %8.2f `t2'[`i',4] /* */ _col(`c5') %5s "`vt`i''" local i = `i' + 1 } di } *============= * T2: gologit *============= if "`cmd'" == "gologit" { di in g "--------------------" di in g " Table 2: Cat Names " di in g "--------------------" di local i = 3 local icol = 1 while `icol' <= `ncats' { local vname: word `icol' of `cnames' di %8s _col(`i') "`vname'" _c local icol = `icol' + 1 } di } *========= * Table 3 *======== * ologit *======== if "`cmd'" == "ologit" { mat `t2' = `bnoc', `znoc', `mnnoy', `sdnoy', `minnoy', `maxnoy' di di in g "--------------------------------" di in g " Table 3: Input of X Information" di in g "--------------------------------" di di " b z mean std min" /* */ " max VType" local i = 1 while `i' < `rhsnum' + 1 { local vt`i' = "C" if `vtype'[1,`i'+1]==1 { local vt`i' = "B" } local vname : word `i' of `rhsnam' di in y %8s "`vname'" /* */ _col(`c1') %9.5f `t2'[`i',1] /* */ _col(`c2') %8.2f `t2'[`i',2] /* */ _col(`c3') %9.5f `t2'[`i',3] /* */ _col(`c4') %9.5f `t2'[`i',4] /* */ _col(`c5') %8.2f `t2'[`i',5] /* */ _col(`c6') %8.2f `t2'[`i',6] /* */ _col(`c7') %5s "`vt`i''" local i = `i' + 1 } } *============= * T3: Poisson *============= if "`cmd'"=="poisson" { tempname t3 mat `t3' = `bnoc', `znoc' di in g "-------------------------------" di in g " Table 3: Poisson Coefficients " di in g "-------------------------------" di di " b z" di _col(`c1') %9.5f `bcon' _col(`c2') %9.5f `zcon' local i = 1 while `i' < `rhsnum' + 1 { di in y _col(`c1') %9.5f `t3'[`i',1] /* */ _col(`c2') %9.5f `t3'[`i',2] local i = `i' + 1 } } *============ * T3: Mlogit *============ if "`cmd'" == "mlogit" { di di in g "-------------------------------" di in g " Table 3: Logit Coefficients " di in g "-------------------------------" di local i = 4 local icol = 1 while `icol' < `ncats' { local vname: word `icol' of `cnames' di %9s _col(`i') "`vname'" _c local icol = `icol' + 1 } di local irow = 1 local icol = 1 while `icol' < `ncats' { tempname b0 local i = 4 scalar `b0' = `b'[1,`icol'] di _col(`i') %9.5f `b0' _c local icol = `icol' + 1 local i = `i' + 4 } di local irow = 1 while `irow' < = `rhsnum' { local icol = 1 while `icol' < `ncats' { local i = 4 scalar `b0' = `b'[`irow'+1,`icol'] di _col(`i') %9.5f `b0' _c local icol = `icol' + 1 local i = `i' + 4 } di local irow = `irow' + 1 } } *============= * T3: gologit *============= if "`cmd'" == "gologit" { tempname t3 mat `t3' = `mnnoy', `sdnoy', `minnoy', `maxnoy' di di in g "---------------------------------" di in g " Table 3: Input of X Information " di in g "---------------------------------" di di " mean std min max VType" local i = 1 while `i' < `rhsnum' + 1 { local vt`i' = "C" if `vtype'[1,`i'+1]==1 { local vt`i' = "B" } local vname : word `i' of `rhsnam' di in y %8s "`vname'" /* */ _col(`c1') %9.5f `t3'[`i',1] /* */ _col(`c2') %9.5f `t3'[`i',2] /* */ _col(`c3') %8.2f `t3'[`i',3] /* */ _col(`c4') %8.2f `t3'[`i',4] /* */ _col(`c5') %5s "`vt`i''" local i = `i' + 1 } } *=========== * T4: Nbreg *=========== if "`cmd'"=="nbreg" { tempname t4 mat `t4' = `bnoc', `znoc' di in g "-------------------------------" di in g " Table 4: Nbreg Coefficients " di in g "-------------------------------" di di " b z" di _col(`c1') %9.5f `bcon' _col(`c2') %9.5f `zcon' local i = 1 while `i' < `rhsnum' + 1 { di in y _col(`c1') %9.5f `t4'[`i',1] /* */ _col(`c2') %9.5f `t4'[`i',2] local i = `i' + 1 } di di in y "Alpha = " _col(`c1') %9.5f e(alpha) } *============ * T3: Mlogit *============ if "`cmd'" == "gologit" { di di in g "-------------------------------" di in g " Table 4: Logit Coefficients " di in g "-------------------------------" di local i = 4 local icol = 1 local j = 1 while `icol' < `ncats' { local eq`j' = "Equ `j'" di %9s _col(`i') "`eq`j''" _c local icol = `icol' + 1 local j = `j' + 1 } di local irow = 1 local icol = 1 while `icol' < `ncats' { tempname b0 local i = 4 scalar `b0' = `b'[1,`icol'] di _col(`i') %9.5f `b0' _c local icol = `icol' + 1 local i = `i' + 4 } di local irow = 1 while `irow' < = `rhsnum' { local icol = 1 while `icol' < `ncats' { local i = 4 scalar `b0' = `b'[`irow'+1,`icol'] di _col(`i') %9.5f `b0' _c local icol = `icol' + 1 local i = `i' + 4 } di local irow = `irow' + 1 } } *===================== * T5: Poisson & Nbreg *===================== di if "`cmd'"=="poisson" | "`cmd'"=="nbreg" { di in g "------------------------------" di in g " Table 5: Oberved Probability " di in g "------------------------------" di di in y " Counts Obs Prob" local i=0 version 5.0 while `i'<`ymax'+1 { /*2*/ quietly gen n`i'=1 if `lhsnm'==`i' quietly recode n`i' 1=1 .=0 quietly sum n`i' di _col(`c1') `i' _col(`c2') %9.5f _result(3) local i = `i' + 1 } } end