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

📄 _mprobitestimator.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
📖 第 1 页 / 共 4 页
字号:
			foreach  scr of global MPROBIT_CSCRS {
				local robnms `"`robnms' `scr':_cons"'
			}
			
			local i = $MPROBIT_NCASECOEF
			local `cscrs' `"$MPROBIT_CSCRS"'
			local neq = rowsof(`caselvls')
			forvalues j = 2/`neq' {
				local aj = `caselvls'[`j',1]
				foreach scr of global MPROBIT_CSCRS {
					tempvar c`++i'
					local robnms `"`robnms' `c`i'':_cons"'
					local cscrs `"`cscrs' `c`i''"'
					qui gen double `c`i'' = `scr' if `alternatives'==`aj'
					qui replace `scr' = 0 if `alternatives' == `aj'
					qui by `case': replace `c`i'' = sum(`c`i'')
					qui by `case': replace `c`i'' = `c`i''[_N]
				}
			} 
			foreach scr of global MPROBIT_CSCRS {
				qui replace `scr' = 0 if `alternatives'==`basealternative'
				qui by `case': replace `scr' = sum(`scr')
				qui by `case': replace `scr' = `scr'[_N]
			}
		}
		if `ncov' > 0 {
			/* dummy names for coefficients */
			foreach  scr of global MPROBIT_VSCRS {
				local robnms `"`robnms' `scr':_cons"'
			}
		}
		matrix colnames `V' = `robnms'
		matrix rownames `V' = `robnms'
		_robust $MPROBIT_ASCRS `cscrs' $MPROBIT_VSCRS if `choice'==1 ///
			[`weight'`exp'], `clopt2' variance(`V')

		local nms : colfullnames `from1'
		matrix rownames `V' = `nms'
		matrix colnames `V' = `nms'

		local nc = r(N_clust)
		ereturn repost b=`from1' V=`V' 
		ereturn local chi2
		ereturn local p
		if "`cluster'" != "" {
			ereturn scalar N_clust = `nc'
			ereturn scalar df_r = `nc' - 1
			ereturn local clustvar "`cluster'"
		}
		if `nattrib'>0 | $MPROBIT_NCASECOEF>0 {
			if `nattrib' > 0 {
				qui test [`alternatives']
				local accum a
			}
			if $MPROBIT_NCASECOEF-$MPROBIT_CONST > 0 {
				foreach eq of global MPROBIT_CASEEQS {
					qui test [`eq'], `accum'
					local accum a
				}
			}
			ereturn scalar df_m = r(df)
			local dfr = `nattrib'+($MPROBIT_NCASECOEF-$MPROBIT_CONST)*`neq'
			local neq = rowsof(`caselvls')
			if "`cluster'" != "" {
				ereturn local chi2type
				if (r(df)==`dfr') ereturn scalar F = r(F)
				else ereturn scalar F = .
			}
			else {
				if (r(df)==`dfr') ereturn scalar chi2 = r(chi2)
				else ereturn scalar chi2 = .
			}
			if (r(df)==`dfr') ereturn scalar p = r(p)
		}
		ereturn local vcetype "Robust"
	}
	if `cholesky' {
		ChoiceOrderC "`corstr'" "`choices'" "internal" 1
		ChoiceOrderC "`corfix'" "`choices'" "internal" 1
	}

	if `onerpc'== 0 {
		tempname varstr varfix
		matrix `varstr' = vecdiag(`corstr')
		matrix `varfix' = vecdiag(`corfix')
		forvalues i=1/`nchoice' {
			matrix `corstr'[`i',`i'] = .
			matrix `corfix'[`i',`i'] = .
		}
		local names : rownames `corstr'
		matrix colnames `varstr' = `names'
		matrix colnames `varfix' = `names'
		ereturn matrix corpattern = `corstr'
		ereturn matrix stdpattern = `varstr'
		ereturn matrix corfixed = `corfix'
		ereturn matrix stdfixed = `varfix'
	}
	ereturn matrix cat = `choices'
	ereturn local indvars  `"`attribs'"'
	ereturn local ind2vars `"`casevars'"'
	if $MPROBIT_NCASECOEF > 0 {
		local n = rowsof(`caselvls')
		forvalues i=1/`n' {
			local ci = `caselvls'[`i',1]
			local caselevels `"`caselevels' `ci'"'
		}
		ereturn local caselevels `"`caselevels'"'
 		ereturn local caseeqs `"$MPROBIT_CASEEQS"'
		ereturn local baselab `"`baselab'"'
	}
	if `onerpc' == 0 {
		ereturn local altvar  `"`alternatives'"'
		ereturn local casevar  `"`case'"'

		ereturn scalar cholesky = `cholesky'
		ereturn scalar fullcov = `fullcov'

		if `nchoice' > 2 {
			if (`imeth'==1) ereturn local mc_method "Halton"
			else if (`imeth'==2) ereturn local mc_method "Hammersley"
			else {
				ereturn local mc_method "uniform random"
					ereturn local mc_seed `"$MPROBIT_SEED"'
			}
		}
		if ("`correlation'" == "indep")	ereturn local correlation "independent"
		else if ("`correlation'" == "exch") ereturn local correlation "exchangeable"
		else if ("`correlation'" == "unstruct")	ereturn local correlation "unstructured"
		else if ("`cormattype'" == "pattern") ereturn local correlation "pattern matrix"
		else ereturn local correlation "fixed parameter matrix"

		if ("`stddev'" == "heter") ereturn local stddev "heteroskedastic"
		else if ("`stddev'" == "homo") ereturn local stddev "homoskedastic"
		else if ("`varmattype'" == "pattern") ereturn local stddev "pattern matrix"
		else ereturn local stddev "fixed parameter matrix"

		if ("$MPROBIT_DELIMIT"!="") ereturn local delimit "$MPROBIT_DELIMIT"
	}

	ereturn scalar k_indvars = `nattrib'
	ereturn scalar k_ind2vars = $MPROBIT_NCASECOEF-$MPROBIT_CONST 
	ereturn scalar const = $MPROBIT_CONST
	ereturn scalar k_cat = `nchoice'
	ereturn scalar basealt = `basealternative'

	if (`onerpc') {
		ereturn scalar k_points = `intpoints'
	}
	else {
		if `nchoice' > 2 {
			ereturn scalar mc_points = `intpoints'
			ereturn scalar mc_antithetics = `antithetics'
			if (`imeth'!=3) ereturn scalar mc_burn = `intburn'
		}
		ereturn scalar scalealt = `scalealternative'
		ereturn scalar k_rho = `ncor'
		ereturn scalar k_sigma = `nvar'
	}


	macro drop MPROBIT_*

	ereturn local k_dv 
	ereturn local ic
	ereturn local ilog
	ereturn local k_eq	
	ereturn local cmd _mprobitestimator
end

program PostError
	syntax , onerpc(integer) [SCore(string)]
 
	if `onerpc'==0 & "`score'"!="" {
		di as error "option scores() not allowed"
		exit 198
	}
