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

📄 mlogit_p.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
📖 第 1 页 / 共 2 页
字号:
			_predict double `xb' if `touse', eq(#`i') xb 
			replace `den' = cond(`xb'<. & exp(`xb')>=., /*
			*/ cond(`den'<0,`den'-1,-1), `den'+exp(`xb')) /*
			*/ if `touse'

			if "`i'"=="`equatio'" {
				tempvar xbsel
				rename `xb' `xbsel'
			}
			else	drop `xb'

					/* If `den'<0, then `den'==+inf.

					   If `den'==-1, then there is just
					   one +inf: p=0 if exp(`xbsel')<.,
					   and p=1 if exp(`xbsel')>=. (i.e.,
					   requested category gave the +inf).

					   If `den' < -1, then there are two
					   or more +inf: p=0 if exp(`xbsel')<.;
					   and p=. if exp(`xbsel')>=. (since we
					   cannot say what its value should be).
					*/

			local i = `i' + 1
		}
	}


/* Noisily compute probability of selected category. */

	if "`equatio'"=="" { /* basecategory */
		gen `typlist' `varlist' = cond(`den'>0,1/`den',0) if `touse'
	}
	else if "`xbsel'"=="" { /* equation not found */
		di in red `"equation #`equation' not found"'
		exit 303
	}
	else {
		gen `typlist' `varlist' = cond(`den'>0,exp(`xbsel')/`den', /*
		*/ cond(exp(`xbsel')<.,0,cond(`den'==-1,1,.))) if `touse'
	}
end

program define AllPmlog
	args typlist varlist touse 
	quietly {
		tempname miss
		local same 1
		mat `miss' = J(1,`e(k_cat)',0)
		local i 1
		while `i' <= e(k_cat) {
			tempvar p`i'
			local typ : word `i' of `typlist'
			local val = el(e(cat),1,`i')
			_predict `typ' `p`i'' if `touse', eq(`val') 
			count if `p`i''>=.
			mat `miss'[1,`i'] = r(N)
			if `miss'[1,`i']!=`miss'[1,1] {
				local same 0
			}
			label var `p`i'' `"Pr(`e(depvar)'==`val')"'
			local i = `i' + 1
		}
	}
	tokenize `varlist'
	local i 1
	while `i' <= e(k_cat) {
		rename `p`i'' ``i''
		local i = `i' + 1
	}
	ChkMiss `same' `miss' `varlist'
end

program define AllPsvy
	args typlist varlist touse 
	quietly {
		tempvar den tmp
		tempname miss cat

	/* Compute denominator `den' = 1 + Sum(exp(`xb')). */

		gen double `den' = 1 if `touse'
		local i 1
		while `i' < e(k_cat) {
			tempvar xb
			_predict double `xb' if `touse', eq(#`i') xb 
			replace `den' = cond(`xb'<. & exp(`xb')>=., /*
			*/ cond(`den'<0,`den'-1,-1), `den'+exp(`xb')) /*
			*/ if `touse'
					/* see comments in OnePsvy */

			if `i' < e(ibasecat) {
				local p`i' `xb'
				local i = `i' + 1
			}
			else {
				local i = `i' + 1
				local p`i' `xb'
			}
		}

	/* Compute probabilities. */

		local same 1
		mat `miss' = J(1,`e(k_cat)',0)
		mat `cat' = e(cat)
		local i 1
		while `i' <= e(k_cat) {
			local typ : word `i' of `typlist'

			if `i'==e(ibasecat) { /* basecategory */
				tempvar p`i'
				gen `typ' `p`i'' = cond(`den'>0,1/`den',0) /*
				*/ if `touse'
				local eqi `"`e(baselab)'"'
			}
			else {
				gen `typ' `tmp' = cond(`den'>0, /*
				*/ exp(`p`i'')/`den', /*
				*/ cond(exp(`p`i'')<.,0, /*
				*/ cond(`den'==-1,1,.))) /*
				*/ if `touse'
				drop `p`i''
				rename `tmp' `p`i''
				if `i' < e(ibasecat) {
					local eqi : word `i' of `e(eqnames)'
				}
				else {
					local ip1 = `i' - 1
					local eqi : word `ip1' of `e(eqnames)'
				}
			}

		/* Count # of missings. */

			count if `p`i''>=.
			mat `miss'[1,`i'] = r(N)
			if `miss'[1,`i']!=`miss'[1,1] {
				local same 0
			}

		/* Label variable. */

			label var `p`i'' `"Pr(`e(depvar)'==`eqi')"'

			local i = `i' + 1
		}
	}

	tokenize `varlist'
	local i 1
	while `i' <= e(k_cat) {
		rename `p`i'' ``i''
		local i = `i' + 1
	}
	ChkMiss `same' `miss' `varlist'
end

program define OldPsvy
	// NOTE: do not update this subroutine, it is for use with svymlogit
	// which has been replaced by svy:mlogit

	args typlist varlist touse 
	quietly {
		tempvar den tmp
		tempname miss cat cati

	/* Compute denominator `den' = 1 + Sum(exp(`xb')). */

		gen double `den' = 1 if `touse'
		local i 1
		while `i' < e(k_cat) {
			tempvar xb
			_predict double `xb' if `touse', eq(#`i') xb 
			replace `den' = cond(`xb'<. & exp(`xb')>=., /*
			*/ cond(`den'<0,`den'-1,-1), `den'+exp(`xb')) /*
			*/ if `touse'
					/* see comments in OnePsvy */

			if `i' < e(ibasecat) {
				local p`i' `xb'
				local i = `i' + 1
			}
			else {
				local i = `i' + 1
				local p`i' `xb'
			}
		}

	/* Compute probabilities. */

		local same 1
		mat `miss' = J(1,`e(k_cat)',0)
		mat `cat' = e(cat)
		local i 1
		while `i' <= e(k_cat) {
			local typ : word `i' of `typlist'

			if `i'==e(ibasecat) { /* basecategory */
				tempvar p`i'
				gen `typ' `p`i'' = cond(`den'>0,1/`den',0) /*
				*/ if `touse'
			}
			else {
				gen `typ' `tmp' = cond(`den'>0, /*
				*/ exp(`p`i'')/`den', /*
				*/ cond(exp(`p`i'')<.,0, /*
				*/ cond(`den'==-1,1,.))) /*
				*/ if `touse'
				drop `p`i''
				rename `tmp' `p`i''
			}

		/* Count # of missings. */

			count if `p`i''>=.
			mat `miss'[1,`i'] = r(N)
			if `miss'[1,`i']!=`miss'[1,1] {
				local same 0
			}

		/* Label variable. */

			mat `cati' = `cat'[1,`i'..`i']
			local eqi : coleq `cati'
			label var `p`i'' `"Pr(`e(depvar)'==`eqi')"'

			local i = `i' + 1
		}
	}

	tokenize `varlist'
	local i 1
	while `i' <= e(k_cat) {
		rename `p`i'' ``i''
		local i = `i' + 1
	}
	ChkMiss `same' `miss' `varlist'
end

program define ChkMiss
	args same miss
	macro shift 2
	if `same' {
		SayMiss `miss'[1,1]
		exit
	}
	local i 1
	while `i' <= e(k_cat) {
		SayMiss `miss'[1,`i'] ``i''
		local i = `i' + 1
	}
end

program define SayMiss
	args nmiss varname
	if `nmiss' == 0 { exit }
	if "`varname'"!="" {
		local varname "`varname': "
	}
	if `nmiss' == 1 {
		di in blu "(`varname'1 missing value generated)"
		exit
	}
	local nmiss = `nmiss'
	di in blu "(`varname'`nmiss' missing values generated)"
