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.

1760 lines
57 KiB
Plaintext

*! version 2.5.4 2010-03-26
* remove 244 string length restrictions
// See prvalue_globals.hlp for details on globals created the
// contain information on current results and that contain
// details on the -saved- model.
// TO DO: add error trap if diff with no prior save.
capture program drop prvalue
program define prvalue, rclass
* 2.2.2
local caller = _caller() // which version called prvalue
version 8
tempname rpred seystar tobase tobase2 temp values probs xb xb_hi ///
xb_lo xb_prev xb_dif xb_prev_lo xb_prev_hi xb_prev_lvl ystarhi ///
ystarlo stdp p0 p1 p0_hi p1_hi p0_lo p1_lo p1_hi p0_dif p1_dif ///
p0_prev p1_prev p_prev p_dif Cprobs Cp_prev Cp_dif Cmu Cmu_dif
tempname Cmu_cur Cmu_prev mu mu_hi mu_lo mu_prev mu_prev_hi mu_prev_lo ///
mu_dif mu_dif_hi mu_dif_lo mucount mucount_lo mucount_hi ///
mucount_dif mucount_dif_hi mucount_dif_lo all0 all0_lo all0_hi ///
all0_prev all0_prev_lo all0_prev_hi all0_dif all0_dif_lo ///
all0_dif_hi
// #1 CLASSIFY TYPE OF MODEL
if "`e(cmd)'"=="mprobit" { // 28Feb2005
local io = "typical mprobit"
}
if "`e(cmd)'"=="ztp" { // 18Feb2005
local io = "typical count"
}
if "`e(cmd)'"=="ztnb" {
local io = "typical count"
}
if "`e(cmd)'"=="cloglog" {
local io = "typical binary"
}
if "`e(cmd)'"=="cnreg" {
local io = "typical tobit"
}
if "`e(cmd)'"=="fit" {
local io = "typical regress"
}
if "`e(cmd)'"=="gologit" {
local io = "typical mlogit"
}
if "`e(cmd)'"=="intreg" {
local io = "typical tobit"
}
if "`e(cmd)'"=="logistic" {
local io = "typical binary"
}
if "`e(cmd)'"=="logit" {
local io = "typical binary"
}
if "`e(cmd)'"=="mlogit" {
local io = "typical mlogit"
}
if "`e(cmd)'"=="nbreg" {
local io = "typical count"
}
if "`e(cmd)'"=="ologit" {
local io = "typical ordered"
}
if "`e(cmd)'"=="oprobit" {
local io = "typical ordered"
}
if "`e(cmd)'"=="poisson" {
local io = "typical count"
}
if "`e(cmd)'"=="probit" {
local io = "typical binary"
}
if "`e(cmd)'"=="slogit" {
local io = "typical slogit"
}
if "`e(cmd)'"=="regress" {
local io = "typical regress"
}
if "`e(cmd)'"=="tobit" {
local io = "typical tobit"
}
if "`e(cmd)'"=="zinb" {
local io = "twoeq count"
}
if "`e(cmd)'"=="zip" {
local io = "twoeq count"
}
global PEio "`io'" // global with type of model
local input : word 1 of `io'
local output : word 2 of `io'
if "`io'"=="" {
di in r "prvalue does not work for the last type of model estimated."
exit
}
// #2 PRINTING DEFAULTS
* output columns for printing values
local c_cur = 22
local c_lo = 32
local c_hi = 44
* output columns for printing differences
local c_curD = 22
local c_savD = 32
local c_difD = 42
local c_loD = 51
local c_hiD = 62
* columns for dif header
local c_curDH = 22
local c_savDH = 34
local c_difDH = 43
local c_lvlDH = 52
* formats
local yfmt "%7.0g" // for y values
local pfmt "%7.4f" // for probabilities
// DECODE OPTIONS & SETUP PRINTING PARAMETERS
syntax [if] [in] [, x(passthru) Rest(passthru) LEvel(passthru) ///
MAXcnt(passthru) noLAbel noBAse Brief Save Diff all ///
YStar ept DELta ///
BOOTstrap REPs(passthru) SIze(passthru) DOts match ///
SAving(passthru) NORMal PERCENTile BIAScorrected ///
test ///
LABel(string) ] // 2007-02-17 2.0.6
// #3 LABEL save and diff
* 2007-02-17 add label
if "`save'"=="save" {
if "`label'"!="" {
global PRVlabsav "`label'"
}
else {
global PRVlabsav ""
}
}
if "`diff'"=="diff" {
if "`label'"!="" {
global PRVlabcur "`label'"
}
else {
global PRVlabcur ""
}
}
// #4 DETERMINE METHOD FOR CI & TRAP ERRORS
local errmethod "method cannot be used with the current model."
local errystar "ystar cannot be used with the current model."
* ept invalid except with binary models
if "`ept'"=="ept" & "`output'"!="binary" {
di as error "ept is only valid for binary models."
exit
}
* regress models use ml method
if ("`output'"=="regress" | "`output'"=="tobit" ) ///
& "`delta'"=="" & "`bootstrap'"=="" {
local ystar "ystar"
local mlci "ml"
}
* delta invalid for zip/zinb
if "`input'"=="twoeq" & "`delta'"=="delta" {
di as error "the delta `errmethod'"
exit
}
* delta is the default ci method
if "`ystar'"=="" & "`bootstrap'"=="" & "`ept'"=="" {
local delta = "delta"
}
* default method for zip and zinb is none
if ("`input'"=="twoeq") & "`bootstrap'"=="" {
local delta ""
}
* no ci for ztp, ztnb, mprobit, slogit
if "`e(cmd)'"=="ztp" | "`e(cmd)'"=="ztnb" | ///
"`e(cmd)'"=="mprobit" | "`e(cmd)'"=="slogit" {
local delta ""
local bootstrap ""
}
* trap boot options with delta, ept and ystar
foreach method in delta ept ystar {
if "``method''"=="`method'" {
local badopt ""
foreach nm in dots match normal percentile biascorrected {
if "``nm''"=="`nm'" {
local badopt "`nm'"
}
}
if "`badopt'"!="" {
di as error ///
"option `badopt' is incompatable with `method' method."
exit
di "ding"
}
}
}
if "`badopt'"!="" {
exit
}
* determine method and make sure only one method specified
local cimethod "default" // ci method
local boottype "" // bootstrap ci type
local boottype2 "none" // short name
local ncimethod = 0
if "`ystar'"=="ystar" {
local cimethod "ml"
local ncimethod = 1
}
if "`delta'"=="delta" {
local cimethod "delta"
local ncimethod = `ncimethod' + 1
}
if "`ept'"=="ept" {
local cimethod "ept"
local ncimethod = `ncimethod' + 1
}
local nboottype = 0
if "`bootstrap'"=="bootstrap" {
local cimethod "bootstrap"
local boottype "percentile method"
local boottype2 "percentile"
local ncimethod = `ncimethod' + 1
if "`percentile'" == "percentile" {
local nboottype = 1
}
if "`normal'" == "normal" {
local boottype2 "normal"
local boottype "normal approximation"
local nboottype = `nboottype' + 1
}
if "`biascorrected'" == "biascorrected" {
local boottype "bias-corrected method"
local boottype2 "biascorrected"
local nboottype = `nboottype' + 1
}
}
if "`ncimethod'" > "1" {
di as error "only one method for computing CIs can be specified."
exit
}
if "`nboottype'" > "1" {
di as error "only one method of computing " ///
"bootstrap CIs can be specified."
exit
}
* ept only with binary models
if "`ept'"!="" & "`output'"!="binary" {
di as error "the ept `errmethod'"
exit
}
* ept invalid with diff
if "`ept'"!="" & "`diff'"=="diff" {
di as error "the ept method does not work with the diff option."
exit
}
* ystar invalid with mlogit, count and gologit
if ("`e(cmd)'"=="mlogit" | "`output'"=="count" ///
| "`e(cmd)'"=="gologit") ///
& "`ystar'"=="ystar" {
di as error "`errystar'"
exit
}
* delta invalid with regress, tobit, intreg, cnreg, zip or zinb
if ("`output'"=="regress" | "`output'"=="tobit" ///
| "`input'"=="twoeq") & "`delta'"=="delta" {
di as error "the delta `errmethod'"
exit
}
* bootstrap does not work with cnreg, intreg, regress or tobit
if ("`output'"=="regress" | "`output'"=="tobit") ///
& "`bootstrap'"=="bootstrap" {
di as error "the bootstrap `errmethod'"
exit
}
* dummy out methods since cis not computed
if "`e(cmd)'"=="ztp" | "`e(cmd)'"=="ztnb" {
global pecimethod ""
local cimethod ""
}
* if diff, methods must match
if "`diff'" == "diff" {
local cimethodprior : word 1 of $pecimethod
* 2.1.8 - no CIs for mprobit - 2009-03-14
if "`e(cmd)'"=="slogit" | "`e(cmd)'"=="mprobit"{
local cimethod "`cimethodprior'"
}
* 26Jun2006 rule does not apply for regress which only uses ml
if ("`cimethod'" != "`cimethodprior'") & ("`e(cmd)'"!="regress") {
di as error "the methods used for save and dif must be the same."
exit
}
}
* info on outcomes
if "`output'" != "regress" & "`output'" != "tobit" {
_pecats
local ncats = r(numcats)
local catnms8 `r(catnms8)'
local catvals `r(catvals)'
local catnms `r(catnms)'
}
* check for errors with diff
if "`diff'"=="diff" {
local priorcmd : word 1 of $petype
if "`priorcmd'" != "`e(cmd)'" {
di in r "saved results were not estimated with `e(cmd)'"
exit
}
if "$PRVdepv" != "`e(depvar)'" {
di in r ///
"the dependent variable has changed from the saved model."
exit
}
if "`output'"=="ordered" | "`output'"=="mlogit" {
if "`catvals'"!="$PRVvals" {
di in r "category values for saved and current " /*
*/ "dependent variable do not match"
exit
}
}
}
// #5 GET INFO ON OUTCOME AND BASE VALUES
* info on base values
_pebase `if' `in' , `x' `rest' `choices' `all'
mat `tobase' = r(pebase)
if "`input'"=="twoeq" {
mat `tobase2' = r(pebase2)
}
if "`input'"=="typical" {
mat PE_in = `tobase'
}
if "`input'"=="twoeq" {
mat PE_in = `tobase'
mat PE_in2 = `tobase2'
}
// #6 COMPUTE PREDICTIONS
* 2008-07-10 // clear globals to hold se for differences
global pedifsey = . // clear global that contains ml se of difference
global pedifsemu = . // clear global that contains ml se of difference
matrix def pedifsep = J(1,1,.)
global pesemu = .
_pepred, `level' `maxcnt'
// #7 COLLECT INFORMATION AND SAVE TO GLOBALS
local maxc = r(maxcount)
local lvl = r(level)
* Backup information in returns before calling _pecollect
* since _pecollect destroys current information. Then,
* after calling _pecollect, restore the original returns.
*
* 1) drop stored returns; 2) save returns from pepred
* 3) restore them after z_pecollect; 4) drop returns
* 5) save from pepred; 6) restore and keep them saved
capture _return drop pepred
_return hold pepred
_return restore pepred, hold
global pecimethod "`cimethod' `boottype2'"
* stores information on current model and differences to globals
_pecollect, inout("`io'") level(`lvl') maxcount(`maxc') `diff' `reps'
*_return restore pepred // changed bj 22jul2008 for use with estout
*_return drop _all // changed bj 22jul2008 for use with estout
*_return hold pepred // changed bj 22jul2008 for use with estout
_return restore pepred, hold
// #8 COMPUTE CONFIDENCE INTERVALS
global pecimethod "ml none" // by default, use ml method
if "`input'"=="twoeq" {
global pecimethod "default"
}
if "`ept'" == "ept" {
local cimethod "end-point transformation"
* ci's were computed by _pepred
global pecimethod "ept none"
}
if "`delta'" == "delta" {
local cimethod "delta"
global pecimethod "delta none"
* compute ci's using delta method
* 0.2.1 _pecidelta, `save' `diff'
_pecidelta, `save' `diff' caller(`caller') // 0.2.2
}
if "`bootstrap'"=="bootstrap" {
local cimethod "bootstrap"
global pecimethod "bootstrap `boottype2'"
* compute ci's using bootstrap
_peciboot, `x' `rest' `all' `save' ///
`diff' `reps' `size' `dots' `match' `saving'
matrix peinfo[1,10] = r(Nrepsnomis) // # of completed reps
}
* ystar with diff
if "`ystar'"=="ystar" & "`diff'"=="diff" {
* ystar only defined for these model types
if "`output'"=="binary" | "`output'"=="tobit" ///
| "`output'"=="regress" | "`e(cmd)'"=="ologit" ///
| "`e(cmd)'"=="oprobit" {
local cimethod "ystar"
global pecimethod "ystar none"
* compute ml ci of difference
_peciml
_return restore pepred
} // if models for ystar
} // ystar for difference
// #9 NOT USED
// #10 OUTPUT HEADER
local level = peinfo[1,3] // 95 not .95
local max_i = peinfo[1,2] - 1 // # of categories - 1
di
if "`diff'"=="" {
di in y "`e(cmd)'" in g ": Predictions for " ///
in y "`e(depvar)'"
}
if "`diff'"=="diff" {
di in y "`e(cmd)'" in g ": Change in Predictions for " ///
in y "`e(depvar)'"
}
if "`brief'"=="" {
if "`cimethod'" == "ept" {
di in g _n "Confidence intervals using end-point transformations"
}
else if "`cimethod'" == "delta" {
di in g _n "Confidence intervals by delta method"
}
else if "`cimethod'"=="bootstrap" {
di in g _n "Bootstrap confidence intervals using `boottype'" // 2.1.6
}
} // not brief
if "`cimethod'"=="bootstrap" {
di in g "(" peinfo[1,10] " of " peinfo[1,9] ///
" replications completed)"
}
// #11 PUT SELECTED METHOD-TYPE OF CI INTO MATRIX TO PRINT
tempname ciupper cilower
* by default, this will be percentile with boot
mat def `ciupper' = peupper
mat def `cilower' = pelower
if "`cimethod'"=="bootstrap" {
* if percentile, already in peupper/lower
if "`normal'" == "normal" {
mat def `ciupper' = peupnorm
mat def `cilower' = pelonorm
* put selected method into peupper and lower
mat def peupper = peupnorm
mat def pelower = pelonorm
}
if "`biascorrected'" == "biascorrected" {
mat def `ciupper' = peupbias
mat def `cilower' = pelobias
* put selected method into peupper and lower
mat def peupper = peupbias
mat def pelower = pelobias
}
}
//
// PRINT RESULTS
//
// #12 REGRESS & TOBIT ROUTINES
if "`output'" == "tobit" | "`output'" == "regress" {
sca `xb' = pepred[3,1]
sca `xb_lo' = `cilower'[3,1]
sca `xb_hi' = `ciupper'[3,1]
sca `stdp' = peinfo[1,8] // se(xb)
return scalar xb = `xb'
return scalar xb_lo = `xb_lo'
return scalar xb_hi = `xb_hi'
return local level `level'
* 2008-06-15 r(pred)
matrix def `rpred' = J(1,4,.)
matrix rownames `rpred' = ystar
matrix colnames `rpred' = ystar LB UB Category
matrix `rpred'[1,1] = `xb'
matrix `rpred'[1,2] = `xb_lo'
matrix `rpred'[1,3] = `xb_hi'
local out "y"
local add 0
if "`output'"=="tobit" {
local out "y*"
local add 1
}
PRTyciH `c_lo' `level' 1
PRTy 2 "Predicted `out'" `yfmt' `c_cur' `xb'
PRTyci `yfmt' `c_lo' `level' `xb_lo' `c_hi' `xb_hi'
if "`diff'"=="diff" {
sca `xb_prev' = pepred[5,1]
local skip = 8 + `add'
PRTy `skip' "Saved" `yfmt' `c_cur' `xb_prev'
PRTyci `yfmt' `c_lo' `level' _PRVsav[1,3] ///
`c_hi' _PRVsav[1,4]
local skip = 3 + `add'
PRTy `skip' "Difference" `yfmt' `c_cur' `xb'-`xb_prev'
PRTyci `yfmt' `c_lo' `level' `cilower'[7,1] ///
`c_hi' `ciupper'[7,1]
* 2008-07-10 r(pred) for dif
matrix def `rpred' = J(1,4,.)
matrix rownames `rpred' = ystar
matrix colnames `rpred' = Dystar LB UB Category
matrix `rpred'[1,1] = `xb'-`xb_prev'
matrix `rpred'[1,2] = `cilower'[7,1]
matrix `rpred'[1,3] = `ciupper'[7,1]
} // if diff and regress/tobit
if "`save'"=="`save'" {
mat _PRVsav = `xb', `stdp', `xb_lo', `xb_hi', `level'
mat colnames _PRVsav = xb stdp xb_lo xb_hi level
}
} // end of tobit and regress
// #13 BINARY OUTPUT
if "`output'" == "binary" {
sca `stdp' = peinfo[1,8]
sca `xb' = pepred[3,1]
sca `xb_lo' = `cilower'[3,1]
sca `xb_hi' = `ciupper'[3,1]
foreach c in 0 1 {
local c1 = `c' + 1
sca `p`c'' = pepred[2,`c1']
}
sca `p0_hi' = `ciupper'[2,1]
sca `p1_hi' = `ciupper'[2,2]
sca `p0_lo' = `cilower'[2,1]
sca `p1_lo' = `cilower'[2,2]
return scalar xb = `xb'
return scalar xb_lo = `xb_lo'
return scalar xb_hi = `xb_hi'
return local level `level'
return scalar p0 = `p0'
return scalar p1 = `p1'
return scalar p0_hi = `p0_hi'
return scalar p0_lo = `p0_lo'
return scalar p1_hi = `p1_hi'
return scalar p1_lo = `p1_lo'
if "`save'"=="save" {
mat _PRVsav = `xb', `stdp', `p1', `xb_lo', `xb_hi', `level'
mat colnames _PRVsav = xb stdp p1 xb_lo xb_hi level
}
// #14 BINARY with ystar option
if "`ystar'"=="ystar" {
PRTyciH `c_lo' `level' 1
PRTy 2 "Predicted y*" `yfmt' `c_cur' `xb'
PRTyci `yfmt' `c_lo' `level' `xb_lo' ///
`c_hi' `xb_hi'
* 2008-06-15 r(pred) for ystar
matrix def `rpred' = J(1,4,.)
matrix rownames `rpred' = ystar
matrix colnames `rpred' = ystar LB UB Category
matrix `rpred'[1,1] = `xb'
matrix `rpred'[1,2] = `xb_lo'
matrix `rpred'[1,3] = `xb_hi'
if "`diff'"=="diff" {
sca `xb_dif' = pepred[7,1]
PRTy 9 "Saved" `yfmt' `c_cur' pepred[5,1]
PRTyci `yfmt' `c_lo' `level' _PRVsav[1,4] ///
`c_hi' _PRVsav[1,5]
PRTy 4 "Difference" `yfmt' `c_cur' `xb_dif'
PRTyci `yfmt' `c_lo' `level' `cilower'[7,1] ///
`c_hi' `ciupper'[7,1]
* 2008-07-10 r(pred) for dif
matrix def `rpred' = J(1,4,.)
matrix rownames `rpred' = ystar
matrix colnames `rpred' = Dystar LB UB Category
matrix `rpred'[1,1] = `xb_dif'
matrix `rpred'[1,2] = `cilower'[7,1]
matrix `rpred'[1,3] = `ciupper'[7,1]
} // diff
} // binary ystar option
// #15 BINARY - not ystar
else { // binary: not ystar
* labels for outcomes
if "`label'"!="nolabel" {
local p0lab : word 1 of `catnms8'
}
else {
local p0lab : word 1 of `catvals'
}
if "`label'"!="nolabel" {
local p1lab : word 2 of `catnms8'
}
else {
local p1lab : word 2 of `catvals'
}
* 2008-06-15 r(pred) for probabilities
matrix def `rpred' = J(2,4,.)
matrix rownames `rpred' = `catnms'
matrix colnames `rpred' = Prob LB UB Category
matrix `rpred'[1,1] = `p0'
matrix `rpred'[1,2] = `p0_lo'
matrix `rpred'[1,3] = `p0_hi'
matrix `rpred'[1,4] = 0
matrix `rpred'[2,1] = `p1'
matrix `rpred'[2,2] = `p1_lo'
matrix `rpred'[2,3] = `p1_hi'
matrix `rpred'[2,4] = 1
if "`diff'"=="diff" {
sca `p1_prev' = pepred[4,2]
sca `p0_prev' = 1 - `p1_prev'
sca `p1_dif' = `p1' - `p1_prev'
sca `p0_dif' = `p0' - `p0_prev'
local p1diflo = `cilower'[6,2]
local p1difhi = `ciupper'[6,2]
local p0diflo = `cilower'[6,1]
local p0difhi = `ciupper'[6,1]
* 2.0.7
PRTdH `c_curDH' `c_savDH' `c_difDH' $PRVlabsav $PRVlabcur
PRTdciH `c_lvlDH' `level'
foreach v in 1 0 {
PRTd 2 "Pr(y=`p`v'lab'|x)" `pfmt' `c_curD' `p`v'' ///
`c_savD' `p`v'_prev' `c_difD' `p`v'_dif'
PRTdci `pfmt' `c_loD' `p`v'diflo' ///
`c_hiD' `p`v'difhi'
}
* 2008-07-10 r(pred) for dif
matrix def `rpred' = J(2,4,.)
matrix rownames `rpred' = `catnms'
matrix colnames `rpred' = DProb LB UB Category //! changed bj 22jul2008
matrix `rpred'[1,1] = `p0_dif'
matrix `rpred'[1,2] = `p0diflo'
matrix `rpred'[1,3] = `p0difhi'
matrix `rpred'[1,4] = 0
matrix `rpred'[2,1] = `p1_dif'
matrix `rpred'[2,2] = `p1diflo'
matrix `rpred'[2,3] = `p1difhi'
matrix `rpred'[2,4] = 1
} // binary dif in prob
else { // binary - not difference
PRTyciH `c_lo' `level' 1
foreach v in 1 0 {
PRTy 2 "Pr(y=`p`v'lab'|x)" `pfmt' `c_cur' `p`v''
PRTyci `pfmt' `c_lo' `level' `p`v'_lo' ///
`c_hi' `p`v'_hi'
}
} // not difference
} // not ystar
} // binary
// #16 ORDINAL OUTCOMES
if "`output'" == "ordered" {
*if "`brief'" == "brief" { di }
sca `xb' = pepred[3,1]
sca `xb_lo' = `cilower'[3,1]
sca `xb_hi' = `ciupper'[3,1]
sca `stdp' = peinfo[1,8]
return scalar xb = `xb'
return scalar xb_lo = `xb_lo'
return scalar xb_hi = `xb_hi'
return local level `level'
* 2008-06-15 r(pred) for ystar
if "`ystar'"=="ystar" {
matrix def `rpred' = J(1,4,.)
matrix rownames `rpred' = ystar
matrix colnames `rpred' = ystar LB UB Category
matrix `rpred'[1,1] = `xb'
matrix `rpred'[1,2] = `xb_lo'
matrix `rpred'[1,3] = `xb_hi'
}
* 2008-06-15 r(pred) for prob
else {
matrix def `rpred' = J(`ncats',4,.)
matrix rownames `rpred' = `catnms'
matrix colnames `rpred' = Prob LB UB Category
}
* cycle though categories get probabilities etc.
local i = 1
if "`diff'" != "diff" {
PRTyciH `c_lo' `level' 1
}
while `i' <= `ncats' {
* get labels
local p`i'val : word `i' of `catvals'
mat `values' = nullmat(`values') \ `p`i'val'
local p`i'lab : word `i' of `catnms8'
local labdisp "`p`i'val'"
if "`label'"!="nolabel" {
local labdisp "`p`i'lab'"
}
* get probability
tempname p`i'
sca `p`i'' = pepred[2,`i']
mat `probs' = nullmat(`probs') \ `p`i''
* not diff and prob
if "`ystar'"=="" & "`diff'"=="" {
PRTy 5 "Pr(y=`labdisp'|x)" `pfmt' `c_cur' `p`i''
PRTyci `pfmt' `c_lo' `level' `cilower'[2,`i'] ///
`c_hi' `ciupper'[2,`i']
}
* 2008-06-15 r(pred) add prob
if "`ystar'"!="ystar" {
matrix `rpred'[`i',1] = `p`i''
matrix `rpred'[`i',2] = `cilower'[2,`i']
matrix `rpred'[`i',3] = `ciupper'[2,`i']
matrix `rpred'[`i',4] = `p`i'val'
}
* dif and prob
if "`ystar'"=="" & "`diff'"=="diff" {
if "`i'" == "1" { // header
PRTdH `c_curDH' `c_savDH' `c_difDH'
PRTdciH `c_lvlDH' `level'
}
PRTd 5 "Pr(y=`labdisp'|x)" `pfmt' `c_curD' `p`i'' ///
`c_savD' pepred[4,`i'] `c_difD' pepred[6,`i']
PRTdci `pfmt' `c_loD' `cilower'[6,`i'] ///
`c_hiD' `ciupper'[6,`i']
* 2008-07-10 r(pred) for dif \\ ord and prob
matrix colnames `rpred' = DProb LB UB Category
matrix `rpred'[`i',1] = pepred[6,`i']
matrix `rpred'[`i',2] = `cilower'[6,`i']
matrix `rpred'[`i',3] = `ciupper'[6,`i']
matrix `rpred'[`i',4] = `p`i'val'
}
local i = `i' + 1
} // looping over categories
* save before return because return destroys matrices
if "`save'"=="save" {
mat _PRVsav = `xb', `stdp', `xb_lo', `xb_hi', `level'
mat colnames _PRVsav = xb stdp xb_lo xb_hi level
global PRVvals = "`catvals'"
mat _PRVp = `probs'
}
return matrix values `values'
return matrix probs `probs'
* ystar, not prob
if "`ystar'"=="ystar" {
if "`diff'"=="diff" {
PRTyciH `c_lo' `level' 1
}
PRTy 5 "Predicted y*" `yfmt' `c_cur' `xb'
PRTyci `yfmt' `c_lo' `level' `xb_lo' ///
`c_hi' `xb_hi'
if "`diff'"=="diff" {
sca `xb_prev' = pepred[5,1]
PRTy 5 "Saved" `yfmt' `c_cur' `xb_prev'
PRTyci `yfmt' `c_lo' `level' _PRVsav[1,3] ///
`c_hi' _PRVsav[1,4]
PRTy 5 "Difference" `yfmt' `c_cur' `xb'-`xb_prev'
PRTyci `yfmt' `c_lo' `level' `cilower'[7,1] ///
`c_hi' `ciupper'[7,1]
* 2008-07-10 r(pred) for dif
matrix def `rpred' = J(1,4,.)
matrix rownames `rpred' = ystar
matrix colnames `rpred' = Dystar LB UB Category
matrix `rpred'[1,1] = `xb'-`xb_prev'
matrix `rpred'[1,2] = `cilower'[7,1]
matrix `rpred'[1,3] = `ciupper'[7,1]
} // diff for ystar
} // end of ystar output
} // ordinal
// #17 NOMINAL OUTPUT
if "`output'" == "mlogit" | "`output'" == "mprobit" | "`output'" == "slogit" {
* 2008-06-15 r(pred)
matrix def `rpred' = J(`ncats',4,.)
matrix rownames `rpred' = `catnms'
matrix colnames `rpred' = Prob LB UB Category
if "`diff'"=="diff" {
* 2008-07-10 r(pred) for dif
matrix colnames `rpred' = DProb LB UB Category
PRTdH `c_curDH' `c_savDH' `c_difDH'
* 2.1.8 - no ci for mprobit - 2009-03-14
if "`output'"!="slogit" & "`output'"!="mprobit" { // no ci for slogit or mprobit
PRTdciH `c_lvlDH' `level'
}
else {
di
}
}
else {
if "`output'"=="mlogit" {
PRTyciH `c_lo' `level' 1
}
else {
di
}
}
* cycle through each category
local i = 1
while `i' <= `ncats' {
* get actual category value
local p`i'val : word `i' of `catvals'
mat `values' = nullmat(`values') \ `p`i'val'
*get label
local p`i'lab : word `i' of `catnms8'
local labdisp "`p`i'val'"
if "`label'"!="nolabel" {
local labdisp "`p`i'lab'"
}
* get probability computed by _pepred and stored in r()
tempname p`i'
sca `p`i'' = pepred[2,`i']
mat `probs' = nullmat(`probs') \ `p`i''
if "`diff'"=="" {
PRTy 2 "Pr(y=`labdisp'|x)" `pfmt' `c_cur' `p`i''
if "`output'"=="mlogit" {
PRTyci `pfmt' `c_lo' `level' `cilower'[2,`i'] ///
`c_hi' `ciupper'[2,`i']
}
else {
di
}
} // nominal: no diff
* 2008-06-15 r(pred) add prob
matrix `rpred'[`i',1] = `p`i''
matrix `rpred'[`i',2] = `cilower'[2,`i']
matrix `rpred'[`i',3] = `ciupper'[2,`i']
matrix `rpred'[`i',4] = `p`i'val'
if "`diff'"=="diff" {
PRTd 2 "Pr(y=`labdisp'|x)" `pfmt' `c_curD' `p`i'' ///
`c_savD' pepred[4,`i'] `c_difD' pepred[6,`i']
* 2008-07-10 r(pred) for dif
matrix `rpred'[`i',1] = pepred[6,`i']
matrix `rpred'[`i',4] = `p`i'val'
* 2.1.8 - no ci for mprobit - 2009-03-14
if "`output'"!="slogit" & "`output'"!="mprobit" { // no ci for slogit or mprobit
PRTdci `pfmt' `c_loD' `cilower'[6,`i'] ///
`c_hiD' `ciupper'[6,`i']
* 2008-07-10 r(pred) for dif
matrix `rpred'[`i',2] = `cilower'[6,`i']
matrix `rpred'[`i',3] = `ciupper'[6,`i']
}
else {
di
}
} // nominal - diff
local i = `i' + 1
}
if "`save'"=="save" {
global PRVvals = "`catvals'"
mat _PRVp = `probs'
}
return matrix values `values'
return matrix probs `probs'
} // mlogit
// #18 COUNT - nbreg and poisson
if "`e(cmd)'"=="poisson" | "`e(cmd)'"=="nbreg" {
sca `mu' = pepred[3,2]
sca `stdp' = peinfo[1,8]
tempname plo_dif phi_dif
sca `mu_lo' = `cilower'[3,2]
sca `mu_hi' = `ciupper'[3,2]
return local level `level'
return scalar mu = `mu'
return scalar mu_lo = `mu_lo'
return scalar mu_hi = `mu_hi'
return local level `level'
* 2008-06-15 r(pred) for mu and probs
local npred = 1 + `max_i' + 1
matrix def `rpred' = J(`npred',4,.)
local rnm "mu"
forvalues i = 0(1)`max_i' {
local rnm "`rnm' `i'"
}
matrix rownames `rpred' = `rnm'
matrix colnames `rpred' = Predict LB UB Category
matrix `rpred'[1,1] = `mu'
matrix `rpred'[1,2] = `mu_lo'
matrix `rpred'[1,3] = `mu_hi'
if "`diff'" != "diff" {
PRTyciH `c_lo' `level' 1
PRTy 2 "Rate" `yfmt' `c_cur' `mu'
PRTyci `yfmt' `c_lo' `level' `mu_lo' ///
`c_hi' `mu_hi'
} // not diff
if "`diff'"=="diff" {
PRTdH `c_curDH' `c_savDH' `c_difDH'
PRTdciH `c_lvlDH' `level'
sca `mu_prev' = _PRVsav[1,1]
sca `mu_dif' = `mu' - `mu_prev'
sca `mu_dif_hi' = `ciupper'[7,2]
sca `mu_dif_lo' = `cilower'[7,2]
PRTd 2 "Rate" `yfmt' `c_curD' `mu' ///
`c_savD' `mu_prev' `c_difD' `mu_dif'
PRTdci `pfmt' `c_loD' `mu_dif_lo' ///
`c_hiD' `mu_dif_hi'
* 2008-07-10 r(pred) for dif
matrix rownames `rpred' = `rnm'
matrix colnames `rpred' = DPredict LB UB Category
matrix `rpred'[1,1] = `mu_dif'
matrix `rpred'[1,2] = `mu_dif_lo'
matrix `rpred'[1,3] = `mu_dif_hi'
} // diff
*cycle from 0 to maximum desired count
local i = 0
local isodd = 0
while `i' <= `max_i' { // loop through outcome values
local isodd = abs(`isodd' - 1)
mat `values' = nullmat(`values') \ `i'
tempname p`i' p_lo`i' p_hi`i' lo hi
local i1 = `i' + 1
sca `p`i'' = pepred[2,`i1']
sca `p_hi`i'' = `ciupper'[2,`i1']
sca `p_lo`i'' = `cilower'[2,`i1']
* 2008-06-15 r(pred)
local irow = `i' + 2
matrix `rpred'[`irow',1] = `p`i''
matrix `rpred'[`irow',2] = `p_lo`i''
matrix `rpred'[`irow',3] = `p_hi`i''
matrix `rpred'[`irow',4] = `i'
mat `probs' = nullmat(`probs') \ `p`i''
if "`diff'"=="" {
PRTy 2 "Pr(y=`i'|x)" `pfmt' `c_cur' `p`i''
PRTyci `pfmt' `c_lo' `level' `p_lo`i'' ///
`c_hi' `p_hi`i''
}
else { // if differnece
sca `p_prev' = _PRVp[`i'+1, 1]
sca `p_dif' = `p`i''-`p_prev'
sca `p_prev' = pepred[4,`i'+1]
sca `p_dif' = pepred[6,`i'+1]
sca `plo_dif' = `cilower'[6,`i'+1]
sca `phi_dif' = `ciupper'[6,`i'+1]
PRTd 2 "Pr(y=`i'|x)" `pfmt' `c_curD' `p`i'' ///
`c_savD' `p_prev' `c_difD' `p_dif'
PRTdci `pfmt' `c_loD' `plo_dif' ///
`c_hiD' `phi_dif'
* 2008-06-15 r(pred)
matrix `rpred'[`irow',1] = `p_dif''
matrix `rpred'[`irow',2] = `plo_dif'
matrix `rpred'[`irow',3] = `phi_dif'
}
local i = `i' + 1
} // loop through outcome values
if "`save'"=="save" {
mat _PRVsav = `mu', `stdp'
mat colnames _PRVsav = mu stdp
mat _PRVp = `probs'
}
return matrix values `values'
return matrix probs `probs'
} // count output
// #19 COUNT - zip and zinb
if "`input'"=="twoeq" {
sca `mu' = pepred[3,2] // overall rate E(y) - 15Apr2005
sca `mu_lo' = `cilower'[3,2]
sca `mu_hi' = `ciupper'[3,2]
return scalar mu = `mu'
* mu from count portion of zi models - 15Apr2005
sca `mucount' = pepred[3,3] // rate in count portion of model E(y|~always0)
sca `mucount_lo' = `cilower'[3,3] // currently not computed
sca `mucount_hi' = `ciupper'[3,3] // currently not computed
sca `stdp' = peinfo[1,8]
return scalar mucount = `mucount'
return local level `level'
* 2008-06-15 r(pred) for mu and probs
local npred = 2 + `max_i' + 1
matrix def `rpred' = J(`npred',4,.)
* 2008-07-10
local rnm "Ey All0 0|xy"
forvalues i = 1(1)`max_i' {
local rnm "`rnm' `i'|x"
}
matrix rownames `rpred' = `rnm'
matrix colnames `rpred' = Predict LB UB Category
matrix `rpred'[1,1] = `mu'
matrix `rpred'[1,2] = `mu_lo'
matrix `rpred'[1,3] = `mu_hi'
* 2008-07-10 matrix `rpred'[2,1] = `mucount'
* relabel Rate to Expected y - 15Apr2005
if "`diff'"!="diff" & "`bootstrap'"=="bootstrap" { // ci with boot
PRTyciH `c_lo' `level' 1
PRTy 2 "Expected y" `yfmt' `c_cur' `mu'
PRTyci `yfmt' `c_lo' `level' `mu_lo' ///
`c_hi' `mu_hi'
}
else if "`diff'"!="diff" & "`bootstrap'"!="bootstrap" {
di
PRTy 2 "Expected y" `yfmt' `c_cur' `mu'
di
}
* print E(y)
if "`diff'"=="diff" {
sca `mu_prev' = pepred[5,2]
sca `mu_dif' = pepred[7,2]
PRTdH `c_curDH' `c_savDH' `c_difDH'
if "`brief'"=="brief" & "`bootstrap'"!="bootstrap" {
di
}
if "`bootstrap'"=="bootstrap" {
*PRTdH `c_curDH' `c_savDH' `c_difDH'
PRTdciH `c_lvlDH' `level'
sca `mu_dif_hi' = `ciupper'[7,2]
sca `mu_dif_lo' = `cilower'[7,2]
PRTd 2 "Expected y" `yfmt' `c_curD' `mu' ///
`c_savD' `mu_prev' `c_difD' `mu_dif'
PRTdci `pfmt' `c_loD' `mu_dif_lo' ///
`c_hiD' `mu_dif_hi'
* 2008-07-10 r(pred) for dif
matrix `rpred'[1,2] = `mu_dif_lo'
matrix `rpred'[1,3] = `mu_dif_hi'
}
else {
di
PRTd 2 "Expected y" `pfmt' `c_curD' `mu' ///
`c_savD' `mu_prev' `c_difD' `mu_dif'
di
}
* 2008-07-10 r(pred) for dif
matrix colnames `rpred' = DPredict LB UB Category
matrix `rpred'[1,1] = `mu_dif'
} // dif for rate
sca `all0' = pepred[3,4]
sca `all0_hi' = `ciupper'[3,4]
sca `all0_lo' = `cilower'[3,4]
* 2008-07-10 r(pred) for dif
matrix `rpred'[2,1] = `all0'
matrix `rpred'[2,2] = `all0_lo'
matrix `rpred'[2,3] = `all0_hi'
if "`diff'"=="diff" {
sca `all0_prev' = pepred[5,4]
sca `all0_dif' = pepred[7,4]
* 2008-07-10 r(pred) for dif
matrix `rpred'[2,1] = `all0_dif'
if "`bootstrap'"=="bootstrap" {
sca `all0_dif_hi' = `ciupper'[7,4]
sca `all0_dif_lo' = `cilower'[7,4]
PRTd 2 "Pr(Always0|z)" `pfmt' `c_curD' `all0' ///
`c_savD' `all0_prev' `c_difD' `all0_dif'
PRTdci `pfmt' `c_loD' `all0_dif_lo' ///
`c_hiD' `all0_dif_hi'
* 2008-07-10 r(pred) for dif
matrix `rpred'[2,2] = `all0_dif_lo'
matrix `rpred'[2,3] = `all0_dif_hi'
}
else {
PRTd 2 "Pr(Always0|z)" `pfmt' `c_curD' `all0' ///
`c_savD' `all0_prev' `c_difD' `all0_dif'
di
}
* 2008-07-10 r(pred) for dif
matrix `rpred'[2,1] = `all0_dif'
}
if "`diff'"!="diff" & "`bootstrap'"=="bootstrap" {
PRTy 2 "Pr(Always0|z)" `pfmt' `c_cur' `all0'
PRTyci `pfmt' `c_lo' `level' `all0_lo' ///
`c_hi' `all0_hi'
}
else if "`diff'"!="diff" { // default, no ci
PRTy 2 "Pr(Always0|z)" `pfmt' `c_cur' `all0'
di
}
return scalar always0 = `all0'
* loop from count 0 to maxcount
local i = 0
local isodd = 0
while `i' <= `max_i' {
local given "x"
if "`i'" == "0" {
local given "x,z"
}
mat `values' = nullmat(`values') \ `i'
tempname p`i' p_lo`i' p_hi`i' lo hi
local i1 = `i' + 1
sca `p`i'' = pepred[2,`i1']
mat `probs' = nullmat(`probs') \ `p`i''
* 2008-06-15 r(pred)
local irow = `i' + 3
matrix `rpred'[`irow',1] = `p`i''
matrix `rpred'[`irow',4] = `i'
if "`diff'"=="" {
PRTy 2 "Pr(y=`i'|`given')" `pfmt' `c_cur' `p`i''
if "`cimethod'"=="bootstrap" {
PRTyci `pfmt' `c_lo' `level' `cilower'[2,`i1'] ///
`c_hi' `ciupper'[2,`i1']
}
else {
di
}
}
else { // if differnece
sca `p_prev' = _PRVp[`i'+1, 1]
sca `p_dif' = `p`i''-`p_prev'
sca `p_prev' = pepred[4,`i'+1]
sca `p_dif' = pepred[6,`i'+1]
PRTd 2 "Pr(y=`i'|`given')" `pfmt' `c_curD' `p`i'' ///
`c_savD' `p_prev' `c_difD' `p_dif'
* 2008-07-10 r(pred) for dif
matrix `rpred'[`irow',1] = `p_dif''
if "`cimethod'"=="bootstrap" {
PRTdci `pfmt' `c_loD' `cilower'[6,`i'+1] ///
`c_hiD' `ciupper'[6,`i'+1]
* 2008-07-10 r(pred) for dif
matrix `rpred'[`irow',2] = `cilower'[6,`i'+1]
matrix `rpred'[`irow',2] = `ciupper'[6,`i'+1]
}
else {
di
}
}
local i = `i' + 1
}
if "`save'"=="save" {
mat _PRVsav = `mu', `stdp'
mat colnames _PRVsav = mu stdp
mat _PRVsav = `mu', `stdp', `all0'
mat colnames _PRVsav = mu stdp all0
mat _PRVp = `probs'
}
return matrix values `values'
return matrix probs `probs'
} // count zip and zinb
// #20 COUNT - ztp and ztnb * 18Feb2005
if "`e(cmd)'"=="ztp" | "`e(cmd)'"=="ztnb" {
sca `mu' = pepred[3,2]
return scalar mu = `mu'
sca `Cmu' = peCpred[3,2]
return scalar Cmu = `Cmu'
tempname plo_dif phi_dif
return local level `level'
* 2008-06-15 r(pred) for mu and probs
local npred = 2 + `max_i'
matrix def `rpred' = J(`npred',5,.)
local rnm "mu 0" // changed bj 24jul2008
forvalues i = 1(1)`max_i' {
local rnm "`rnm' `i'"
}
matrix rownames `rpred' = `rnm'
matrix colnames `rpred' = Ucond LB UB Category Cond
matrix `rpred'[1,1] = `mu'
matrix `rpred'[1,5] = `Cmu'
if "`diff'" != "diff" {
local C_cur = `c_cur' + 9
di _n _col(`c_cur') in g " Uncond Cond"
PRTy 2 "Rate" `yfmt' `c_cur' `mu'
di _col(`C_cur') `yfmt' `Cmu'
} // not diff
if "`diff'"=="diff" {
sca `mu_prev' = pepred[5,2]
sca `mu_dif' = pepred[7,2]
sca `Cmu_prev' = peCpred[5,2]
sca `Cmu_dif' = peCpred[7,2]
di
di in g ///
" Unconditional: Conditional:"
di in g ///
" Current Saved Change Current Saved Change "
di in g ///
" Rate:" _col(19) in y `yfmt' `mu' _col(30) `yfmt' `mu_prev' _col(40) `yfmt' `mu_dif' _cont
di _col(51) ///
`yfmt' `Cmu' _col(61) `yfmt' `Cmu_prev' _col(71) `yfmt' `Cmu_dif'
* 2008-07-10 r(pred) for dif
matrix `rpred'[1,1] = `mu_dif'
matrix `rpred'[1,5] = `Cmu_dif'
} // diff
*cycle from 0 to maximum desired count
local i = 0
local isodd = 0
while `i' <= `max_i' { // loop through outcome values
local isodd = abs(`isodd' - 1)
mat `values' = nullmat(`values') \ `i'
tempname p`i' Cp`i'
local i1 = `i' + 1
sca `p`i'' = pepred[2,`i1']
sca `Cp`i'' = peCpred[2,`i1']
mat `probs' = nullmat(`probs') \ `p`i''
mat `Cprobs' = nullmat(`Cprobs') \ `Cp`i''
* 2008-06-15 r(pred)
local irow = `i' + 2
matrix `rpred'[`irow',1] = `p`i''
matrix `rpred'[`irow',5] = `Cp`i''
matrix `rpred'[`irow',4] = `i'
if "`diff'"=="" {
PRTy 2 "Pr(y=`i'|x)" `pfmt' `c_cur' `p`i''
di _col(`C_cur') `pfmt' `Cp`i''
}
else { // if differnece
sca `p_prev' = pepred[4,`i'+1]
sca `p_dif' = pepred[6,`i'+1]
sca `Cp_prev' = peCpred[4,`i'+1]
sca `Cp_dif' = peCpred[6,`i'+1]
di in g " Pr(y=`i'|x)" in y ///
_col(19) `pfmt' `p`i'' _col(30) `pfmt' `p_prev' ///
_col(40) `pfmt' `p_dif' _cont
di _col(51) `pfmt' `Cp`i'' _col(61) `pfmt' `Cp_prev' ///
_col(71) `pfmt' `Cp_dif'
* 2008-07-10 r(pred) for dif
local irow = `i' + 2
matrix `rpred'[`irow',1] = `p_dif'
matrix `rpred'[`irow',5] = `Cp_dif'
matrix `rpred'[`irow',4] = `i'
}
local i = `i' + 1
} // loop through outcome values
return matrix values `values'
return matrix probs `probs'
return matrix Cprobs `Cprobs'
} // ztp and ztnb
//21 OUTPUT COMMON TO ALL MODELS
* print base values
* 2009-03-17 if "`brief'"=="" & "`base'"!="nobase" {
if "`base'"!="nobase" {
* 2009-03-17
if "`input'"=="twoeq" & "`brief'"=="" {
di _n in g "x values for count equation"
}
mat rownames `tobase' = "x="
if "`diff'"=="" {
mat _PEtemp = `tobase'
_peabbv _PEtemp
* 2009-03-17
if "`brief'"=="" {
mat list _PEtemp, noheader
}
}
else {
local tmp1: colnames `tobase'
local tmp2: colnames PRVbase
* 2009-05-10 if "`tmp1'"=="`tmp2'" & length("`tmp1'") < 80 {
* if "`tmp1'"=="`tmp2'" & length("`tmp1'") < 244 { // 2.5.1 2010-01-07
*if "`tmp1'"=="`tmp2'" { // 2.5.3 2010-03-25 experimental
if `: list local(tmp1) == local(tmp2) ' {
mat _PEtemp = (`tobase' \ PRVbase \ (`tobase' - PRVbase))
mat rownames _PEtemp = "Current=" "Saved=" "Diff="
_peabbv _PEtemp
* 2009-03-17
if "`brief'"=="" {
mat list _PEtemp, noheader
}
}
else {
mat rownames `tobase' = "Current="
mat rownames PRVbase = " Saved="
mat _PEtemp = `tobase'
_peabbv _PEtemp
* 2009-03-17
if "`brief'"=="" {
mat list _PEtemp, noheader
}
mat _PEtemp = PRVbase
_peabbv _PEtemp
* 2009-03-17
if "`brief'"=="" {
mat list _PEtemp, noheader
}
}
}
* print base values of binary equation
if "`input'"=="twoeq" {
* 2009-03-17
if "`brief'"=="" {
di _n in g "z values for binary equation"
mat rownames `tobase2' = "z="
}
if "`diff'"=="" {
* 2009-03-15
mat _PEtemp2 = `tobase2'
_peabbv _PEtemp2
* 2009-03-17
if "`brief'"=="" {
mat list _PEtemp2, noheader
}
}
else {
local tmp1: colnames `tobase2'
local tmp2: colnames PRVbase2
* 2.5.0: if "`tmp1'"=="`tmp2'" & length("`tmp1'") < 80 {
* string comparisons are only valid for certain lengths
*if "`tmp1'"=="`tmp2'" & length("`tmp1'") < 244 { // 2.5.1 2010-01-07
*if "`tmp1'"=="`tmp2'" { // 2.5.3 2010-03-25 experimental
if `: list local(tmp1) == local(tmp2) ' {
mat `temp' = (`tobase2' \ PRVbase2 \ (`tobase2' - PRVbase2))
mat rownames `temp' = "Current=" "Saved=" "Diff="
* 2009-03-15
mat _PEtemp2 = `temp'
_peabbv _PEtemp2
* 2009-03-17
if "`brief'"=="" {
mat list _PEtemp2, noheader
}
}
else {
mat rownames `tobase2' = "Current="
mat rownames PRVbase2 = " Saved="
* 2009-03-15
mat _PEtemp2 = `tobase2'
_peabbv _PEtemp2
* 2009-03-17
if "`brief'"=="" {
mat list _PEtemp2, noheader
}
mat _PEtemp2 = PRVbase2
_peabbv _PEtemp2
* 2009-03-17
if "`brief'"=="" {
mat list _PEtemp2, noheader
}
}
}
} /* twoeq */
}
if "`save'"=="save" {
// With the "save" option, the results of the current model
// are placed in globals to be used with a later prvalue, diff
* save information needed for later -prvalue, diff-
global PRVcmd = "`e(cmd)'" // command name
global PRVdepv = "`e(depvar)'" // dependent variable
mat PRVbase = `tobase' // base values
mat rownames PRVbase = "saved="
if "`input'"=="twoeq" {
mat PRVbase2 = `tobase2'
mat rownames PRVbase2 = "saved x"
}
mat PRVprob = pepred[2,1...] // probabilities
mat rownames PRVprob = "saved="
mat PRVmisc = pepred[3,1...] // other predictions
mat rownames PRVmisc = "saved="
mat PRVupper = peupper[2..3,1...] // for pr and misc
mat PRVlower = pelower[2..3,1...] //
mat PRVinfo = peinfo[1,1...] // information on saved model
mat rownames PRVinfo = "saved="
if ("`e(cmd)'"=="ztp" | "`e(cmd)'"=="ztnb") {
mat PRVCpred = peCpred[2,1...]
mat rownames PRVCpred = "saved="
mat PRVCmisc = peCpred[3,1...]
mat rownames PRVCmisc = "saved="
}
} // if save
* 2009-03-15 return r(x) as dif in X if diff
if "`diff'"!="diff" {
return mat x `tobase'
if "`input'"=="twoeq" {
return mat x2 `tobase2'
}
}
*mat list _PEtemp
*mat list _PEtemp2
if "`diff'"=="diff" {
tempname difx
* 2009-05-10
mat `difx' = _PEtemp[3,1...]
mat rownames `difx' = "DiffX"
return mat x `difx'
if "`input'"=="twoeq" {
mat `difx' = _PEtemp2[3,1...]
mat rownames `difx' = "DiffX"
return mat x2 `difx'
}
}
* 2008-07-10 return pred with SE and Zscore
tempname Xz Xs
* if ystar or count, need to reconstruct se for difference
if "`ystar'"=="ystar" { // | "`output'"=="count" {
* hold SE of pred and z value
matrix `Xz' = J(1,2,.)
matrix colnames `Xz' = SE z
* if not diff, use peinfo
local se = peinfo[1,8]
if "`diff'"=="diff" {
local se = $pedifsey
}
matrix `Xz'[1,1] = `se'
matrix `Xz'[1,2] = `rpred'[1,1]/`se'
}
* for probabilities
else {
local Npred = rowsof(`rpred')
* hold SE of pred and z value
matrix `Xz' = J(`Npred',2,.)
matrix colnames `Xz' = SE z
* grab standard errors
capture mat `Xs' = pedifsep
* if not computed, dummy up matrix
if _rc!=0 {
matrix `Xs' = J(`Npred',1,.)
}
local j = 0
if "`output'"=="count" {
local j = 1
if "`diff'"!="diff" {
matrix `Xz'[1,1] = $pesemu
}
else {
matrix `Xz'[1,1] = $pedifsemu
}
matrix `Xz'[1,2] = `rpred'[1,1]/`Xz'[1,1]
}
* loop through predictions and compute z's
local en = `Npred' - `j'
forvalues i = 1(1)`en' {
local i2 = `i' + `j'
local z = `rpred'[`i2',1]/`Xs'[`i',1]
matrix `Xz'[`i2',1] = `Xs'[`i',1]
matrix `Xz'[`i2',2] = `z'
}
}
* add se and z to matrix
if "`e(cmd)'"=="ztp" | "`e(cmd)'"=="ztnb" {
* only ztp and ztnb have cond and uncond, so stick cond at end
matrix `rpred' = `rpred'[1...,1..4],`Xz',`rpred'[1...,5]
}
else {
matrix `rpred' = `rpred',`Xz'
}
return mat pred `rpred'
capture drop pedifsep
capture drop pedifsey
capture drop _PEtemp
* 2009-03-15
capture matrix drop _PEtemp
capture matrix drop _PEtemp2
end // prvalue
//
//22 PRINT ROUTINES
//
// PRTy: value w/o ci
// PRTy skip label fmt c_cur value
capture program drop PRTy
program PRTy
version 8
args skip label fmt c_cur value
di in g _skip(`skip') "`label':" ///
in y `fmt' _col(`c_cur') `value' _continue
end
// PRTyciH: header for ci in difference
// PRTyciH c_lvl level addline
capture program drop PRTyciH
program PRTyciH
version 8
args c_lvl level addline
if `addline' == 1 {
di
}
di _col(`c_lvl') in g " `level'% Conf. Interval"
end
// PRTyci: ci after value
// PRTyci fmt c_lo level value_lo c_hi value_hi
// c_lo column for low; c_hi column for hi
capture program drop PRTyci
program PRTyci
version 8
args fmt c_lo level value_lo c_hi value_hi
di _col(`c_lo') in g "[" ///
in y `fmt' `value_lo' in g "," ///
in y `fmt' _col(`c_hi') `value_hi' in g "]"
end
/* this version puts 90% on each line
program PRTyci
version 8
args fmt c_lo level value_lo c_hi value_hi
di _col(`c_lo') in g "`level'% CI (" ///
in y `fmt' `value_lo' in g "," ///
in y `fmt' _col(`c_hi') `value_hi' in g ")"
end
*/
// PRTdH: header for difference
// PRTdH c_cur c_sav c_dif
capture program drop PRTdH
program PRTdH
version 8
*args c_cur c_sav c_dif
* 2.0.7
args c_cur c_sav c_dif nmsave nmcurrent
di
* 2.0.6
if "`nmsave'"!="" | "`nmcurrent'"!="" {
* 2.0.7
local lcur : length local nmcurrent
local lcur = `c_cur' + 7 - `lcur'
local lsav : length local nmsave
local lsav = `c_sav' + 5 - `lsav'
di _col(`lcur') in g "`nmcurrent'" ///
_col(`lsav') in g "`nmsave'"
} // 2.0.7
di _col(`c_cur') in g "Current" ///
_col(`c_sav') in g "Saved" ///
_col(`c_dif') in g "Change" _continue
end
// PRTdciH: header for ci in difference
// PRTdciH c_lvl level
capture program drop PRTdciH
program PRTdciH
version 8
args c_lvl level
di _col(`c_lvl') in g "`level'% CI for Change"
end
// PRTd: print difference
// PRTd skip label fmt c_cur v_cur c_sav v_sav c_dif v_dif
capture program drop PRTd
program PRTd
version 8
args skip label fmt c_cur v_cur c_sav v_sav c_dif v_dif
di _skip(`skip') in g "`label':" ///
in y `fmt' _col(`c_cur') `v_cur' ///
in y `fmt' _col(`c_sav') `v_sav' ///
in y `fmt' _col(`c_dif') `v_dif' _continue
end
// PRTdci: print difference
// PRTdci fmt c_lo v_lo c_hi v_lo
capture program drop PRTdci
program PRTdci
version 8
args fmt c_lo v_lo c_hi v_hi
di in g _col(`c_lo') "[" ///
in y `fmt' `v_lo' in g "," ///
in y `fmt' _col(`c_hi') `v_hi' in g "]"
end
exit
15Apr2005 - correct error for zip and zinb
: see changes in _pepred, _pecollect, _peciboot
: E(y) was used incorrectly rather than E(y|~always0).
_pepred[3|5|7, 2] used to be mu defined as rate in
count portion of model E(y|not always 0)
_pepred[3|5|7, 2] now is the overall rate E(y); listed as simply mu.
_pepred[3|5|7, 3] rate in count portion of model E(y|not always 0);
listed as mucount.
To simplify changes in _peciboot, E(y) is referred to as mu;
E(y|~always0) is mucount.
* version 0.2.2b 050218 jf slogit
* version 2.0.0 07Apr2005
* version 2.0.1 12Apr2005 fix save dif for slogit; no ci in slogit dif
* version 2.0.2 13Apr2005
* version 2.0.3 15Apr2005 fix rate used for zip/zinb (see notes at end)
* version 2.0.4 15Apr2005 fix label for Always 0
* version 2.0.5 24May2006 - fix base values when multiple diffs
* version 2.1.0 2007-03-04 - add labels() & save-dif improvement
* version 2.1.1 2008-06-15
* - add returns in r()
* version 2.1.2 2008-07-09 r(pred) for dif
* - returns if diff
* version 2.1.3 2008-07-09
* - return predSE -- standard error
* version 2.1.4 2008-07-10
* - fix se for ystar
* version 2.1.6 2008-10-23
* - change bootstrapped to bootstrap
* version 2.1.5bj bj 22jul2008 for use with esttab
* version 2.1.5 2008-07-11
* - fix typo in tempname
* version 2.1.7 2009-03-14
* - merge 2.1.6 with changes for estout
* version 2.1.8 2009-03-14
* - mprobit does not compute CI
* version 2.1.9 2009-03-15
* - dif returns difference of X's
* version 2.2.0 2009-03-17
* - fixed bug with brief after diff caused by 2.1.9
* - estout needed information saved when brief was off, so
* only block printing in option is brief
* version 2.2.1 2009-05-10
* - remove if "`tmp1'"=="`tmp2'" & length("`tmp1'") < 80 {
* version 2.2.2 - as of 2009-09-18
* - fix for mlogit under stata 11
* version 2.5.0 2009-10-28 jsl
* - stata 11 update for returns from -mlogit-
* version 2.5.1 2010-01-07 jsl
* - change limit on long var lists to 244 from 80
* version 2.5.2 2010-01-15 jsl
* change x_peciboot to _peciboot
* version 2.5.3 2010-03-25 -- never posted
* explore removing length restrictions