end

program ParseTech, sclass
	args technique initbhhh vce

	tokenize `technique'

	local d1 d1
	local tech `technique'
	if "`2'" == "" {
		if "`1'" == "" {
			local tech bfgs
			local technique bfgs
		}
		if "`vce'" == "native" {
			if ("`tech'" == "nr")	local vce oim
			else if ("`tech'" == "bhhh") local vce opg
		}
		if "`tech'" == "bhhh" {
			local initbhhh = 0
			/* must trick -ml- and let the likelihood evaluator compute the */
			/* outer product gradient approximation to the negative Hessian */
			local d1 d2
			local tech nr

			/* detect if a extra call to ml is needed to get the desired vce */
			if "`vce'" == "oim" {
				local tech2 nr
				local vce2  oim
				local d21   d1
			}
		}
		else if "`vce'" == "opg"{
			/* detect if a extra call to ml is needed to get the desired vce */
			local tech2 nr
			local vce2  oim
			local d21   d2
		}
		if `initbhhh' > 0 {
			if ("`tech'" == "nr") local techmeth Newton-Raphson
			else local techmeth = upper("`technique'")
		}
	}
	else {
		local initbhhh = 0
		local i = 0
		while "``++i''" != "" {
			if "``i''" == "bhhh" {
				di as error "{p}technique(`technique') is invalid; " ///
				 "use the initbhhh({it:#}) option{p_end}"
				exit 184
			}
		}
	}
	sreturn local technique `"`technique'"'
	sreturn local tech `"`tech'"'
	sreturn local d1 "`d1'"
	sreturn local vce "`vce'"
	sreturn local tech2 "`tech2'"
	sreturn local vce2 "`vce2'"
	sreturn local d21 "`d21'"
	sreturn	local initbhhh = `initbhhh'
	sreturn local techmeth "`techmeth'"
