*! version 2.5.0 2009-10-28 jsl * - stata 11 update for returns from -mlogit- window control clear capture program drop mlogview capture program drop _mlgetv capture program drop _mlinit capture program drop _mlplot capture program drop _mlnxt7 capture program drop _mlprnt capture program drop _mlhlp program define mlogview if "`e(cmd)'"!="mlogit" { di in r "mlogview must be run after mlogit" exit } version 6.0 *=> Initialize global mlopts "`*'" _mlinit global ml_lbl "" *=> List variables to plot local r1 = 2 local c1 = 5 local d1 = 12 * c's are columns for radio buttons local c2 = `c1' + 55 local c3 = `c2' + 20 local c4 = `c3' + 28 local c5 = `c4' + 24 * 18Nov2005 - add button for range local c6 = `c5' + 36 * global ml_wi "Select Variables Select Amount of Change" * window control static ml_wi `c1' `r1' 146 9 global ml_wi "Select Variables" window control static ml_wi `c1' `r1' 146 9 global ml_wi2 "Select Amount of Change" local c12 = `c1' + 56 window control static ml_wi2 `c12' `r1' 146 9 local r1 = `r1' + `d1' - 1 * var#1 local n1 = 1 window control scombo ml_rhsnm `c1' `r1' 50 50 ml_v`n1' window control radbegin "+1" `c2' `r1' 20 9 ml_v`n1'r window control radio "+SD" `c3' `r1' 24 9 ml_v`n1'r window control radio "0/1" `c4' `r1' 24 9 ml_v`n1'r * 18Nov2005 - add Range option * window control radend "Don't Plot" `c5' `r1' 40 9 ml_v`n1'r window control radio "Range" `c5' `r1' 32 9 ml_v`n1'r window control radend "Don't Plot" `c6' `r1' 40 9 ml_v`n1'r local r1 = `r1' + `d1' * var#2 local n1 = 2 window control scombo ml_rhsnm `c1' `r1' 50 50 ml_v`n1' window control radbegin "+1" `c2' `r1' 20 9 ml_v`n1'r window control radio "+SD" `c3' `r1' 24 9 ml_v`n1'r window control radio "0/1" `c4' `r1' 24 9 ml_v`n1'r * 18Nov2005 * window control radend "Don't Plot" `c5' `r1' 40 9 ml_v`n1'r window control radio "Range" `c5' `r1' 32 9 ml_v`n1'r window control radend "Don't Plot" `c6' `r1' 40 9 ml_v`n1'r local r1 = `r1' + `d1' * var#3 local n1 = 3 window control scombo ml_rhsnm `c1' `r1' 50 50 ml_v`n1' window control radbegin "+1" `c2' `r1' 20 9 ml_v`n1'r window control radio "+SD" `c3' `r1' 24 9 ml_v`n1'r window control radio "0/1" `c4' `r1' 24 9 ml_v`n1'r * 18Nov2005 * window control radend "Don't Plot" `c5' `r1' 40 9 ml_v`n1'r window control radio "Range" `c5' `r1' 32 9 ml_v`n1'r window control radend "Don't Plot" `c6' `r1' 40 9 ml_v`n1'r local r1 = `r1' + `d1' * var#4 local n1 = 4 window control scombo ml_rhsnm `c1' `r1' 50 50 ml_v`n1' window control radbegin "+1" `c2' `r1' 20 9 ml_v`n1'r window control radio "+SD" `c3' `r1' 24 9 ml_v`n1'r window control radio "0/1" `c4' `r1' 24 9 ml_v`n1'r * 18Nov2005 * window control radend "Don't Plot" `c5' `r1' 40 9 ml_v`n1'r window control radio "Range" `c5' `r1' 32 9 ml_v`n1'r window control radend "Don't Plot" `c6' `r1' 40 9 ml_v`n1'r local r1 = `r1' + `d1' * var#5 local n1 = 5 window control scombo ml_rhsnm `c1' `r1' 50 50 ml_v`n1' window control radbegin "+1" `c2' `r1' 20 9 ml_v`n1'r window control radio "+SD" `c3' `r1' 24 9 ml_v`n1'r window control radio "0/1" `c4' `r1' 24 9 ml_v`n1'r * 18Nov2005 * window control radend "Don't Plot" `c5' `r1' 40 9 ml_v`n1'r window control radio "Range" `c5' `r1' 32 9 ml_v`n1'r window control radend "Don't Plot" `c6' `r1' 40 9 ml_v`n1'r * var#6 local r1 = `r1' + `d1' local n1 = 6 window control scombo ml_rhsnm `c1' `r1' 50 50 ml_v`n1' window control radbegin "+1" `c2' `r1' 20 9 ml_v`n1'r window control radio "+SD" `c3' `r1' 24 9 ml_v`n1'r window control radio "0/1" `c4' `r1' 24 9 ml_v`n1'r * 18Nov2005 * window control radend "Don't Plot" `c5' `r1' 40 9 ml_v`n1'r window control radio "Range" `c5' `r1' 32 9 ml_v`n1'r window control radend "Don't Plot" `c6' `r1' 40 9 ml_v`n1'r *> 18Nov2005 - Add 7th variable * var#7 local r1 = `r1' + `d1' local n1 = 7 window control scombo ml_rhsnm `c1' `r1' 50 50 ml_v`n1' window control radbegin "+1" `c2' `r1' 20 9 ml_v`n1'r window control radio "+SD" `c3' `r1' 24 9 ml_v`n1'r window control radio "0/1" `c4' `r1' 24 9 ml_v`n1'r window control radio "Range" `c5' `r1' 32 9 ml_v`n1'r window control radend "Don't Plot" `c6' `r1' 40 9 ml_v`n1'r *< *=> Define buttons that execute the plot program local r1 = `r1' + `d1' /* 18Nov2005 - change size window control button "DC Plot" 2 `r1' 40 13 ml_dc global ml_dc "_mlplot 1" window control button "OR Plot" 46 `r1' 40 13 ml_or global ml_or "_mlplot 2" window control button "OR+DC Plot" 90 `r1' 40 13 ml_od global ml_od "_mlplot 3" window control button "Next 6" 134 `r1' 40 13 ml_nxt7 global ml_nxt7 "_mlnxt7" */ local w = 52 local w1 = `w' + 4 local w2 = `w' + `w' + 4 local w3 = `w' + `w' + `w' + 4 window control button "DC Plot" 2 `r1' `w' 13 ml_dc global ml_dc "_mlplot 1" window control button "OR Plot" `w1' `r1' `w' 13 ml_or global ml_or "_mlplot 2" window control button "OR+DC Plot" `w2' `r1' `w' 13 ml_od global ml_od "_mlplot 3" window control button "Next 7" `w3' `r1' `w' 13 ml_nxt7 global ml_nxt7 "_mlnxt7" *=> Add a note to graph local r1 = `r1' + `d1' + 7 local r2 = `r1' global ml_wlbl "Note" window control static ml_wlbl 5 `r1' 18 9 window control edit 25 `r2' 148 8 ml_lbl *=> Plot options local r1 = `r1' + `d1' + 3 global ml_opt "Plot Options" * window control static ml_opt 2 `r1' 173 40 blackframe * version 1.6.5 * window control static ml_opt 2 `r1' 173 50 blackframe * 17Nov2005 window control static ml_opt 2 `r1' 210 60 blackframe local r1 = `r1' - 3 window control static ml_opt 5 `r1' 40 8 local r1 = `r1' + `d1' - 3 local r2 = `r1' * tics global ml_wtic "Number of tics" window control static ml_wtic 5 `r1' 47 8 window control edit 50 `r2' 25 8 ml_tic * range of plot global ml_wmin "Plot from" window control static ml_wmin 90 `r1' 28 8 window control edit 120 `r1' 17 8 ml_xmin global ml_wmax "to" window control static ml_wmax 140 `r1' 6 8 window control edit 149 `r1' 17 8 ml_xmax * connect if p> local r1 = `r1' + `d1' local r2 = `r1' global ml_wpgt "Connect if p>=" window control static ml_wpgt 5 `r1' 42 8 window control edit 50 `r2' 25 8 ml_pval * set base category global ml_wb "Base category" window control static ml_wb 90 `r1' 45 8 window control edit 137 `r2' 28 8 ml_bcat * pack odds and use variable labels local r1 = `r1' + `d1' - 2 window control check "Pack odds ratio plot" 5 `r1' 80 10 ml_pack window control check "Use variable labels" 90 `r1' 75 10 ml_vlbl * pack odds and use variable labels local r1 = `r1' + `d1' - 2 window control check "Use category values for plot symbols" 5 `r1' 180 10 ml_valu * 17Nov2005 - add underline option for OR+DC plots local r1 = `r1' + `d1' - 2 window control check "Underline indicates negative change" 5 `r1' 180 10 ml_under *=> Buttons for odds and ends local r1 = `r1' + 15 * 18Nov2005 - drop help button - no longer works * window control button "Help" 46 `r1' 40 13 ml_help * global ml_help "_mlhlp" * 18Nov2005 * window control button "Exit" 2 `r1' 40 13 ml_ex * window control button "Print" 90 `r1' 83 13 ml_print local w = 103 local wx = `w' + 5 window control button "Exit" 2 `r1' `w' 13 ml_ex global ml_ex "exit 3000" window control button "Print" `wx' `r1' `w' 13 ml_print global ml_print "_mlprnt" * window dialog "Multinomial Logit Plots" 10 10 180 192 * window dialog "Multinomial Logit Plots" 230 80 180 192 * version 1.6.5 *window dialog "Multinomial Logit Plots" 230 80 180 202 * 17Nov2005 *window dialog "Multinomial Logit Plots" 10 10 320 302 * x y *window dialog "Multinomial Logit Plots" 10 10 220 302 window dialog "Multinomial Logit Plots" 10 10 220 225 end program define _mlplot if "`1'" ~= "" { global ml_ordc = `1' } *=> construct list of vars from the scombo boxes 1 through 6 *=> construct list of vars from the scombo boxes 1 through 7 * 18Nov2005 local i = 1 local varlst "" local stdlst "" while `i' < 8 { * while `i' < 7 { * type of plot: unstd, std, or 0 to 1 local tmp "ml_v`i'r" * name of variable local tmpnm "ml_v`i'" if $`tmp'==1 { local varlst "`varlst' $`tmpnm'" local stdlst "`stdlst'u" } if $`tmp'==2 { local varlst "`varlst' $`tmpnm'" local stdlst "`stdlst's" } if $`tmp'==3 { local varlst "`varlst' $`tmpnm'" local stdlst "`stdlst'0" } * 18Nov2005 if $`tmp'==4 { local varlst "`varlst' $`tmpnm'" local stdlst "`stdlst'r" } * 18Nov2005 * if type is not 1, 2, 3, or 4 it is not plotted * if type is not 1, 2, or 3, it is not plotted local i = `i' + 1 } *=> build options to pass to mlogplot local opts "std(`stdlst')" if "$ml_bcat"~="" { local opts "`opts' b($ml_bcat)" } local opts "`opts' p($ml_pval)" if "$ml_xmin"~="min" { local opts "`opts' min($ml_xmin)" } if "$ml_xmax"~="max" { local opts "`opts' max($ml_xmax)" } if "$ml_lbl" ~= "" { local opts "`opts' note($ml_lbl)" } if $ml_ordc>=2 { local opts "`opts' or" } if $ml_ordc~=2 { local opts "`opts' dc" } if $ml_pack==1 { local opts "`opts' packed" } if $ml_vlbl==1 { local opts "`opts' labels" } * 1.6.5 if $ml_valu==1 { local opts "`opts' values" } * 18Nov2005 if $ml_under==1 { local opts "`opts' sign" } local opts "`opts' ntics($ml_tic)" local opts "`opts' $mlopts" di in white ". mlogplot `varlst', `opts'" mlogplot `varlst',`opts' * if $PE_mlerr==1 { * exit 3000 * } end program define _mlinit *=> set radio buttons local i = 1 while `i' < 6 { global ml_v`i'r = 1 local i = `i' + 1 } *=> defaults for check box global ml_rng = 1 /* use observed range */ global ml_ordc = 1 /* DC plot */ global ml_pack = 0 /* don't pack plot */ global ml_vlbl = 0 /* don't plot value labels */ * 17Nov2005 global ml_under = 0 /* underline negative changes */ * 1.6.5 global ml_valu = 0 /* don't plot value labels */ global ml_pval = .1 /* connect if p> */ global ml_tic = 9 global ml_lbl "" global ml_xmin "min" /* plot from min to max */ global ml_xmax "max" *=> get b from logit /* 2009-10-28 version 5.0 mat ml_b = get(_b) version 6.0 */ tempname v _get_mlogit_bv ml_b `v' global ml_nvars = colsof(ml_b) - 1 *=> get names of variables global ml_rhsnm : colnames(ml_b) global ml_nvar : word count $ml_rhsnm global ml_nvar = $ml_nvar - 1 global ml_lastv = 1 global ml_lastv = 0 _mlgetv end * get the names of variables to fill in the scombo boxes program define _mlgetv * get number of last variable in box; 0 if none plotted before. * if this is called from Next 6, this will not be 0. local k = $ml_lastv local i = 1 * 18Nov2005 * loop through up to 6 new variables * while `i' < 7 { * loop through up to 7 new variables while `i' < 8 { local k = `k' + 1 * if exceed max number of vars, do fill remaining scombo boxes if `k' > $ml_nvar { * do not plot *18Nov2005 * global ml_v`i'r = 4 global ml_v`i'r = 5 * no name global ml_v`i' "" } * else, get next in list of variables else { global ml_v`i' : word `k' of $ml_rhsnm local tmp "ml_v`i'" _pedum $`tmp' global ml_v`i'r = 1 if r(dummy) == 1 { global ml_v`i'r = 3 } } local i = `i' + 1 } * ok that this can be larger than n vars in model * 18Nov2005 *global ml_lastv = $ml_lastv + 6 global ml_lastv = $ml_lastv + 7 end program define _mlnxt7 * if last var from _mlgetv > n vars in model, reset if $ml_lastv > $ml_nvar { global ml_lastv = 0 } _mlgetv _mlplot end program define _mlprnt gphprint,nologo end exit * version 1.6.3 11Mar2001 * version 1.6.4 19Nov2003 - for stata 8, change where box opens * version 1.6.5 30Mar2005 plot values not labels * version 1.6.6 13Apr2005 plot values not labels * version 1.7.0 18Nov2005 add sign and more variables - mlogview * version 1.7.1 01Apr2006 * - fix dialog box