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

📄 _vecu.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
📖 第 1 页 / 共 4 页
字号:
			mat colnames `Ithetai' = `bnames'
			mat rownames `Ithetai' = `bnames'
		}	
		
		tempname pivec pi_V sigmabbi alpha_V

		mat `sigmabbi' = syminv(`beta2m''*`s11'*`beta2m')
		mat `pi' = `alpha2'*`beta2m''
		mat colnames `pi' = `lagvarlist' `z1exn'
		mat rownames `pi' = `diffvarlist2'
		mat `pivec' = vec(`pi'')'
		local pinames : colfullnames `pivec'
		
		mat `pi_V' = `omega' # (`beta2m' * `sigmabbi' *`beta2m'')
		mat `alpha_V' = 1/(`T' - `df') *( `omega' # `sigmabbi' )
		if "`gmat'" != "NONE" {

			mat `pi_V' = syminv(`gmat''*			///
				(`omegai'#(`beta2m''*`s11'*`beta2m'))*	///
				`gmat')
			mat `alpha_V' = 1/(`T'-`df') * `gmat'*`pi_V'*`gmat''

			tempname outer
			mat `outer' = (`beta2m' # I(`K'))
			mat `outer' = (I(`K') # `beta2m')

			mat `pi_V' = `outer'*`gmat'*`pi_V'*`gmat''*`outer''

		}

			
		mat `pi_V' = (1/(`T'-`df'))*`pi_V'

		mat colnames `pi_V' = `pinames'
		mat rownames `pi_V' = `pinames'

		tempname V2

		mat `V2' = `V'
		
		tempname chi2_res bcopy
		scalar `chi2_res' = 2*(`llvalueJ' - `llvalue')

		mat `bcopy' = `b'

		eret clear
		ereturn post `b' `V' ,  esample(`touse')


		
// seasonal is an undocumented e-result that results from 
// the undocumented option seasonal

		if "`seasonal'" != "" {
			eret local seasonal "`stype'"
		}	
		else if "`sindicators'" != "" {
			eret local sindicators "`sindicators'"
		}	

		eret local trend `trend'
		eret local tsfmt "`tsfmt'"
		eret local tvar  "`tvar'"
		eret local endog   `tsvarlist'
		eret local eqnames `diffvarlist2'
		if "`reduce'" != "" {
			eret local reduce_opt `reduce'
		}
		eret local reduce_lags `reduced'
		eret local predict "vec_p"

		if "`acnsmac'`bcnsmac'" != "" {
			if `converge' == 0 {
				scalar `converge' = 1
			}
			else {
				scalar `converge' = 0
			}
			eret scalar converge = `converge'
		}

		if "`acnsmac'" != "" {
			eret local aconstraints "`acnsmac'"
		}

		if "`bcnsmac'" != "" {
			eret local bconstraints "`bcnsmac'"
		}
		
		eret scalar N          = `T'
		eret scalar beta_iden  = `beta_iden'
		eret scalar beta_icnt  = `beta_iden_cnt'

		eret scalar df_lr      = `df_lr'
		
// BPP: saving off names of cointegrating equations _ce1, _ce2, ...
// needed for dialog boxes, and hard to do in dialog programming code
		local cenames
		forvalues i = 1 / `rank' {
			local cenames "`cenames' _ce`i'"
		}
		local cenames `=trim("`cenames'")'	// rm leading space
		eret local cenames "`cenames'"
// end BPP modification
		eret scalar k_ce       = `rank'
		eret scalar n_lags     = `p'
		eret scalar k_eq       = `K'
		eret scalar k_dv       = `K'
		eret scalar k_rank     = `parms1'
		eret scalar df_m       = `df'
		eret scalar ll         = `llvalue'
		eret scalar chi2_res   = `chi2_res'
		eret scalar tmin       = `tmin'
		eret scalar tmax       = `tmax'
		eret scalar aic        = `aic'
		eret scalar sbic       = `bic'
		eret scalar hqic       = `hqic'
		eret scalar detsig_ml  = `detsig'

// save off equation level stats

		forvalues i = 1/`K' {
			eret scalar k_`i'    = `k_`i''
			eret scalar rmse_`i' = `rmse_`i''
			eret scalar r2_`i'   = `r2_`i''
			eret scalar df_m`i'  = `df_m`i''
			eret scalar chi2_`i'    = `chi2_`i''
		}