end

program CoefFill
	args mat1 mat2

	local names1 : colfullnames `mat1'
	local names2 : colfullnames `mat2'

	local n1 : word count `names1'
	local n2 : word count `names2'

	forvalues j = 1/`n1' {
		local labj : word `j' of `names1'
		local i = 0
		local found = 0
		while `i'<`n1' & `found'==0 {
			local labi : word `++i' of `names2' 
			local found = ("`labi'" == "`labj'")
		}
		if `found' == 0 {
			di "{p 0 7}Note: coefficient `labj' of `mat1' is not a coefficient " ///
			 "of the model; ignoring it{p_end}"
		}
		else {
			matrix `mat2'[1,`i'] = `mat1'[1,`j']
		}

	}
end

program CoefFrom, rclass 
	syntax anything, alternatives(varname) altlevels(string)  	///
		cholesky(integer) choice(varname) [			///
		attribs(varlist) 					///
		casevars(varlist)					///
		base(string)						///
		noCONSTant ]
		
	local 0 `anything'
	syntax namelist(min=1 max=1) [, copy]

	tempname from1 caselvls
	local from `namelist'
	local copy = ("`copy'"=="copy")
	local nacf : word count `attribs'
	local nccf : word count `casevars'
	local nvcf : word count `vcfnms'
	local nalt = rowsof(`altlevels')
	local const = ("`constant'"=="")

	 _labels2names `alternatives', stub(_alt_) noint
	local altlabels `"`s(names)'"'

	VParStripe `cholesky'
	local nvcf = `r(nvcf)'
	local vcfnms `"`r(cfnms)'"'
	local thetas `"`r(thetas)'"'
	local ncoef = `nacf' + (`nccf'+`const')*(`nalt'-1) + `nvcf'
	if `copy' {
		/* copy */
		local nc = colsof(`from')
		
		if `nc' != `ncoef' {
			di as error "{p}option from(`from',copy) specifies a vector " ///
			 "of length `nc' but should be `ncoef'{p_end}"
			exit 480
		}
		matrix `from1' = `from'
	}
	else {
		matrix `from1' = J(1,`ncoef',0)
	}
	local cfnms
	if `nacf' > 0 {
		local altmodel `"(`alternatives':`choice'="'
		foreach at of local attribs {
			local cfnms `"`cfnms' `alternatives':`at'"'
			local altmodel `"`altmodel' `at'"'
		}
		local altmodel `"`altmodel',nocons)"'
	}
	if `const' | `nccf'>0 {
		local i = 0
		matrix `caselvls' = J(`nalt'-1,1,.)
		forvalues j = 1/`nalt' {
			local aj = `altlevels'[`j',1]
			if (`aj' == `base') {
				local baselab : word `j' of `altlables'
				continue
			}
			matrix `caselvls'[`++i',1] =  `aj'
		
	                local aj : word `j' of `altlabels'
			local casemodels `"`casemodels' (`aj':"'
			if (`nacf'==0 & `i'==1)	local casemodels `"`casemodels'`choice'="'
			local caseeqs `"`caseeqs' `aj'"'

			if `nccf' > 0 {
				foreach cv of local casevars {
					local cfnms `"`cfnms' `aj':`cv'"'
					local casemodels `"`casemodels' `cv'"'
				}
			}
			if `const' > 0	{
				local cfnms `"`cfnms' `aj':_cons"'
				local casemodels `"`casemodels')"'
			}
			else {
				local casemodels `"`casemodels',nocons)"'
			}
		}
	}

	matrix colnames `from1' = `cfnms' `vcfnms'
	if (`copy'==0) CoefFill "`from'" "`from1'"

	return matrix from = `from1'
	return local altmodel `"`altmodel'"'
	return local casemodels `"`casemodels'"'
	return local thetas `"`thetas'"'
	return local caseeqs `"`caseeqs'"'
	return local ncasecf = `nccf' + `const'
	return local baselab `"`baselab'"'
	if (`return(ncasecf)'>0) return matrix caselevels = `caselvls'
	return local const = `const'
	return local rcfnms `"`cfnms'"'
end

program InitMProbit, rclass
	syntax varlist(max=1) [if] [fw pw iw],	///
		alternatives(varname) 		///
		altlevels(string)		///
		cholesky(integer)		///	
		base(string) [			///
		case(varname)			///
		attribs(varlist) 		///
		noCONSTant			///
		casevars(varlist) 		///
		constraints(numlist) ]

	tempname from caselvls b ind
	local np = 0
	local nalt = rowsof(`altlevels')
	local const = ("`constant'" == "")
	local nccf : word count `casevars'
	local nacf : word count `attribs'

	 _labels2names `alternatives', stub(_alt_) noint
	local altlabels `"`s(names)'"'
	local ncoef = 0

	if `nacf' > 0 {
		local altmodel `"(`alternatives':`varlist'="'
		foreach attrib of local attribs {
			local cfnms `"`cfnms' `alternatives':`attrib'"'
			local altmodel `"`altmodel' `attrib'"'
			local `++ncoef'
		}
		local altmodel `"`altmodel',nocons)"'
	}
	if `const' | `nccf'>0 {
		matrix `caselvls' = J(`nalt'-1,1,.)
		local k = 0

		forvalues i=1/`nalt' {
			local li = `altlevels'[`i',1]
			if (`li'==`base') {
				local baselab : word `i' of `altlabels'
				continue
			}

			matrix `caselvls'[`++k',1] = `li'

               		local ai : word `i' of `altlabels'

			if (`k'==1 & `nacf'==0)	local casemodels `"`casemodels' (`ai':`varlist'="'
			else local casemodels `"`casemodels' (`ai':"'

			local caseeqs `"`caseeqs' `ai'"'
			if `nccf' > 0 {
				foreach cv of local casevars {
					local cfnms `"`cfnms' `ai':`cv'"'
					local casemodels `"`casemodels' `cv'"'
					local `++ncoef'
				}
			}
			if `const' {
				local cfnms `"`cfnms' `ai':_cons"'
				local casemodels `"`casemodels')"'
				local `++ncoef'
			}
			else local casemodels `"`casemodels',nocons)"'
		}
	}
	VParStripe `cholesky'
	local nvcf = `r(nvcf)'
	local thetas `"`r(thetas)'"'
	local vcfnms `"`r(cfnms)'"'
	local vconstr = 0
	local bconstr = 0
	if `"`constraints'"' != "" {
		matrix `b' = J(1,`ncoef'+`nvcf',0)
		matrix colnames `b' = `cfnms' `vcfnms'

		CheckConstraints "`b'" `nvcf' `"`constraints'"'
		/* vconstr is the number of constraints on the variance parameters */
		/* bconstr is the number of constraints on the regression parameters */
		local vconstr = `e(vconstr)'
		local bconstr = `e(bconstr)'
		if `bconstr' > 0 {
			tempname C 
			matrix `C' = e(C)
		}	
	}
		
	if `nacf' == 0 {
		if (`const'==0) local noconst noconstant
		/* must generate mlogit coefficient names in case it drops variables due */
		/* to collinearity */
		forvalues i=1/`nalt' {
			local ai = `altlevels'[`i',1]
			if (`ai'==`base') continue

               		local ai : word `i' of `altlabels'
			if `nccf' > 0 {
				foreach cv of local casevars {
					local initcf `"`initcf' `ai':`cv'"'
				} 
			}
			if (`const') local initcf `"`initcf' `ai':_cons"'
		}
		if (`const'==0) local noconst noconst
		if `bconstr' > 0 {
			matrix colnames `C' = `initcf'
			local copt constraints(`C')
		}

		qui mlogit `alternatives' `casevars' [`weight'`exp'] `if', `noconst' ///

⌨️ 快捷键说明

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