end

program ParseNewVars, sclass
	version 9, missing
	syntax [anything(name=vlist)] [if] [in] [, * ]
	local myif `"`if'"'
	local myin `"`in'"'
	local myopts `"`options'"'

	if `"`vlist'"' == "" {
		di as err "varlist required"
		exit 100
	}
	local varspec `"`vlist'"'
	local neq = e(k_cat)
	local stub 0
	if index("`vlist'","*") {
		_stubstar2names `vlist', nvars(`neq')
		local varlist `s(varlist)'
		local typlist `s(typlist)'
		confirm new var `varlist'
	}
	else {
		syntax newvarlist [if] [in] [, * ]
	}
	local nvars : word count `varlist'

	sreturn clear
	sreturn local varspec `varspec'
	sreturn local varlist `varlist'
	sreturn local typlist `typlist'
	sreturn local if `"`myif'"'
	sreturn local in `"`myin'"'
	sreturn local options `"`myopts'"'
end

program ParseOptions, sclass
	version 9
	syntax [,			///
		Equation(string)	///
		Outcome(string)		///
		Index			///
		XB			///
		STDP			///
		STDDP			///
		Pr			///
		SCores			///
	]

	// check options that take arguments
	local rc 0
	if `"`equation'"' != "" & `"`outcome'"' != "" {
		local errmsg "equation() and outcome()"
		local rc 198
	}
	if `rc' {
		di as err "options `errmsg' may not be combined"
		exit `rc'
	}
	local eq `"`equation'`outcome'"'

	// check switch options
	local type `index' `xb' `stdp' `stddp' `pr' `scores'
	if `:word count `type'' > 1 {
		local type : list retok type
		di as err "the following options may not be combined: `type'"
		exit 198
	}

	// save results
	sreturn clear
	sreturn local type	`type'
	sreturn local outcome	`"`eq'"'
end

program GenScores, rclass
	version 9, missing
	local cmd = cond("`e(prefix)'"=="svy","svy:","")+"`e(cmd)'"
	syntax [anything] [if] [in] [, * ]
	marksample touse
	_score_spec `anything', `options'
	local varlist `s(varlist)'
	local typlist `s(typlist)'
	local nvars : word count `varlist'
	local spec = substr("`s(eqspec)'",2,.)
	if "`spec'" == "" {
		numlist "1/`nvars'"
		local spec `r(numlist)'
	}
	tempvar p d

	forval i = 1/`nvars' {
		local typ : word `i' of `typlist'
		local var : word `i' of `varlist'
		local eq  : word `i' of `spec'
		if "`e(cmd)'`e(prefix)'"=="mlogit" {
			quietly	_predict `typ' `p' if `touse', eq(#`eq')
		}
		else { /* svymlogit */
			quietly OnePsvy `typ' `p' if `touse', eq(#`eq')
		}
		quietly GenD `d' if `touse', eq(#`eq')
		quietly gen `typ' `var' = (`d'-`p')

		version 6: Outcome #`eq'
		label var `var'	`"equation-level score from `cmd', `e(depvar)'==`s(outcome)'"'
		drop `d' `p'
	}
	return local scorevars `varlist'
end

⌨️ 快捷键说明

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