📄 _vecu.ado
字号:
matrix rownames `parms' = parameters
matrix rownames `bic' = SBIC
matrix rownames `hqic' = HQIC
matrix rownames `aic' = AIC
matrix rownames `ll' = LL
matrix colnames `maxm' = `cnames0'
matrix colnames `tracem' = `cnames0'
matrix colnames `lam' = `cnames1'
matrix colnames `parms' = `cnames2'
matrix colnames `bic' = `cnames2'
matrix colnames `hqic' = `cnames2'
matrix colnames `aic' = `cnames2'
matrix colnames `ll' = `cnames2'
ereturn clear
// save off e() for vecrank
eret mat ll `ll'
eret mat aic `aic'
eret mat sbic `bic'
eret mat hqic `hqic'
eret mat k_rank `parms'
eret mat lambda `lam'
eret mat trace `tracem'
eret mat max `maxm'
eret scalar N = `T'
eret scalar k_eq = `K'
eret scalar k_dv = `K'
eret scalar n_lags = `p'
eret scalar tmin = `tmin'
eret scalar tmax = `tmax'
eret scalar k_ce95 = `r_95' - 1
eret scalar k_ce99 = `r_99' - 1
eret scalar k_cesbic = `r_bic' - 1
eret scalar k_cehqic = `r_hqic' - 1
eret local trend "`trend'"
eret local tsfmt "`tsfmt'"
if "`seasonal'" != "" {
eret local seasonal "`stype'"
}
else if "`sindicators'" != "" {
eret local sindicators "`sindicators'"
}
if "`reduce'" != "" {
eret local reduce_opt `reduce'
}
eret local reduce_lags "`reduced'"
eret local cmd "vecrank"
exit
}
if "`vest'" != "" {
if "`afrom'" != "" {
cap noi confirm matrix `afrom'
if _rc {
di as err "afrom(`afrom') does not " ///
"specify a matrix"
exit 198
}
tempname alpha_st alpha_stp
mat `alpha_st' = J(`K',`rank',0)
local acols = `K'*`rank'
mat `alpha_stp' = `afrom''
capture va2a , vec_alphap(`alpha_stp') alpha(`alpha_st')
if _rc > 0 {
di as err "starting value vector for " ///
"alpha does not have the " ///
"correct dimension"
di as err "starting value vector for " ///
"alpha must be 1 by `acols'"
exit 498
}
}
if "`bfrom'" != "" {
cap noi confirm matrix `bfrom'
if _rc {
di as err "bfrom(`bfrom') does not " ///
"specify a matrix"
exit 198
}
tempname beta_st beta_stp
mat `beta_st' = J(`nz1',`rank',0)
local bcols = `nz1'*`rank'
mat `beta_stp' = `bfrom''
capture vb2b , vecbeta(`beta_stp') beta(`beta_st')
if _rc {
di as err "starting value vector for " ///
"beta does not have the " ///
"correct dimension"
di as err "starting value vector for " ///
"beta must be 1 by `bcols'"
exit 498
}
}
tempname beta2 temp tempb beta_v alpha2 betab
// section for with and without constraints
tempname beta2m b betaJ alphaJ omegaJ
// betab contains r, unidentified cointegrating vectors
mat `betab' = `beta'[1...,1..`rank']
mat `betab' = syminv(`betab''*`betab')
// identification check
local r_cnt 0
forvalues i = 1/`rank' {
if `betab'[`i', `i'] > 1e-15 {
local ++r_cnt
}
}
if `r_cnt' < `rank' {
di as err "the parameters of the " ///
"cointegrating equations are " ///
"not identified by the sample"
di as err "check your sample and the " ///
"number of lags specified"
exit 498
}
// section without constraints
// beta2 is Johansen identified beta
// betaJ is Johansen identified beta
mat `beta2' = `beta'[1...,1..`rank']* ///
inv((I(`rank'),J(`rank', ///
colsof(`beta')-`rank',0))* ///
`beta'[1...,1..`rank'])
mat colnames `beta2' = `ce_lab'
mat rownames `beta2' = `varlist' `z1exn'
mat `betaJ' = `beta2'
// alpha2 is Johansen identified alpha
// alphaJ is Johansen identified alpha
mat `alpha2' = `s01'*`beta2'*syminv(`beta2''*`s11'*`beta2')
mat colnames `alpha2' = `ce_lab'
mat rownames `alpha2' = `varlist'
mat `alphaJ' = `alpha2'
mat `omega' =( `s00' - `alpha2'*`beta2''*`s01'')
mat colnames `omega' = `diffvarlist2'
mat rownames `omega' = `diffvarlist2'
// omegaJ is Johansen identified omega
mat `omegaJ' = `omega'
// section with constraints
// make constraints on alpha or beta
if "`aconstraints'`bconstraints'" != "" {
local constraints constraints
if "`aconstraints'" != "" {
tempname gmat tmat jmat
mkcns , rownames(`diffvarlist2') ///
colnames(`Lce_lab') ///
cmat(`gmat') amat(`tmat') ///
constraints(`aconstraints') ///
transpose
mat `jmat' = J(rowsof(`tmat'), ///
colsof(`tmat'), 0)
if mreldif(`tmat', `jmat') > 1e-16 {
di as err "restrictions on alpha " ///
"are not homogeneous"
exit 498
}
local nacns = r(k)
local acnsmac "`r(cns1)'"
forvalues j = 2/`nacns' {
local acnsmac "`acnsmac':`r(cns`j')'"
}
}
else {
local gmat NONE
}
if "`bconstraints'" != "" {
tempname hmat amat rmat
mkcns , rownames(`endog_vars' `z1exn') ///
colnames(`ce_lab') ///
cmat(`hmat') ///
constraints(`bconstraints') ///
amat(`amat') rmat(`rmat')
local nbcns = r(k)
local bcnsmac "`r(cns1)'"
forvalues j = 2/`nbcns' {
local bcnsmac "`bcnsmac':`r(cns`j')'"
}
}
else {
local hmat NONE
local amat NONE
}
// get starting values here
tempname part1 part2i rkpart2 part2 temp vecs vals
tempname betao0 vps2 oi iter_n converge
if "`beta_st'" != "" {
local bstarts *
mat `beta2' = `beta_st'
}
mat `oi' = syminv(`omega')
mat `vps2' = vec((`s01'*inv(`s11'))')
if "`alpha_st'" != "" {
local astarts *
mat `alpha2' = `alpha_st'
}
else {
if "`gmat'" != "NONE" {
GetAlpha , ///
gmat(`gmat') ///
omegai(`oi') ///
beta(`beta2') ///
s11(`s11') ///
vecpils(`vps2') ///
alpha(`alpha2')
}
else {
mat `alpha2' = ///
`s01'*`beta2'* ///
syminv(`beta2''*`s11'*`beta2')
}
}
GetOmega , s00(`s00') ///
s01(`s01') ///
s11(`s11') ///
alpha(`alpha2') ///
beta(`beta2') ///
omega(`omega')
scalar `iter_n' = 0
GetSWest , gmat(`gmat') ///
hmat(`hmat') ///
amat(`amat') ///
omega(`omega') ///
beta(`beta2') ///
alpha(`alpha2') ///
s11(`s11') ///
s01(`s01') ///
s00(`s00') ///
tolerance(`tolerance') ///
ltolerance(`ltolerance') ///
t(`T') ///
k(`K') ///
iter_n(`iter_n') ///
iterate(`iterate') ///
converge(`converge') ///
`log' ///
`btrace' ///
`toltrace'
mat rownames `beta2' = `endog_vars' `z1exn'
mat colnames `beta2' = `ce_lab'
GetDF , gmat(`gmat') hmat(`hmat') ///
beta(`beta2') alpha(`alpha2') ///
k(`K') nz1(`nz1') rmat(`rmat') ///
rank(`rank')
local beta_iden = r(beta_iden)
local beta_iden_cnt = r(beta_iden_cnt)
local df = r(jacob_hat_rank)
local jacob_rank = r(jacob_hat_rank)
local jacob_cols = r(jacob_cols)
local alphabeta_iden = ///
(`jacob_cols'<=`jacob_rank')
local df_lr = r(jacob_hat_lrdf)
local parms1 = `K'*`nz2' + `df'
local df = int(`parms1'/`K')
}
else {
local parms1 =(`K'*`nz2'+(`K'+`nz1'-`rank')*`rank')
local df = int(`parms1'/`K')
local hmat NONE
local amat NONE
local gmat NONE
local beta_iden = 1
local beta_iden_cnt = `rank'^2
local df_lr = 0
}
tempname llvalue aic bic hqic detsig llvalueJ
scalar `detsig' = det(`omega')
LLval , alpha(`alpha2') beta(`beta2') omega(`omega') ///
t(`T') k(`K') val(`llvalue')
LLval , alpha(`alphaJ') beta(`betaJ') omega(`omegaJ') ///
t(`T') k(`K') val(`llvalueJ')
MKic `aic' `bic' `hqic' `llvalue' `parms1' `T' scalar
// now get Gamma_i and VCE's using alpha2, beta2 and omega obtained with or
// without constraints
tempname b V bvec
// bvec holds vec(beta) beta2m holds beta in matrix form
mat `beta2m' = `beta2'
mat `bvec' = vec(`beta2')'
mat `beta2' = vec(`beta2')'
// Make ceq`j' tempvars concatenate them into zbeta, ceq_vars, ceqs and zbetan
// use names _ce1, _ce2, ... not tempnames
local j 0
foreach ceq of local ce_lab {
local ++j
local zbeta `zbeta' L._ce`j'
local ceqs `ceqs' _ce`j'
local ceq_vars `ceq_vars' L._ce`j'
local zbetan `zbetan' L._ce`j'
}
Mkceqj `ceqs', beta2(`beta2')
// make constraints on temporary variables that hold cointegrating equations
tsunab xvars : `varlist'
// exclude constant
local zbeta `zbeta' `z2base' `sindicators'
local zbetan `zbetan' `z2t_names'
// do regression
tempname bt mu0 p0 mmss mu1
tsunab Ldiffvarlist : L.(`diffvarlist')
qui mat accum `mmss' = `ceq_vars' `Ldiffvarlist', nocons dev
mat `mmss' = syminv(`mmss')
Getb `diffvarlist' if `touse', ///
pm1(`pm1') ///
exog(`z3t') ///
exfront(`ceq_vars') ///
df(`df') ///
bmat(`b') ///
vmat(`V') ///
dvlist2(`diffvarlist2') ///
zbetan(`zbetan') ///
const(`aconstraints')
foreach evar of local diffvarlist2 {
if "`trend'" == "constant" | ///
"`trend'" == "rtrend" | ///
"`trend'" == "trend" {
mat `mu0' = (nullmat(`mu0'), ///
`b'[1,"`evar':_cons"] )
}
}
if "`trend'" == "trend" {
foreach evar of local diffvarlist2 {
mat `mu1' = (nullmat(`mu1'), ///
`b'[1,"`evar':_trend"] )
}
}
tempname beta_s
if "`trend'" == "rconstant" | "`trend'" == "rtrend" {
mat `beta_s' = `beta2m'[1..rowsof(`beta2m')-1,1...]
}
else {
mat `beta_s' = `beta2m'
}
tempname betao alphao
_vecortho `beta_s' `betao'
_vecortho `alpha2' `alphao'
if "`trend'" == "constant" | "`trend'" == "rtrend" ///
| "`trend'" == "trend" {
mat `p0' = syminv(`alpha2''*`alpha2')*`alpha2''*`mu0''
mat rownames `p0' = `ce_lab'
mat colnames `p0' = _cons
if "`trend'" == "trend" {
tempname p1
mat `p1' = syminv(`alpha2''*`alpha2')* ///
`alpha2''*`mu1''
mat rownames `p1' = `ce_lab'
mat colnames `p1' = _trend
tempname beta3
mat `beta3' = vec((`beta2m' \ `p1'' \ `p0''))'
drop `ceqs'
Mkceqj `ceqs', beta2(`beta3')
}
else {
tempname beta3
mat `beta3' = vec((`beta2m' \ `p0''))'
drop `ceqs'
Mkceqj `ceqs', beta2(`beta3')
}
Getb `diffvarlist' if `touse', ///
pm1(`pm1') ///
exog(`z3t') ///
exfront(`ceq_vars') ///
df(`df') ///
bmat(`b') ///
vmat(`V') ///
dvlist2(`diffvarlist2') ///
zbetan(`zbetan') ///
const(`aconstraints') ///
quietly
}
// save of equation level stats
forvalues i = 1/`K' {
tempname obs_`i' k_`i' rmse_`i' r2_`i' ///
ll_`i' df_m`i' chi2_`i'
scalar `k_`i'' = e(k_`i')
scalar `rmse_`i'' = e(rmse_`i')
scalar `r2_`i'' = e(r2_`i')
scalar `df_m`i'' = e(df_m`i')
scalar `chi2_`i'' = e(chi2_`i')
}
tempname omegai b1 b2 b3 b4 H Itheta Ithetai pi
tempname rho base
mat `omegai' = syminv(`omega')
mat `rho' = `alpha2''*`omegai'*`alpha2'
if "`constraints'" == "" {
mat `H' = J(`rank',`nz1'-`rank', 0) \ I(`nz1'-`rank')
mat `base' = `H''*`s11'*`H'
mat `Ithetai' = (1/(`T'-`df'))*(syminv(`rho' # `base'))
tempvar H2
mat `H2' = I(`rank') # `H'
mat `Ithetai' = `H2'*`Ithetai'*`H2''
}
else {
if "`hmat'" == "NONE" {
mat `base' = `s11'
mat `Ithetai' = (1/(`T'-`df'))*(syminv(`rho' # `base'))
}
else {
mat `Ithetai' = syminv(`hmat''*(`rho' # `s11')*`hmat')
mat `Ithetai' = (1/(`T'-`df'))*`hmat'*`Ithetai'*`hmat''
}
}
local bnames : colfullnames `beta2'
mat colnames `Ithetai' = `bnames'
mat rownames `Ithetai' = `bnames'
if "`trend'" == "constant" | "`trend'" == "rtrend" {
tempname block
mat `beta2' = `beta2m' \ `p0''
mat `beta2' = vec(`beta2')'
mat `block' = I(`rank') # (I(`nz1') \ J(1,`nz1',0))
mat `Ithetai' = ( `block'*`Ithetai'*`block'')
local bnames : colfullnames `beta2'
mat colnames `Ithetai' = `bnames'
mat rownames `Ithetai' = `bnames'
}
if "`trend'" == "trend" {
tempname block
mat `beta2' = `beta2m' \ `p1'' \ `p0''
mat `beta2' = vec(`beta2')'
mat `block' = I(`rank') # (I(`K') \ J(2,`K',0))
mat `Ithetai' = ( `block'*`Ithetai'*`block'')
local bnames : colfullnames `beta2'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -