* * GARCHMVMAX.RPF * Example of estimation of a multivariate GARCH model using MAXIMIZE. * * RATS User's Guide, Example from Section 9.4.8. * 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 mu(n) nonlin(parmset=meanparms) mu do i=1,n frml resid(i) = (y(&i)-mu(&i)) stats y(i) compute mu(i)=%mean 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) ***************************************************** * * Standard GARCH(1,1) * dec symm vcs(n,n) vas(n,n) vbs(n,n) compute vcs=rr,vas=%const(0.05),vbs=%const(0.80) nonlin(parmset=garchparms) vcs vas vbs frml hf = vcs+vas.*uu{1}+vbs.*h{1} nlpar(derives=second) maximize(parmset=meanparms+garchparms,pmethod=simplex,piters=10,\$ iters=400) logl gstart gend ***************************************************** * * CC * The correlations are parameterized using an (n-1)x(n-1) matrix for the * subdiagonal. The (i,j) element of this will actually be the * correlation between i+1 and j. * dec symm qc(n-1,n-1) dec vect vcv(n) vav(n) vbv(n) * function hfcccgarch time type symm hfcccgarch type integer time do i=1,n compute hx(i,i)=vcv(i)+\$ vbv(i)*h(time-1)(i,i)+vav(i)*uu(time-1)(i,i) do j=1,i-1 compute hx(i,j)=qc(i-1,j)*sqrt(hx(j,j)*hx(i,i)) end do j end do i compute hfcccgarch=hx end * frml hf = hfcccgarch(t) nonlin(parmset=garchparms) vcv vav vbv qc compute vcv=%xdiag(rr),vav=%const(0.05),\$ vbv=%const(0.80),qc=%const(0.0) maximize(parmset=meanparms+garchparms,pmethod=simplex,piters=10) \$ logl gstart gend