⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stepwise.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
📖 第 1 页 / 共 2 页
字号:
*! version 6.0.2  06may2005
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'
			}
			else {

quietly `version' `cmdname' `depvar' `curr' if `touse' `cmdrest'

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -