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

📄 stepwise.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
📖 第 1 页 / 共 2 页
字号:

			}

		}
	}

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 ForSel
	args pe hier lr lock version cmdname depvar termlist touse cmdrest

	TermMacros term k curr : `lock' : `termlist'
	local curr `term0' // is empty if `"`lock'"' == ""

	if "`lr'" != "" {
		local LRtest "LR test"
	}

	di in smcl as txt "{p2colset 0 23 32 2}{...}"
	if "`lock'" == "" {
		di as txt "{p2col :`LRtest'}begin with empty model{p_end}"
	}
	else	di as txt "{p2col :`LRtest'}begin with term 1 model{p_end}"

	if "`lr'" != "" {
		// fit the empty model
		quietly `version' `cmdname' `depvar' if `touse' `cmdrest'
		tempname ll0 df0 ll1 df1
		GetLR `ll0' `df0'
	}

	local start 1
	local pefmt : display %6.4f `pe'
	local done 0
	while !`done' {
		local add_i 0
		local p_i 2
		if "`hier'" != "" {
			local last `start'
		}
		else	local last `k'
		forval i = `start'/`last' {

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 2}{res:`term`add_i''}{p_end}"
			local curr `curr' `term`add_i''
			if "`hier'" != "" {
				local ++start
			}
			else {
				local term`add_i' `term`k''
				local term`k'
				local --k
			}
		}
		else {
			if "`hier'" != "" {
				local p : display %6.4f `p_i'
				di as txt ///
"{p2col :p = {res:`p'} >= `pefmt'}testing {res:`term`add_i''}{p_end}"
			}
			local done 1
		}
		if "`lr'" != "" {
			scalar `ll0' = `ll1'
			scalar `df0' = `df1'
		}
	}

	if "`curr'" == "`term0'" {
		di as txt ///
"{p2col :p >= `pefmt'}for all terms in model{p_end}"
	}

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

	di in smcl as txt "{p2colreset}{...}"
end

program ForStep
	args pr pe lr lock version cmdname depvar termlist touse cmdrest

	TermMacros term k curr : `lock' : `termlist'
	local curr `term0'

	if "`lr'" != "" {
		local LRtest "LR test"
	}

	di in smcl as txt "{p2colset 0 23 32 2}{...}"
	if "`lock'" == "" {
		di as txt "{p2col :`LRtest'}begin with empty model{p_end}"
	}
	else	di as txt "{p2col :`LRtest'}begin with term 1 model{p_end}"

	if "`lr'" != "" {
		// fit the empty model
		quietly `version' `cmdname' `depvar' `curr' if `touse' `cmdrest'
		tempname ll0 df0 ll1 df1
		GetLR `ll0' `df0'
	}

	local prfmt : display %6.4f `pr'
	local pefmt : display %6.4f `pe'
	local done 0
	local k0 `k'
	local k 0
	local kp1  1
	local first 1
	while !`done' {
		// 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
			}
			if `first' & "`lr'" != "" {
				scalar `ll0' = `ll1'
				scalar `df0' = `df1'
			}
		}
		else {
			if "`lr'" != "" {
				scalar `ll1' = `ll0'
				scalar `df1' = `df0'
			}
			local done 1
		}

		if `first' {
			local first 0
			continue
		}

		if "`lr'" == "" {

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

		}

		// 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
			local done 0
		}
		else {
			if "`lr'" != "" {
				scalar `ll0' = `ll1'
				scalar `df0' = `df1'
			}
		}
	}

	if "`curr'" == "`term0'" {
		di as txt ///
"{p2col :p >= `pefmt'}for all terms in model{p_end}"
	}

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

	di in smcl as txt "{p2colreset}{...}"
end

