📄 svar.ado
字号:
*! version 1.2.2 01apr2005
program define svar, eclass byable(recall) sort
version 8.0
if replay() {
if "`e(cmd)'" != "svar" {
error 301
}
if _by() {
error 190
}
syntax [ , Level(cilevel) Full]
Dheadernew
if "`e(small)'" != "" {
local dfr = e(df_r)
ETable2, level(`level') dfr(`dfr')
}
else {
ETable2, level(`level')
}
exit
}
syntax varlist(ts) [if] [in] , /*
*/ [ACONstraints(numlist) /* svar
*/ AEq(string) /* svar
*/ ACns(string) /* svar
*/ BCONstraints(numlist) /* svar
*/ BEq(string) /* svar
*/ BCns(string) /* svar
*/ LRCONstraints(numlist) /* svar
*/ LREq(string) /* svar
*/ LRCns(string) /* svar
*/ noIDENcheck /* svar
*/ Full /* undocumented
*/ var /* svar
*/ from(string) /* svar
*/ noLOg /* svar
*/ LAgs(numlist integer >0 sort ) /* var
*/ EXog(varlist ts) /* var
*/ VARConstraints(string) /* var
*/ noCONStant DFK /* var
*/ LUTstats noBIGf /* var
*/ SMall /* var
*/ Level(cilevel) /* var
*/ noISLOG /* var
*/ noISure /* var
*/ ISITerate(numlist max =1 integer >0 )/* var
*/ ISTOLerance(numlist max =1 >0 <1 ) /* var
*/ CONSTraints(numlist) /* undocumented
*/ * ] /* mlopts */
/* constraints() option appears for error checking only. constraints()
* are not allowed but it must be explicitly parsed or mlopts will
* parse it.
*/
mlopts mlopts, `options'
if "`islog'" != "" {
local islog nolog
}
if "`isiterate'" != "" {
local isiterate "iterate(`isiterate')"
}
if "`istolerance'" != "" {
local istolerance "tolerance(`istolerance')"
}
if "`isure'" != "" & "`varconstraints'" == "" {
di as err "{cmd:isure} cannot be specified without " /*
*/ "{cmd:varconstraints}"
exit 198
}
if "`islog'" != "" & "`varconstraints'" == "" {
di as err "{cmd:noislog} cannot be specified without " /*
*/ "{cmd:constraints}"
exit 198
}
if "`istolerance'" != "" & "`varconstraints'" == "" {
di as err "{cmd:istolerance()} cannot be specified without "/*
*/ "{cmd:varconstraints}"
exit 198
}
if "`isiterate'" != "" & "`varconstraints'" == "" {
di as err "{cmd:isiterate()} cannot be specified without "/*
*/ "{cmd:varconstraints}"
exit 198
}
if "`isure'" != "" {
if "`isiterate'" != "" {
di as err "{cmd:isiterate} cannot be specified "/*
*/ "with {cmd:noisure}"
exit 198
}
if "`istolerance'" != "" {
di as err "{cmd:istolerance} cannot be specified "/*
*/ "with {cmd:noisure}"
exit 198
}
if "`islog'" != "" {
di as err "{cmd:noislog} cannot be specified "/*
*/ "with {cmd:noisure}"
exit 198
}
}
if "`constraints'" != "" {
di as err "constraints() not allowed"
exit 198
}
if "`aconstraints'`bconstraints'`acns'`bcns'`aeq'`beq'" == "" /*
*/ & "`lreq'`lrconstraints'`lrcns'" == "" {
di as err "no constraints specified"
exit 198
}
if "`aconstraints'`bconstraints'`acns'`bcns'`aeq'`beq'" != "" /*
*/ & "`lreq'`lrconstraints'`lrcns'" != "" {
di as err "short-run and long-run constraints may not "/*
*/ "both be specified"
exit 198
}
marksample touse
qui tsset
local tvar `r(timevar)'
local pvar `r(panelvar)'
if "`tvar'" == "" {
di as err "{help tsset##|_new: tsset} your data before using " /*
*/ "{help svar##|_new:svar}"
exit 498
}
qui sort `pvar' `tvar'
if "`exog'" != "" {
markout `touse' `exog'
}
/* drop collinear variables */
_rmcoll `varlist' if `touse', `constant'
local varlist `r(varlist)'
if "`lags'" == "" {
local lags 1 2
}
if "`constant'" == "" {
local ncons 1
}
else {
local ncons 0
}
if "`varconstraints'" != "" {
local cnslist_var `varconstraints'
local varconstraints "constraints(`varconstraints')"
}
markout `touse' L(`lags').(`varlist')
local nlags : word count `lags'
local mlag : word `nlags' of `lags'
qui count if `touse'
local N = r(N)
if `mlag' > r(N)-1 {
di as err "you cannot fit a model with `nlags' and `N'"/*
*/ " observations"
}
if "`exog'" != "" {
_rmcoll `exog' if `touse', `constant'
local exog `r(varlist)'
tsunab flist : L(0 `lags').(`varlist') `exog'
_rmcoll `flist' if `touse', `constant'
local flist2 `r(varlist)'
local same : list flist == flist2
if `same' != 1 {
di as err "{p 0 4}the exogenous variables may " /*
*/ "not be collinear with the " /*
*/ "dependent variables, or their " /*
*/ "lags{p_end}"
exit 198
}
}
if "`exog'" != "" {
local exogm "exog(`exog')"
}
local nexog : word count `exog'
/* parse acns() and bcns() into acnsmat and bcnsmat, if specified */
local neqs: word count `varlist'
if "`lreq'`lrconstraints'`lrcns'" == "" {
if "`aconstraints'`acns'`aeq'" == "" {
tempname aeqi
mat `aeqi' = I(`neqs')
local aeq `aeqi'
}
if "`bconstraints'`bcns'`beq'" == "" {
tempname beqi
mat `beqi' = I(`neqs')
local beq `beqi'
}
if "`acns'" != "" {
tempname acnsmat
_svar_mkmatcns, mat(`acns') name(a) neqs(`neqs') /*
*/ tname(`acnsmat') type(acns())
local imp_cnsa `r(svar_cnslist)'
}
if "`bcns'" != "" {
tempname bcnsmat
_svar_mkmatcns, mat(`bcns') name(b) neqs(`neqs') /*
*/ tname(`bcnsmat') type(bcns())
local imp_cnsb `r(svar_cnslist)'
}
if "`aeq'" != "" {
tempname aeqmat
_svar_mkmatcns, mat(`aeq') name(a) neqs(`neqs') /*
*/ tname(`aeqmat') eq type(aeq())
local imp_cnsa `imp_cnsa' `r(svar_cnslist)'
}
if "`beq'" != "" {
tempname beqmat
_svar_mkmatcns, mat(`beq') name(b) neqs(`neqs') /*
*/ tname(`beqmat') eq type(beq())
local imp_cnsb `imp_cnsb' `r(svar_cnslist)'
}
}
else {
if "`lrcns'" != "" {
tempname lrcnsmat
_svar_mkmatcns, mat(`lrcns') name(c) neqs(`neqs') /*
*/ tname(`lrcnsmat') type(lrcns())
local imp_cnski `imp_cnski' `r(svar_cnslist)'
}
if "`lreq'" != "" {
tempname lreqmat
_svar_mkmatcns, mat(`lreq') name(c) neqs(`neqs') /*
*/ tname(`lreqmat') eq type(lreq())
local imp_cnski `imp_cnski' `r(svar_cnslist)'
}
}
if "`var'" == "" {
local dispvar nodisplay
}
else {
local dispvar
}
capture noi var `varlist' if `touse', lags(`lags') /*
*/ `exogm' `dfk' `constant' `lutstats' /*
*/ `bigf' level(`level') `small' /*
*/ `varconstraints' `islog' `isure' /*
*/ `isiterate' `istolerance' `dispvar'
if _rc > 0 {
di as err "{cmd:var} returned error " _rc
di as err "check the specification of the " /*
*/ "underlying VAR"
if "`imp_cnsa'`imp_cnsb'`imp_cnski'" != "" {
constraint drop `imp_cnsa' `imp_cnsb' `imp_cnski'
}
exit _rc
}
/* make tempnames and tempvars */
tempname starts sigma b_var v_var bf_var vf_var G_var e_var /*
*/ b_svar v_svar ll_svar sbic_var hqic_var aic_var /*
*/ fpe_var detsig_var detsig_ml_var ll_var /*
*/ a_est b_est Cns Cns_var ll_dfk_var klr_est
/* save off info from VAR */
estimates store `e_var'
mat `b_var' = e(b)
mat `v_var' = e(V)
mat `bf_var' = e(bf)
mat `G_var' = e(G)
mat `Cns_var' = e(Cns)
mat `sigma' = e(Sigma)
local endog_var `varlist'
local exog_var `e(exog)'
local eqnames_var `e(eqnames)'
local depvar_var `varlist'
local nocons_var `e(nocons)'
local tsfmt "`e(tsfmt)'"
local timevar "`e(timevar)'"
local neqs = e(neqs)
local df_eq_var = e(df_eq)
local k_var = e(k)
local tparms_var = e(tparms)
scalar `sbic_var' = e(sbic)
scalar `hqic_var' = e(hqic)
scalar `aic_var' = e(aic)
scalar `fpe_var' = e(fpe)
local mlag_var = e(mlag)
local tmax_var = e(tmax)
local tmin_var = e(tmin)
local N_gaps_var = e(N_gaps)
local T_var = e(T)
local lags_var `e(lags)'
scalar `detsig_var' = e(detsig)
scalar `detsig_ml_var' = e(detsig_ml)
scalar `ll_var' = e(ll)
if "`dfk'" != "" {
scalar `ll_dfk_var' = e(ll_dfk)
}
if "`small'" != "" {
local df_r_var = e(df_r)
forvalues i = 1/`neqs' {
tempname rmse_`i'_var r2_`i'_var ll_`i'_var /*
*/ F_`i'_var
local obs_`i'_var = e(obs_`i')
local k_`i'_var = e(k_`i')
scalar `rmse_`i'_var' = e(rmse_`i')
scalar `r2_`i'_var' = e(r2_`i')
scalar `ll_`i'_var' = e(ll_`i')
local df_m`i'_var = e(df_m`i')
local df_r`i'_var = e(df_r`i')
scalar `F_`i'_var' = e(F_`i')
}
}
else {
forvalues i = 1/`neqs' {
tempname rmse_`i'_var r2_`i'_var ll_`i'_var /*
*/ chi2_`i'_var
local obs_`i'_var = e(obs_`i')
local k_`i'_var = e(k_`i')
scalar `rmse_`i'_var' = e(rmse_`i')
scalar `r2_`i'_var' = e(r2_`i')
scalar `ll_`i'_var' = e(ll_`i')
local df_m`i'_var = e(df_m`i')
scalar `chi2_`i'_var' = e(chi2_`i')
}
}
global T_sigma `sigma'
global T_neqs `neqs'
global T_T = `N'
if "`lreq'`lrconstraints'`lrcns'" == "" {
_mkpmats, neqs(`neqs')
local aparms "`r(aparms)'"
local bparms "`r(bparms)'"
local cns_a `aconstraints' `imp_cnsa'
local cns_b `bconstraints' `imp_cnsb'
foreach cnsitem of local cns_a {
constraint get `cnsitem'
if "`cns_a_list'" == "" {
local cns_a_list "`r(contents)'"
}
else {
local cns_a_list "`cns_a_list':`r(contents)'"
}
}
foreach cnsitem of local cns_b {
constraint get `cnsitem'
if "`cns_b_list'" == "" {
local cns_b_list "`r(contents)'"
}
else {
local cns_b_list "`cns_b_list':`r(contents)'"
}
}
local fullcns `aconstraints' `bconstraints'
local fullcns `fullcns' `imp_cnsa' `imp_cnsb'
if "`imp_cnsa'`imp_cnsb" != "" {
local impcns "impcns(`imp_cnsa' `imp_cnsb') "
}
if "`from'" == "" {
mat `starts' = J(1,2*`neqs'*`neqs',1)
local base = 2*`neqs'*`neqs'
forvalues i = 1/`base' {
mat `starts'[1,`i'] = 1+`i'/100
}
local init "init(`starts', copy)"
}
else {
local init "init(`from')"
capture ml model d2 _svard2 `aparms' `bparms' /*
*/ if `touse', /*
*/ const(`fullcns') max `mlopts' search(off) /*
*/ nopreserve svarconst `init' iter(0) nolog
if _rc > 0 {
di as err "initial values not feasible"
if "`imp_cnsa'`imp_cnsb'" != "" {
constraint drop `imp_cnsa' `imp_cnsb'
}
exit _rc
}
mat `starts' = e(b)
}
if "`idencheck'" == "" {
_svariden , b(`starts') cnsa(`cns_a') /*
*/ cnsb(`cns_b') neqs(`neqs') /*
*/ sigma(`sigma') bigt(`N') `impcns'
}
di as txt "Estimating short-run parameters"
capture noi ml model d2 _svard2 `aparms' `bparms' /*
*/ if `touse', /*
*/ const(`fullcns') max `mlopts' search(off) /*
*/ nopreserve svarconst `init' `log'
if _rc > 0 {
if "`imp_cnsa'`imp_cnsb'" != "" {
constraint drop `imp_cnsa' `imp_cnsb'
}
exit _rc
}
mat `b_svar' = e(b)
}
else {
tempname abar abari
_getAbar , nlags(`nlags') neqs(`neqs') abar(`abar') /*
*/ nexog(`nexog') ncons(`ncons')
global T_Abar `abar'
capture mat `abari' = inv(`abar')
if _rc > 0 {
di as err "Matrix (I-A_1-A_2...-A_p) not invertible"
exit 498
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -