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

📄 mprobit.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
字号:
*! version 1.0.6  03jun2005
* mprobit - multinomial probit model for case specific variables
	
program mprobit, eclass byable(onecall) prop(ml_score)
	version 9

	if _by() {
		local BY `"by `_byvars'`_byrc0':"'
	}
	`BY' _vce_parserun mprobit : `0'
	if "`s(exit)'" != "" {
		exit
	}
	if replay() {
		if `"`BY'"' != "" error 190
		if `"`e(cmd)'"' != "mprobit" error 301
		Replay `0'
		exit
	}
	cap noi `BY' Estimate `0'
	local rc = _rc
	macro drop MPROBIT_*
	exit `rc'
end

program Estimate, eclass byable(recall) sortpreserve
	syntax varlist [if] [in] [fw pw iw], [		///
		INTPoints(integer 15) 			///
		noCONstant				///
		BASEoutcome(string)			///
		Robust					///
		CLuster(varname)			///
		CONSTraints(passthru)			///
		FROM(string)				///
                SCore(passthru)                         ///
		Level(cilevel)				///
		noLOg					///
		noDROP					///
		*]

	gettoken choice indvars : varlist

	mlopts mlopts, `options'
	local diopts level(`level')

	cap confirm string variable `choice'
	if _rc == 0 {
		di as error "{p}depvar `choice' is a string variable; " ///
		 "use {help encode##|_new:encode} to convert it{p_end}"
		exit 108
	}
	local nvar : word count `indvars'
	if `nvar'==0 & "`constant'"!="" {
		di as error "too few variables specified"
		exit 102
	}

	marksample touse
	if `"`cluster'"' != "" {
		markout `touse' `cluster'
		local robust robust
		local clopt cluster(`cluster')
	}
	if "`drop'"!="" & "`from'"=="" {
		/* nodrop is undocumented; prevents dropping collinear 	*/
		/*  variables.						*/
		di as error "must use from() with the nodrop option"
		exit 198
	}
	if "`drop'" == "" {
		/* remove collinear variables */
		_rmcoll `indvars' if `touse', `constant'
		local indvars `"`r(varlist)'"'
	}

	tempvar depvar 
	tempname label
	cap qui egen `depvar' = group(`choice') if `touse', lname(`label')
	if _rc > 0 {
		/* should not happen */
		di as error "failed to renumber outcome levels"
		error _rc
	}

	tempname N altlevels
	local tabwgt  "`weight'"
	if ("`tabwgt'" == "pweight") local tabwgt "iweight"
	qui tabulate `choice' [`tabwgt'`exp'] if `touse', matcell(`N') matrow(`altlevels')
	local nalt = r(r)
	if `nalt' == 1 {
		di as error "there is only one outcome in `choice'"
		exit 148
	}
	if `nalt' > 30 {
		di as error "there are `nalt' outcomes in `choice'; the maximum " ///
		 "number of outcomes is 30"
		exit 149
	}
	if "`baseoutcome'" == "" {
		/* mimic -mlogit-: use maximum frequency as default base outcome */
		local ni = `N'[1,1]
		local ibase = 1
		local baseoutcome = `altlevels'[1,1]
		forvalues i=2/`nalt' {
			if `N'[`i',1] > `ni' {
				local ni = `N'[`i',1]
				local ibase = `i'
				local baseoutcome = `altlevels'[`i',1]
			}
		}
	}
	else {
		local altlabels : value label `choice'
		AlternativeIndex "`altlevels'" "`altlabels'" "`baseoutcome'" "`choice'" 
		local ibase = r(index)
	}

	/* number of quadrature points */
	if `nalt' <= 2 {
		local intpoints = 0
	}
	else if `intpoints' < 1 {
		di as error "intpoints() must be greater than zero"
		exit 498
	}
	else if `intpoints' > 500 {
		di as error "{p}intpoints(`intpoints') is excessive; typically " ///
		 "no accuracy is gained beyond 30{p_end}"
		exit 498
	}
	global MPROBIT_NPOINTS = `intpoints'	
	global MPROBIT_NALT = `nalt'
	global MPROBIT_BASE = `ibase'
	global MPROBIT_CHOICE `depvar'
	global MPROBIT_TOUSE `touse'

	GetModel `depvar' `indvars' if `touse', ibase(`ibase') `constant' 

	local models `"`r(models)'"'
	local alteqs `"`r(alteqs)'"'
	local const = `r(const)'
	local coefnames `"`r(coefnames)'"'
	local neq : word count `alteqs'
	local `--neq'

	if `"`from'"' == "" {
		qui mlogit `depvar' `indvars' if `touse', base(`ibase') `constant'
		tempname from
		matrix `from' = e(b)
		matrix colnames `from' = `coefnames'
	}
	/* need one extra score var for the base; -mprobit_lf- will pass */
	/* it on to mata routine _mprobit_quadrature			 */
	tempvar cb
	gen double `cb' = 0
	global MPROBIT_SCRS `cb'
	global MPROBIT_ALTEQS `alteqs'

	if `nalt' > 2 {
		tempname qx qw
		mata: _mprobit_weights_roots_laguerre(`intpoints', "`qw'", "`qx'")
		global MPROBIT_QX `qx'
		global MPROBIT_QW `qw'
	}

	if ("`score'"!="") local nopre  nopre

	ml model d1 mprobit_lf `models' if `touse' [`weight'`exp'], collinear ///
		`constraints' init(`from') `clopt' `robust' wald(`neq') `log' ///
		search(off) max nooutput `score' `nopre' `mlopts'

	local labs : value label `choice'
	forvalues i=`nalt'(-1)1 {
		local a`i' = `altlevels'[`i',1]
		if "`labs'" != "" {
			local lab`i' : label `labs' `a`i''
			ereturn local out`i' `"`lab`i''"'
		}
		else ereturn local out`i' `"`a`i''"'
	}
	local kind : word count `indvars'
	ereturn scalar k_indvars = `kind'
	ereturn scalar const = `const'
	ereturn scalar k_out = `nalt'
	ereturn scalar i_base = `ibase'
	ereturn scalar k_points = `intpoints'
	ereturn matrix outcomes = `altlevels'
	 
	ereturn local outeqs `"`alteqs'"'
	ereturn local indvars `"`:list retok indvars'"'
	ereturn local depvar `"`choice'"'

	ereturn local k_dv 

	ereturn local title  "Multinomial probit regression"
	ereturn local predict mprobit_p
	ereturn local cmd2 mprobit
	ereturn local cmd mprobit

	ereturn repost, esample(`touse')

	Replay, `diopts'
end

program Replay
	syntax [, Level(cilevel)]

	local neq : word count `e(outeqs)'
	local `--neq'
	ml display, level(`level') neq(`neq') nofootnote

	local i = `e(i_base)'
	if (wordcount("`e(out`i')'") > 1) local base `""`=abbrev("`e(out`i')'",17)'""'
	else local base `"`=abbrev(`"`e(out`i')'"',17)'"'
        di in gr `"{p}(`e(depvar)'=`base' is the base outcome){p_end}"'
	ml_footnote
end

program GetModel, rclass
	syntax varlist if, ibase(integer) [ noCONstant ] 

	gettoken choice indvars : varlist

	local const = ("`constant'" == "")
	local nind : word count `indvars'

	 _labels2names `choice' `if', stub(_outcome_) noint
	local altlabels `"`s(names)'"'
	local nalt = `s(n_cat)'

	forvalues i=1/`nalt' {
		if (`i' == `ibase') continue

		local ai : word `i' of `altlabels'

		local models `"`models' (`ai':"'

		local eqs `"`eqs' `ai'"'
		if `nind' > 0 {
			foreach cv of local indvars {
				local cfnms `"`cfnms' `ai':`cv'"'
				local models `"`models' `cv'"'
			}
		}
		if `const' {
			local cfnms `"`cfnms' `ai':_cons"'
			local models `"`models')"'
		}
		else local models `"`models',nocons)"'
	}

	return local models `"`models'"'
	return local eqs `"`eqs'"'
	return local const = `const'
	return local coefnames `"`cfnms'"'
	return local alteqs `"`altlabels'"'
end

program AlternativeIndex, rclass
	args  altlevels altlabels level choice

	local index = .
	local nalt = rowsof(`altlevels')
	if "`level'"!="" {
		local i = 0
		while `++i'<=`nalt' & `index'>=. {
			local ialt = `altlevels'[`i',1]
			if (`"`level'"'==`"`ialt'"') local index = `i'
		}
		if `index'>=. & "`altlabels'"!="" {
			local i = 0
			while `++i'<=`nalt' & `index'>=. {
				local label : label `altlabels' `=`altlevels'[`i',1]'
				if (`"`level'"'==`"`label'"') local index = `i'
			}
		}
		if `index'>=. {
			di as error "{p}baseoutcome(`level') is not an "   ///
	"outcome of `choice'; use {help tabulate##|_new:tabulate} for a " ///
			 "list of values{p_end}"
			exit 459
		}
	}
	return local index = `index'
end 

⌨️ 快捷键说明

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