?? stepwise.ado
字號(hào):
*! version 6.0.1 27feb2005
program define stepwise, byable(onecall)
version 9
local version : di "version " string(_caller()) ", missing:"
if _by() {
local BY `"by `_byvars'`_byrc0':"'
}
if _caller() < 9 {
`version' `BY' sw_8 `0'
exit
}
capture _on_colon_parse `0'
if c(rc) | `"`s(after)'"' == "" {
gettoken old : 0, parse(" ,")
if "`old'" != "," {
capture which `old'
if !c(rc) {
`version' `BY' sw_8 `0'
exit
}
}
if (_by()) error 190
if ("`e(cmd)'" == "") error 301
Display `0'
exit
}
`version' `BY' StepWise `0'
end
program Display
local cmd = cond("`e(cmd2)'" == "", "`e(cmd)'", "`e(cmd2)'")
`cmd' `0'
end
program StepWise, eclass byable(recall)
version 9
local version : di "version " string(_caller()) ":"
// <my_stuff> : <command>
_on_colon_parse `0'
local command `"`s(after)'"'
local 0 `"`s(before)'"'
// quick check for -force- and -nodrop- options
syntax [fw iw pw aw] [if] [in] [, ///
pr(numlist max=1 >0 <1) ///
pe(numlist max=1 >0 <1) ///
FORWard ///
HIERarchical ///
LOCkterm1 ///
Level(passthru) ///
LR ///
]
local hier `hierarchical'
if "`weight'" != "" {
local wgt [`weight'`exp']
}
if `"`pr'`pe'"' == "" {
di as err "at least one of pr(#) and pe(#) must be specified"
exit 198
}
if "`pr'" != "" & "`pe'" != "" {
if "`hier'" != "" {
di as err "hierarchical pe(#) pr(#) invalid"
exit 198
}
if `pr' <= `pe' {
di as err "pr(`pr') <= pe(`pe') invalid"
exit 198
}
}
if "`forward'" != "" & "`pe'" == "" {
di as err "option forward invalid or option pe(#) is missing"
exit 198
}
// parse the command and check for conflicts
`version' _prefix_command stepwise ///
`wgt' `if' `in' , `level' : `command'
local version `"`s(version)'"'
local cmdname `"`s(cmdname)'"'
local termlist `"`s(anything)'"'
local wgt `"`s(wgt)'"'
local weight `"`s(wtype)'"'
local exp `"`s(wexp)'"'
local if `"`s(if)'"'
local in `"`s(in)'"'
local cmdopts `"`s(options)'"'
local rest `"`s(rest)'"'
CheckProps `cmdname' `lr'
Check4Robust "`lr'" `wgt', `cmdopts'
// Display options
local diopts `"`s(efopt)' level(`s(level)')"'
// build up part of the command that follows the varlist
local cmdrest `"`wgt'"'
if `"`cmdopts'"' != "" {
local cmdrest `"`cmdrest', `cmdopts'"'
}
if `"`rest'"' != "" {
local cmdrest `"`cmdrest' `rest'"'
}
// note: marksample looks at `varlist' `if' `in' and [`weight'`exp']
// and takes into account if I am being called with the -by:- prefix
marksample touse, novarlist
// parse termlist, and build the list of variable names
ParseTerms depvar termlist : `touse' `cmdname' "`wgt'" : `termlist'
TermMacros term k curr : `lockterm1' : `termlist'
quietly `version' `cmdname' `depvar' `curr' if `touse' `cmdrest'
local colna : colname e(b)
local varlist : subinstr local colna "_cons" "", all
local dropped : list curr - varlist
// check for missing standard errors
tempname v
matrix `v' = e(V)
if diag0cnt(`v') {
local dim = colsof(`v')
forval i = 1/`dim' {
local vname : word `i' of `colna'
if `v'[`i',`i'] == 0 & "`vname'" != "_cons" {
local dropped `dropped' `vname'
}
}
}
// check for dropped variables
if "`dropped'" != "" {
local tlist `"`termlist'"'
foreach dropvar of local dropped {
di as txt "note: `dropvar' dropped due to estimability"
local tlist : subinstr local tlist "`dropvar'" ""
}
local termlist : list retok tlist
local termlist : subinstr local termlist "()" "", all
local termlist : subinstr local termlist "( )" "", all
}
// check for dropped observations
quietly count if `touse' & !e(sample)
if r(N) {
di as txt "note: `r(N)' obs. dropped due to estimability"
quietly replace `touse' = 0 if !e(sample)
}
if "`pr'" != "" {
if "`pe'" == "" {
BackSel `pr' ///
"`hier'" ///
"`lr'" ///
"`lockterm1'" ///
"`version'" ///
`cmdname' ///
"`depvar'" ///
"`termlist'" ///
`touse' ///
"`cmdrest'"
}
else if "`forward'" == "" {
BackStep `pr' ///
`pe' ///
"`lr'" ///
"`lockterm1'" ///
"`version'" ///
`cmdname' ///
"`depvar'" ///
"`termlist'" ///
`touse' ///
"`cmdrest'"
}
else {
ForStep `pr' ///
`pe' ///
"`lr'" ///
"`lockterm1'" ///
"`version'" ///
`cmdname' ///
"`depvar'" ///
"`termlist'" ///
`touse' ///
"`cmdrest'"
}
}
else {
ForSel `pe' ///
"`hier'" ///
"`lr'" ///
"`lockterm1'" ///
"`version'" ///
`cmdname' ///
"`depvar'" ///
"`termlist'" ///
`touse' ///
"`cmdrest'"
}
ereturn local stepwise stepwise
Display, `diopts'
end
program BackSel
args pr hier lr lock version cmdname depvar termlist touse cmdrest
TermMacros term k curr : `lock' : `termlist'
if "`lr'" != "" {
local LRtest "LR test"
}
di in smcl as txt "{p2colset 0 23 32 2}{...}"
di as txt "{p2col :`LRtest'}begin with full model{p_end}"
// note: the "full" model has already been fit, and e() should already
// contain it's results
if "`lr'" != "" {
tempname ll1 df1 ll0 df0
GetLR `ll1' `df1'
}
local prfmt : display %6.4f `pr'
local done 0
local k0 `k'
while !`done' {
local drop_i 0
local p_i 0
if "`hier'" != "" & `k' > 0 {
local start `k'
}
else local start 1
forval i = `start'/`k' {
if "`lr'" != "" {
local curr1 : subinstr local curr "`term`i''" ""
quietly `version' `cmdname' `depvar' `curr1' if `touse' `cmdrest'
quietly LRtest `ll1' `df1'
}
else quietly test `term`i''
if r(p) > `p_i' {
local p_i = r(p)
local drop_i `i'
if "`lr'" != "" {
GetLR `ll0' `df0'
}
}
}
if `p_i' >= `pr' {
local p : display %6.4f `p_i'
di as txt ///
"{p2col :p = {res:`p'} >= `prfmt'}removing {res:`term`drop_i''}{p_end}"
local newcurr : list curr - term`k'
local curr : ///
subinstr local newcurr "`term`drop_i''" "`term`k''"
local term`drop_i' `term`k''
local term`k'
local --k
}
else {
if "`hier'" != "" & `k' > 0 {
local p : display %6.4f `p_i'
di as txt ///
"{p2col :p = {res:`p'} <{space 2}`prfmt'}" ///
"keeping{space 2}{res:`term`drop_i''}{p_end}"
}
local done 1
}
if "`lr'" != "" {
scalar `ll1' = `ll0'
scalar `df1' = `df0'
}
else {
quietly `version' `cmdname' `depvar' `curr' if `touse' `cmdrest'
}
}
if "`lr'" != "" {
quietly `version' `cmdname' `depvar' `curr' if `touse' `cmdrest'
}
if `k' == `k0' {
di as txt ///
"{p2col :p < `prfmt'}for all terms in model{p_end}"
}
di in smcl as txt "{p2colreset}{...}"
end
program BackStep
args pr pe lr lock version cmdname depvar termlist touse cmdrest
TermMacros term k curr : `lock' : `termlist'
if "`lr'" != "" {
local LRtest "LR test"
}
di in smcl as txt "{p2colset 0 23 32 2}{...}"
di as txt "{p2col :`LRtest'}begin with full model{p_end}"
// note: the "full" model has already been fit, and e() should already
// contain it's results
if "`lr'" != "" {
tempname ll1 df1 ll0 df0
GetLR `ll1' `df1'
}
local prfmt : display %6.4f `pr'
local pefmt : display %6.4f `pe'
local done 0
local k0 `k'
local kp1 = `k' + 1
local first 1
while !`done' {
// backward step
local drop_i 0
local p_i 0
forval i = 1/`k' {
if "`lr'" != "" {
local curr1 : subinstr local curr "`term`i''" ""
quietly `version' `cmdname' `depvar' `curr1' if `touse' `cmdrest'
quietly LRtest `ll1' `df1'
}
else quietly test `term`i''
if r(p) > `p_i' {
local p_i = r(p)
local drop_i `i'
if "`lr'" != "" {
GetLR `ll0' `df0'
}
}
}
if `p_i' >= `pr' {
local p : display %6.4f `p_i'
di as txt ///
"{p2col :p = {res:`p'} >= `prfmt'}removing {res:`term`drop_i''}{p_end}"
local newcurr : list curr - term`k'
local curr : ///
subinstr local newcurr "`term`drop_i''" "`term`k''"
local tmp `term`k''
local term`k' `term`drop_i''
local term`drop_i' `tmp'
local --k
local --kp1
if `first' & "`lr'" != "" {
scalar `ll1' = `ll0'
scalar `df1' = `df0'
}
}
else {
local done 1
if "`lr'" != "" {
scalar `ll0' = `ll1'
scalar `df0' = `df1'
}
}
if `first' {
if "`lr'" == "" {
quietly `version' `cmdname' `depvar' `curr' if `touse' `cmdrest'
}
local first 0
continue
}
// forward step
local add_i 0
local p_i 2
forval i = `kp1'/`k0' {
quietly `version' `cmdname' `depvar' `curr' `term`i'' if `touse' `cmdrest'
if "`lr'" != "" {
quietly LRtest `ll0' `df0'
}
else quietly test `term`i''
if r(p) < `p_i' {
local p_i = r(p)
local add_i `i'
if "`lr'" != "" {
GetLR `ll1' `df1'
}
}
}
if `p_i' < `pe' {
local p : display %6.4f `p_i'
di as txt ///
"{p2col :p = {res:`p'} <{space 2}`pefmt'}" ///
"adding{space 3}{res:`term`add_i''}{p_end}"
local curr `curr' `term`add_i''
if "`hier'" != "" {
local ++start
}
else {
local tmp `term`kp1''
local term`kp1' `term`add_i''
local term`add_i' `tmp'
local ++k
local ++kp1
}
local done 0
}
else {
if "`lr'" != "" {
scalar `ll1' = `ll0'
scalar `df1' = `df0'
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -