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
424 lines
14 KiB
Plaintext
7 months ago
|
*! 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
|
||
|
|