Hi, i am estimating a trivariate VAR(1)-GARC(1,1) BEKK model
I would like to restrict the covariance matrix to be an upper triangular , for instance A(2,1)=A(3,1)=A(3,2)=0 and B(2,1)=B(3,1)=B(3,2)=0
How can i do that ?
Thanx in advance
Regards
Maria
MGARCH restrictions
Re: MGARCH restrictions
You have to use MAXIMIZE to run a non-standard type of model like that. By the way, this won't make the covariance matrix upper triangular (which, by symmetry, would mean it's diagonal). Instead, it creates a "causal chain" for the variances.
The GARCHMV.PRG example doesn't include a MAXIMIZE coding for BEKK. I'm including that below. If you knock out the +restrictions on the MAXIMIZE, you'll get a standard BEKK. Note that the restrictions are for the A and B matrices being upper triangular, not lower. That's due to the way that %MQFORM works.
The GARCHMV.PRG example doesn't include a MAXIMIZE coding for BEKK. I'm including that below. If you knock out the +restrictions on the MAXIMIZE, you'll get a standard BEKK. Note that the restrictions are for the A and B matrices being upper triangular, not lower. That's due to the way that %MQFORM works.
Code: Select all
open data g10xrate.xls
data(format=xls,org=columns) 1 6237 usxjpn usxfra usxsui
*
set xjpn = 100.0*log(usxjpn/usxjpn{1})
set xfra = 100.0*log(usxfra/usxfra{1})
set xsui = 100.0*log(usxsui/usxsui{1})
*
* Estimation using MAXIMIZE
* The initial few lines of this set the estimation range, which needs to be done
* explicitly, and the number of variables. Then, vectors for the dependent
* variables, residuals and residuals formulas are set up. The SET instructions
* copy the dependent variables over into the slots in the vector of series.
*
compute gstart=2,gend=6237
compute n=3
dec vect[series] y(n) u(n)
dec vect[frml] resid(n)
set y(1) = xjpn
set y(2) = xfra
set y(3) = xsui
*
* This is specific to a mean-only model. It sets up the formulas (the &i are
* needed in the formula definitions when the FRML is defined in a loop), and
* estimates them using NLSYSTEM. This both initializes the mean parameters, and
* computes the unconditional covariance matrix. If you want more general mean
* equations, the simplest way to do that would be to define each FRML separately.
*
dec vect b(n)
nonlin(parmset=meanparms) b
do i=1,n
frml resid(i) = (y(&i)-b(&i))
end do i
nlsystem(parmset=meanparms,resids=u) gstart gend resid
compute rr=%sigma
*
* The paths of the covariance matrices and uu' are saved in the SERIES[SYMM] names
* H and UU. UX and HX are used to pull in residuals and H matrices.
*
declare series[symm] h uu
*
* ux is used when extracting a u vector
*
declare symm hx(n,n)
declare vect ux(n)
*
* These are used to initialize pre-sample variances.
*
gset h * gend = rr
gset uu * gend = rr
*
* This is a standard (normal) log likelihood formula for any multivariate GARCH
* model. The difference among these will be in the definitions of HF and RESID.
* The function %XT pulls information out of a matrix of SERIES.
*
declare frml[symm] hf
*
frml logl = $
hx = hf(t) , $
%do(i,1,n,u(i)=resid(i)) , $
ux = %xt(u,t), $
h(t)=hx, uu(t)=%outerxx(ux), $
%logdensity(hx,ux)
*****************************************************
*
* Positive definite parameterization (BEKK,EK)
* This enforces a positive definite covariance matrix by writing the covariance
* matrix evolution as
*
* V(t) = C'C + A'u(t)u(t)'A + B'V(t-1)B
*
* Note that the parameters are not globally identified: changing the signs of all
* members of C, A or B will have no effect on the function value. Using
* PMETHOD=SIMPLEX to begin is quite important with this setup, to pull the
* estimates away from zero before starting the derivative-based methods.
*
dec rect var(n,n) vbr(n,n)
dec packed vcr(n,n)
nonlin(parmset=garchparms) vcr var vbr
nonlin(parmset=restrictions) var(2,1)=var(3,1)=var(3,2)=0.0 vbr(2,1)=vbr(3,1)=vbr(3,2)=0.0
frml hf = $
hx=h{1},uux=uu{1},$
%ltouterxx(vcr)+%mqform(uux,var)+%mqform(hx,vbr)
*
* Initialize c's from the decomp of the covariance matrix
*
compute vcr = %decomp(rr)
compute var = %mscalar(.05) , vbr = %mscalar(.05)
*
maximize(parmset=meanparms+garchparms+restrictions,pmethod=simplex,piters=5,method=bfgs,iters=100) logl gstart gend