// Syntax: <c_depvar> <c_terms> : <touse> <cmdname> "[weight]" : <termlist>
//
// Parse the <termlist>, removing observations with missing values, and
// collinear variables.
program ParseTerms
	_on_colon_parse `0'
	local c_depvar : word 1 of `s(before)'
	local c_terms  : word 2 of `s(before)'
	_on_colon_parse `s(after)'
	local touse    : word 1 of `s(before)'
	local cmdname  : word 2 of `s(before)'
	local wgt      : word 3 of `s(before)'
	local termlist `"`s(after)'"'

	local stcmds streg stcox
	local is_st : list cmdname in stcmds

	// there is no <depvar> for -stcox- and -streg-,
	// otherwise it is required
	if !`is_st' {
		gettoken depvar termlist : termlist, bind match(par)
		if "`par'" != "" {
			di as err "depvar cannot be part of a group"
			exit 198
		}
		unab depvar : `depvar'
		if "`cmdname'" != "intreg" {
			markout `touse' `depvar'
		}
		if "`cmdname'" == "intreg" {
			gettoken depvar2 termlist : termlist, bind match(par)
			if "`par'" != "" {
				di as err "depvar cannot be part of a group"
				exit 198
			}
			unab depvar2 : `depvar2'
			if "`cmdname'" != "intreg" {
				markout `touse' `depvar2'
			}
			local depvar `depvar' `depvar2'
		}
	}
	local k 0
	while `"`:list retok termlist'"' != "" {
		local ++k
		gettoken term termlist : termlist, bind match(par)
		if "`par'" == "" {
			unab term : `term'
			if `:word count `term'' != 1 {
				gettoken term rest : term
				local termlist `"`rest' `termlist'"'
			}
		}
		markout `touse' `term'
		quietly _rmcoll `term' if `touse' `wgt'
		local term`k' `r(varlist)'
		local xvars0 `xvars0' `term`k''
	}
	if `k' == 0 {
		di as err "no independent variables"
		exit 198
	}
	quietly _rmcoll `xvars0' if `touse' `wgt'
	local dups0 : list dups xvars0
	local xvars `r(varlist)'
	local colvar : list xvars0 - xvars
	if `"`colvar'"' != "" {
		local colvar : word 1 of `colvar'
		di as err "between-term collinearity, variable `colvar'"
		exit 459
	}

	forval i = 1/`k' {
		local dups : list term`i' & dups0
		if "`dups'" != "" {
			local term`i' : list term`i' - dups
			local dups0 : list dups0 - dups
		}
		if "`term`i''" != "" {
			local terms `"`terms' (`term`i'')"'
		}
	}

	// saved results
	c_local `c_depvar' `depvar'
	c_local `c_terms' `"`:list retok terms'"'
end

// Syntax: <c_stub> <c_k> <c_curr> : <termlist>
//
// Build local macros for the caller that contain each individual term, how
// many terms there are, and a list of all the current term variables.
program TermMacros
	_on_colon_parse `0'
	local c_stub : word 1 of `s(before)'
	local c_k    : word 2 of `s(before)'
	local c_curr : word 3 of `s(before)'
	_on_colon_parse `s(after)'
	local lock `s(before)'
	local termlist `"`s(after)'"'

	local k 0
	while `"`termlist'"' != "" {
		if "`lock'" != "" {
			local lock
		}
		else	local ++k
		gettoken term termlist : termlist, bind match(par)
		c_local `c_stub'`k' `term'
		local curr `"`curr' `term'"'
	}
	c_local `c_k' `k'
	c_local `c_curr' `"`:list retok curr'"'
end

program CheckProps
	args cmdname lr
	local props : properties `cmdname'
	local swlist sw swml
	local swprop : list swlist & props
	if "`swprop'" == "" { 
		di as err "`cmdname' is not supported by stepwise"
		exit 199
	}
	if "`lr'" != "" {
		local swlist swml
		if `"`:list swlist & props'"' == "" {
			di as err ///
			"`cmdname' does not allow the lr option of stepwise"
			exit 199
		}
	}
end

program Check4Robust
	gettoken lr 0 : 0
	if ("`lr'" == "") exit
	syntax [fw pw aw iw] [, Robust CLuster(passthru) * ]

	if "`weight'" == "pweight" | "`robust'`cluster'" != "" {
		di as err ///
"option lr is not allowed with pweights, robust, or cluster()"
		exit 198
	}
end

program LRtest, rclass
	args ll1 df1
	tempname ll0 df0
	GetLR `ll0' `df0'
	return scalar p = chiprob(abs(`df1' - `df0'), abs(2*(`ll1'-`ll0')))
end

program GetLR
	args ll df
	capture confirm number `e(ll)'
	if c(rc) {
		di as err ///
"option lr requires that e(ll) contains the " ///
"log likelihood value for the model fit"
		exit 322
	}
	capture {
		confirm integer number `e(df_m)'
		assert e(df_m) >= 0
	}
	if c(rc) {
		di as err ///
"option lr requires that e(df_m) contains the " ///
"model degress of freedom"
		exit 322
	}
	scalar `ll' = e(ll)
	scalar `df' = e(df_m)
end

exit

⌨️ 快捷键说明

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