*! 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