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

📄 vecirf_create.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
字号:
*! version 1.0.5  16jul2004
program define vecirf_create
	version 8.2

	syntax name(id=irfname name=irfname)		///
		[,					///
		STep(numlist integer >0 max=1)		///
		replace 				///
		set(string)				///
		noDFK					/// undocumented
		]


	preserve
	_ckirfset , set(`set')	

	if "`step'" == "" local step 1

	local stepm1 = `step' - 1

	_virf_nlen `irfname'  /* note this returns length of name in r(len)
			    *  but only checking is needed so do not
			    * store length
			    */
	qui varirf des

	if "`replace'" != "" {
		capture irf drop `irfname'
		if _rc > 0 { 
			di as txt `"irfname `irfname' not found in $S_vrffile"'
		}
	}	
	
	local cnames `r(irfnames)'
	local tmp : subinstr local cnames "`irfname'" "`irfname'", 	/*
	 	*/ word count(local found)
	if `found' > 0 {
		di as err `"irfname `irfname' is already in $S_vrffile"'
		exit 498
	}	

	_ckvec vecirf_create

	local k = e(k_eq)
	local trend "`e(trend)'"
	local lags = e(n_lags)
	local tmin = e(tmin)
	local tmax = e(tmax)
	local tsfmt "`e(tsfmt)'"
	local tvar "`e(tvar)'"
	local veccns "`e(aconstraints)'"
	if "`veccns'" != "" {
		local veccns "`veccns':`e(bconstraints)'"
	}
	else{
		local veccns "`e(bconstraints)'"
	}
	local rank = e(k_ce)
	local sind "`e(sindicators)'"

	forvalues i = 0/`step' {
		tempname phi`i' theta`i' fevd`i' mse`i'
		local phi_names `phi_names'  `phi`i''
		local theta_names `theta_names' `theta`i''  
		local fevd_names `fevd_names' `fevd`i''
		local mse_names `mse_names' `mse`i''
	}

	tempname omega dfks p0

	if "`dfk'" == "" {
		scalar `dfks' = e(N)/(e(N)-e(df_m))
	}
	else {
		scalar `dfks' = 1
	}	

	mat `omega' = `dfks'*e(omega)
	mat `p0' = cholesky(`omega')

	vec_mkphi `phi_names' 
	vec_mkphi `theta_names' , p0mat(`p0') 
	vec_fevd  `fevd_names', pmats(`theta_names')
	vec_fevd  `mse_names', pmats(`theta_names') mse

	tsunab names : `e(endog)'
	local names : subinstr local names "." "_", all

	tempfile irfwork
	tempname tmp_results

	local mylabs step responseid impulseid
	local mylabs "`mylabs' irf cirf oirf coirf sirf stdirf stdcirf stdoirf"
	local mylabs "`mylabs' stdcoirf stdsirf fevd sfevd mse"
	local mylabs "`mylabs' stdfevd stdsfevd" 

	qui postfile `tmp_results' `mylabs' using  "`irfwork'", double replace

	forvalues s=0/`step' {
		forvalues j = 1/`k' {
			forvalues i = 1/`k' {
post `tmp_results' (`s') (`i') (`j')					///
	(`phi`s''[`i',`j']) (`phi`s''[`i',`j']) 			///	
	(`theta`s''[`i',`j']) (`theta`s''[`i',`j']) (.) (.) (.) (.)	///
	(.) (.) (`fevd`s''[`i',`j']) (.) (`mse`s''[`i',`i']) (.) (.) 
			}
		}
	}
	postclose `tmp_results'

	qui use "`irfwork'", clear
	sort impulseid responseid step
	qui by impulseid responseid: replace cirf = sum(cirf)
	qui by impulseid responseid: replace coirf = sum(coirf)
	qui gen str15 irfname = "`irfname'"
	qui gen str13 response = ""
	qui gen str13 impulse = ""

	forvalues i = 1/`k' {
		local nme : word `i' of `names'
		qui replace response = "`nme'" if responseid == `i'
		qui replace impulse  = "`nme'" if impulseid  == `i'
	}
	
	qui label var cirf "cumulative irf"
	qui label var irf  "impulse response function (irf)"
	qui label var oirf "orthogonalized irf"
	qui label var coirf "cumulative orthogonalized irf"
	qui label var sirf  `"structural irf"'
	qui label var mse  "SE of forecast of response var"
	qui label var fevd "fraction of mse due to impulse"
	qui label var sfevd "(structural) fraction of mse due to impulse"
	qui label var step  "step"
	qui label var irfname "name of results"
	qui label var impulse "impulse variable"
	qui label var response "response variable"
	qui replace stdirf=sqrt(stdirf)
	qui replace stdcirf=sqrt(stdcirf)
	qui replace stdoirf=sqrt(stdoirf)
	qui replace stdcoirf=sqrt(stdcoirf)
	qui replace stdsirf=sqrt(stdsirf)
	qui label var stdirf "std error of irf"
	qui label var stdoirf "std error of oirf"
	qui label var stdcirf "std error of cirf"
	qui label var stdcoirf "std error of coirf"
	qui label var stdsirf "std error of sirf"
	qui replace mse=sqrt(mse)
	qui replace stdfevd=sqrt(stdfevd)
	qui label var stdfevd "std error of fevd"
	qui replace stdsfevd=sqrt(stdsfevd)
	qui label var stdsfevd "std error of sfevd"
	
	_virf_char , put(irfname(`irfname') vers(1.1) /*
		*/ order(`names') step(`step') 		/*
		*/ model(vec) exog(none)		/*
		*/ constant(`trend') 			/*
		*/ varcns(unconstrained)		/*
		*/ stderr(none)				/*
		*/ reps(.)				/*
		*/ tmin(`tmin')				/*
		*/ tmax(`tmax')				/*
		*/ tsfmt(`tsfmt')			/*
		*/ timevar(`tvar')			/*
		*/ lags(`lags')				/*
		*/ svarcns(".")				/*
		*/ rank(`rank')				/*
		*/ trend(`trend')			/*
		*/ veccns(`veccns')			/*
		*/ sind(`sind')				/*
		*/)

	drop impulseid responseid
	sort impulse response
	qui save "`irfwork'", replace

	varirf_add `irfname' , using("`irfwork'") exact	
	restore	


end

⌨️ 快捷键说明

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