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.

424 lines
14 KiB
Plaintext

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