// now get long-run impact matrix and its VCE

		tempname C Gam xi1 xi2 xi C_V qstar  alpha_bar

// _vecmkgam uses e(b) and e(trend) , they must already be posted 

		_vecmkgam, g(`Gam') b(`bcopy') rank(`rank')	///
			trend(`trend') pm1(`pm1') k(`K')

		mat `C' = `betao'*inv(`alphao''*`Gam'*`betao')*`alphao''

		mat `alpha_bar' = `alpha2'* syminv(`alpha2''*`alpha2')

		mat `xi1' = (`C''*`Gam''-I(`K'))*`alpha_bar'

		if `pm1' > 0 {
			mat `xi2' = J(1,`pm1',1)#(`C'')

			mat `xi' = `xi1', `xi2'
		}
		else {
			mat `xi' = `xi1'
		}

		mat `qstar' = (`xi1',`C'')
		
		tempname dofw2 zmat smat lq1

// this next program uses e(V)
		_vecmkapvp `dofw2' `rank' `pm1' `K' `tterms'
		mat `smat' = (`C'#`xi')
		mat `C_V'  = ((`T'-`df')/`T')*(`smat')*`dofw2'*`smat''

		mat colnames `C' = `tsvarlist2'
		mat rownames `C' = `tsvarlist2'
		mat `C' = vec(`C'')'

		local cnames : colfullnames `C'

		
		mat rownames `C_V' = `cnames'
		mat colnames `C_V' = `cnames'

		local anames 
		foreach nm1 of local diffvarlist2 {
			foreach nm2 of local Lce_lab {
				local anames "`anames' `nm1':`nm2' "
			}
		}
		

		mat colnames `alpha_V' = `anames'
		mat rownames `alpha_V' = `anames'

		mat `alpha2'     = vec(`alpha2'')'

		mat colnames `alpha2' = `anames'
		mat rownames `alpha2' = alpha

		eret mat alpha   = `alpha2'
		eret mat V_alpha = `alpha_V'

		mat colnames `omega' = `diffvarlist2'
		mat rownames `omega' = `diffvarlist2'

		mat rownames `beta2' = beta
		mat rownames `bvec' = betavec
		mat rownames `pivec' = pi
		mat rownames `C' = mai

		eret mat beta = `beta2'
		eret mat V_beta = `Ithetai'
		eret mat betavec = `bvec'
		eret mat pi      = `pivec'
		eret mat V_pi    = `pi_V'
		eret mat omega   = `omega'
		eret mat mai     = `C'
		eret mat V_mai   = `C_V'
		eret local title "Vector error-correction model"
		eret local cmd "vec"

	}
end

program define MATsqrt 

// syntax MATsqrt newmat oldmat
// 	oldmat is name of symmetric matrix of which to take the square root 
// 	newmat is name of matrix to hold the matrix square root
// 	matrix square root is defined as 
//       newmat = W (1/sqrt(r_1), 1/sqrt(r_2), ..., 1/sqrt(r_k)) W'
//		where W is matrix of eigenvectors of oldmat and 
//			r_i is i^th eigenvector of oldmat
//	NB:  return exits with 498 if r_i <= 1e-14

	local newmat `1'
	local oldmat `2'

	confirm matrix `oldmat'
	confirm name `newmat'

	tempname w v v2
	matrix symeigen `w' `v' = `2'

	
	local k = colsof(`v') 

	mat `v2' = J(`k',`k',0)

	forvalues i = 1/`k' {
		if `v'[1,`i'] <= 1e-15 {
			mat `v2'[`i',`i'] = 0
		}
		else {
			mat `v2'[`i',`i'] = 1/sqrt(`v'[1,`i']) 
		}	
	}

	mat `newmat' = `w'*`v2'*`w''
end



program define MKic

// arguments are passed in
//	aic  is 1 by (K+1) matrix to hold AIC
//	bic  is 1 by (K+1) matrix to hold BIC
//	hqic is 1 by (K+1) matrix to hold HQIC
//	ll   is 1 by (K+1) matrix that already holds Loglikelihoods
//      parms is 1 by (K+1) matrix that already holds number of parameters
//	T    is a scalar that already holds number of time periods in sample
//      [ scalar ]

	args aic bic hqic ll parms T scalar

	if "`scalar'" == "" {
		local r = colsof(`aic')

		forvalues i = 1/`r' {
			mat `aic'[1,`i']  = (-2*`ll'[1,`i'] + 		///
				2*`parms'[1,`i'])/`T'
			mat `bic'[1,`i']  = (-2*`ll'[1,`i'] +		///
				ln(`T')*`parms'[1,`i'])/`T'
			mat `hqic'[1,`i'] = (-2*`ll'[1,`i'] +		///
				2*ln(ln(`T'))*`parms'[1,`i'])/`T'
		}
	}
	else {
		scalar `aic'  = (-2*`ll' + 2*`parms')/`T'
		scalar `bic'  = (-2*`ll' + ln(`T')*`parms')/`T'
		scalar `hqic' = (-2*`ll' + 2*ln(ln(`T'))*`parms')/`T'

	}
