RATS 10.1
RATS 10.1

As with the univariate GARCH models, the default for the mean model is the constant. In the output, these are shown as (for instance)  MEAN(XJPN),...,MEAN(XSUI). And, as in the univariate case, you can estimate the models with mean zero processes by adding NOMEAN.

 

It’s important to remember that main task of the mean model is to produce (jointly) serially uncorrelated residuals so you can fit a GARCH model properly. The model which will do that with one data set may be different from the one that will do that with a similar but different data set. Don’t blindly copy a mean model from another paper.

MODEL option

If you need a more complicated mean model, and you have a common set of regressors, you can use the REGRESSORS option (just as with univariate model) with a single supplementary card. If you have extra mean variables which are different among equations, you need to create a MODEL variable, generally using GROUP. Because the equations in the model include the information about the dependent variable, you don’t need to list dependent variables on the GARCH instruction. Suppose that we want AR(1) models for each of the three variables and a DCC model:

 

equation(constant) jpneq xjpn 1

equation(constant) fraeq xfra 1

equation(constant) suieq xsui 1

group ar1 jpneq fraeq suieq

garch(p=1,q=1,model=ar1,mv=dcc,pmethod=simplex,piter=10)

 

You can use the SYSTEM definition to create a VAR (or VECM if you have cointegrated variables) for the mean model. This does a one lag VAR with a BEKK variance model:

 

system(model=var1)

variables xjpn xfra xsui

lags 1

det constant

end(system)

garch(p=1,q=1,model=var1,mv=bekk,pmethod=simplex,piters=10)

 

For the more complicated mean models, the output splits these up by the dependent variables, such as

 

Mean Model(XJPN)

1.  Constant                  0.004012392  0.005915957      0.67823  0.49762456

2.  XJPN{1}                   0.025541591  0.011287801      2.26276  0.02365045

Mean Model(XFRA)

3.  Constant                 -0.003121697  0.005914162     -0.52783  0.59761444

4.  XFRA{1}                   0.005553417  0.009898923      0.56101  0.57478919

Mean Model(XSUI)

5.  Constant                 -0.003058263  0.006944297     -0.44040  0.65964795

6.  XSUI{1}                  -0.001890160  0.009596114     -0.19697  0.84384988

 

GARCH-M

To do GARCH-M with a multivariate model, you have to plan ahead a bit. First of all, you have to decide what “M” effects  you want in the model (or in any given equation). In an \(N\) variable model, there are \(N(N+1)/2\) variances and covariances, and rarely will all of them be included in each equation.

 

On your GARCH instruction, you need to use the option MVHSERIES=SYMM[SERIES] which will save the paths of the variances (example: MVHSERIES=HHS). Your regression equations for the means will include references to the elements of this array of series. Since those equations need to be created in advance, you need to create the SYMM[SERIES] first as well. The code segment below includes as explanatory variables in each equation all the covariances which involve the residuals from that equation.

 

dec symm[series] hhs(3,3)

clear(zeros) hhs

equation jpneq xjpn

# constant hhs(1,1) hhs(1,2) hhs(1,3)

equation fraeq xfra

# constant hhs(2,1) hhs(2,2) hhs(2,3)

equation suieq xsui

# constant hhs(3,1) hhs(3,2) hhs(3,3)

group garchm jpneq fraeq suieq

garch(model=garchm,p=1,q=1,pmethod=simplex,piters=10,$

  mvhseries=hhs)

 

If you need some function of the variances or covariances, you need to use the HADJUST option to define it based upon the values that you save either with MVHSERIES or with HMATRICES. The following, for instance, adds the conditional standard deviation (generated into the series COMMONSD) of an equally weighted sum of the three currencies:

 

set commonsd = 0.0

system(model=customm)

variables xjpn xfra xsui

det constant commonsd

end(system)

*

compute %nvar=%modelsize(customm)

compute weights=%fill(%nvar,1,1.0/%nvar)

garch(model=customm,p=1,q=1,mv=cc,variances=spillover,$

   hmatrices=hh,hadjust=(commonsd=sqrt(%qform(hh,weights))))

 

VARMA Mean Model

To create a VARMA model for the mean (not to be confused with VARMA variance calculations), create a VECT[SERIES] for the residuals, add the lags to the model using the DET instruction in the system, and use the RSERIES option to save the residuals (which are saved as they are calculated). The following will do a VMA mean model, with an asymmetric BEKK GARCH model, saving the residuals into U and adding lags of U(1), U(2) and U(3) to the mean model. (The dimension and the list would have to be adjusted if you have a different number of variables).

 

dec vect[series] u(3)

clear(zeros) u

system(model=varma)

variables xjpn xfra xsui

det constant u(1){1} u(2){1} u(3){1}

end(system)

*

garch(model=varma,p=1,q=1,mv=bekk,asymmetric,rseries=u,$

   pmethod=simplex,piters=10,iters=500)

 

Note that VARMA models (with both lagged dependent variables and lagged residuals) can be subject to cancellation problems. For instance, with this data set, if we add LAGS 1 to the system definition to convert this from a VMA(1) to a VARMA(1,1) mean model, it won’t converge properly and the AR and MA parameters will show up as being (almost) equal and opposite sign—there have been papers published with all the signs of overparameterized mean models. A more complete example that demonstrates the problem is available as VARMAGARCH.RPF.

 

If you need a model to handle serial correlation, start small and start with a VAR, and (perhaps) go to VARMA only if the VAR leaves serial correlation in the residuals. The @VARLAGSELECT procedure can be helpful in picking a starting lag length for a VAR model to handle the serial correlation. You’re generally best off using the more stringent BIC as the selection criterion for that—starting with the smallest reasonable model and increasing the lags only if necessary.

 


Copyright © 2024 Thomas A. Doan