You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
541 lines
15 KiB
Plaintext
541 lines
15 KiB
Plaintext
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
|