end

program define mkcns

	syntax , rownames(string)		///
		 colnames(string) 		///
		 cmat(name) 			///
		 constraints(string)		///
		 [				///
		 amat(name)			///
		 rmat(name)			///
		 transpose			///
		 ]

	foreach cns of local constraints {
		constraint get `cns'
		if r(defined) != 1 {
			di as err "constraint `cns' not defined"
			exit 498
		}
	}

	tempname b v cur_est cur_samp  C

	if "`amat'" == "" {
		tempname amat
	}

	if "`rmat'" == "" {
		tempname rmat
	}

	local rows : word count `rownames'
	local cols : word count `colnames'

	mat `b' = J(`rows', `cols', .1)

	mat rownames `b' = `rownames'
	mat colnames `b' = `colnames'

	if "`transpose'" != "" {
		mat `b' = vec(`b'')'
	}
	else {
		mat `b' = vec(`b')'
	}

	local names : colfullnames `b'

	mat `v' = `b''*`b'

	mat rownames `v' = `names'
	mat colnames `v' = `names'

	_estimates hold `cur_est', restore nullok varname(`cur_samp')

	ereturn post `b' `v'
	
	matrix makeCns `constraints'
	matrix dispCns, r
	matcproc `cmat' `amat' `rmat'

	mat `rmat' = `rmat'[1...,1..colsof(`rmat')-1]
	mat `amat' = `amat''
	_estimates unhold `cur_est'
	

end

program define GetSWest

	syntax 	, 	gmat(name)		///
			hmat(name)		///
			amat(name)		///
			omega(name)		///
			beta(name)		///
			alpha(name)		///
			s11(name)		///
			s01(name)		///
			s00(name)		///
			tolerance(real)		///
			ltolerance(real)	///
			iter_n(name)		///
			iterate(integer)	/// 
			t(name)			///
			k(integer)		///
			converge(name)		///
			[			///
			noLOg			///
			btrace			///
			toltrace		///
			]

	if "`log'" == "" {
		di
	}	

	tempname diff oldval vecpils ip1 omegai newval
	tempname alpha0 beta0 omega0 mdiff tval 


	scalar `diff' = .
	scalar `mdiff' = .

	lcfunc , 	alpha(`alpha') 		///
			beta(`beta') 		///
			omega(`omega') 		///
			t(`t')			///
			s00(`s00')		///
			s01(`s01')		///
			s11(`s11')		///
			val(`oldval')		///
			k(`k')
	

	mat `vecpils' = vec((`s01'*inv(`s11'))')
	mat `ip1'     = I(rowsof(`beta'))

	mat `alpha0' = `alpha'
	mat `beta0' = `beta'
	mat `omega0' = `omega'
	
	Tolck , converge(`converge') fdiff(`diff') 	///
		mdiff(`mdiff') ftolvalue(`ltolerance')	///
		btolvalue(`tolerance') iter_n(`iter_n')	///
		iterate(`iterate')

	while `converge' == 1 {
		scalar `iter_n' = `iter_n' + 1
		mat `omegai'  = syminv(`omega')
		GetBeta , 	hmat(`hmat')		///
				alpha(`alpha')		///
				omegai(`omegai')	///
				s11(`s11')		///
				vecpils(`vecpils')	///
				ip1(`ip1')		///
				beta(`beta')		///
				amat(`amat')

		GetAlpha , 	gmat(`gmat')		///
				omegai(`omegai')	///
				beta(`beta')		///
				s11(`s11')		///
				vecpils(`vecpils')	///
				alpha(`alpha')

		GetOmega , 	s00(`s00')		///
				s01(`s01')		///
				s11(`s11')		///
				alpha(`alpha')		///
				beta(`beta')		///
				omega(`omega')		

		lcfunc , 	alpha(`alpha') 		///
				beta(`beta') 		///
				omega(`omega') 		///
				t(`t')			///
				s00(`s00')		///
				s01(`s01')		///
				s11(`s11')		///
				val(`newval')		///
				k(`k')
	
		scalar `tval' = mreldif(`alpha0',`alpha')
		scalar `mdiff' = mreldif(`beta0',`beta')
		scalar `mdiff' = cond( `tval' > `mdiff', `tval', `mdiff')

		scalar `tval' = mreldif(`omega0',`omega')
		scalar `mdiff' = cond( `tval' > `mdiff', `tval', `mdiff')

		mat `alpha0' = `alpha'
		mat `beta0' = `beta'
		mat `omega0' = `omega'

		if "`log'" == "" {
			local iter = `iter_n'
			local iter_d = int(log10(`iter'))
			local iter_d2 = cond(5-`iter_d'> 0, 5-`iter_d',1)

			local iter_sp : di "{space `iter_d2'}"
di as txt "Iteration `iter':`iter_sp'log likelihood = " as res `newval' %10.9g	
		}

		scalar `diff' = reldif(`oldval',`newval')
		
		if "`toltrace'" != "" {
di as txt "{col 5}The relative difference in log likelihood values " ///
	"is   " as res `diff' %8.7g	
di as txt "{col 5}The relative difference in the coefficient " ///
	"vectors is " as res `mdiff' %8.7g	
		}

		if "`btrace'" != "" {
			local mdisp
			local rows = rowsof(`beta')
			local cols = colsof(`beta')
		
			di as txt "{col 14}beta"
			forvalues i = 1/`rows' {
				forvalues j = 1/`cols' {
					local val : display %10.9g	///
						`beta'[`i',`j']
					local mdisp "`mdisp'`val'  "	
				}
			}
			di as res "{p 13 13}`mdisp'{p_end}"

			local mdisp
			local rows = rowsof(`alpha')
			local cols = colsof(`alpha')
		
			di as txt "{col 14}alpha"
			forvalues i = 1/`rows' {
				forvalues j = 1/`cols' {
					local val : display %10.9g	///
						`alpha'[`i',`j']
					local mdisp "`mdisp'`val'  "	
				}
			}
			di as res "{p 13 13}`mdisp'{p_end}"
		}

		scalar `oldval' = `newval'
		Tolck , converge(`converge') fdiff(`diff') 	///
			mdiff(`mdiff') ftolvalue(`ltolerance')	///
			btolvalue(`tolerance') iter_n(`iter_n')	///
			iterate(`iterate')
	}

end

program define Tolck
	syntax , converge(name) 		///
		fdiff(name)			///
		iter_n(name)			///
		iterate(integer)		///
		ftolvalue(real)			///
		btolvalue(real)			///
		[				///
		mdiff(name)			///
		]

		if `iterate' == `iter_n' {
			scalar `converge' = 430
			exit
		}

		scalar `converge' = max( 				///
				cond(`fdiff' < `ftolvalue',0,1), 	///
				cond(`mdiff' < `btolvalue' ,0,1)  )
end

program define LLval 

	syntax , 	alpha(name)		///
			beta(name)		///
			omega(name)		///
			t(name)			///
			val(name)		///
			k(integer)
	
	tempname pi omegai

	mat `pi' = `alpha'*`beta''
	
	scalar `val'  = -.5*`t'*`k'*ln(2*_pi) -		///
		.5*`t'*ln(abs(det(`omega'))) -.5*`t'*`k'

end

program define lcfunc 

	syntax , 	alpha(name)		///
			beta(name)		///
			omega(name)		///

⌨️ 快捷键说明

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