Trivariate VAR-GARCH model
Posted: Fri Aug 14, 2009 10:54 am
Hi
I am using a trivariate VAR-MGARCH model to analyse volatility spillovers in my dissertation. I obtained the RATS codes from the author of a journal article that used a VECM-GARCH. However, I have never used RATS before and do not know how to alter the code from a bivariate VECM-GARCH model to a trivariate VAR-GARCH. Can anyone help me with the code please?
Cheers,
Jessie
I am using a trivariate VAR-MGARCH model to analyse volatility spillovers in my dissertation. I obtained the RATS codes from the author of a journal article that used a VECM-GARCH. However, I have never used RATS before and do not know how to alter the code from a bivariate VECM-GARCH model to a trivariate VAR-GARCH. Can anyone help me with the code please?
Cheers,
Jessie
Code: Select all
* Euro_UK
*
calendar(daily) 1983 1 3
allocate 100 2002:12:31
* UK interbank (proxy A) UK cd (proxy B) eurostirling
open data a:\uk.txt
data(format=free,org=obs) / h1 h2 h3
* period 1, september 92 - erm crisis
smpl 1983:1:3 1992:7:31
SET DSCP =LOG(h1)-LOG(h1{1})
SET DSFP =LOG(h3)-LOG(h3{1})
SET ECT =LOG(h3)-LOG(h1)
* Starting and ending points for GARCH estimation. GSTART must
* be at least entry 2.
*
COMPUTE gstart=1983:1:10, gend=1992:7:31
*
* Parameters for the regression function
*
NONLIN B10 B11 B12 B13 C11 C12 C13 E11 B20 B21 B22 B23 C21 C22 C23 E22
FRML RESID1 = (DSCP-B10-B11*DSCP{1}-B12*DSCP{2}-B13*DSCP{3}-C11*DSFP{1}-C12*DSFP{2}-C13*DSFP{3}-E11*ECT{1})
FRML RESID2 = (DSFP-B20-B21*DSFP{1}-B22*DSFP{2}-B23*DSFP{3}-C21*DSCP{1}-C22*DSCP{2}-C23*DSCP{3}-E22*ECT{1})
*
* Do initial regression. Copy initial values for regression parameters
*
LINREG DSCP / R1
# CONSTANT DSCP{1} DSCP{2} DSCP{3} DSFP{1} DSFP{2} DSFP{3} ECT{1}
COMPUTE B10 = %BETA(1)
COMPUTE B11 = %BETA(2)
COMPUTE B12 = %BETA(3)
COMPUTE B13 = %BETA(4)
COMPUTE C11 = %BETA(5)
COMPUTE C12 = %BETA(6)
COMPUTE C13 = %BETA(7)
COMPUTE E11 = %BETA(8)
LINREG DSFP / R2
# CONSTANT DSCP{1} DSCP{2} DSCP{3} DSFP{1} DSFP{2} DSFP{3} ECT{1}
COMPUTE B20 = %BETA(1)
COMPUTE B21 = %BETA(2)
COMPUTE B22 = %BETA(3)
COMPUTE B23 = %BETA(4)
COMPUTE C21 = %BETA(5)
COMPUTE C22 = %BETA(6)
COMPUTE C23 = %BETA(7)
COMPUTE E22 = %BETA(8)
*
* Get the covariance matrix of the residuals.
*
VCV(MATRIX=RR,NOPRINT)
# R1 R2
DECLARE SERIES U1 U2
DECLARE SERIES H11 H12 H22
*
* Initialize residuals
*
SET U1 = R1
SET U2 = R2
*
* Seed the covariance matrix with values from it. This is important
* for GARCH models: if the initial values of the H series are
* unreasonable, the entire estimation is thrown off.
*
SET H11 = RR(1,1)
SET H22 = RR(2,2)
SET H12 = RR(1,2)
*
* This is a standard log likelihood formula for any bivariate
* ARCH, GARCH, ARCH-M,... The difference among these will be in
* the definitions of H11F,H22F,H12F,RESID1 and RESID2
*
DECLARE SYMMETRIC H
DECLARE VECTOR U
DECLARE FRML H11F H12F H22F
*
FRML LOGL = $
H11(T)=H11F(T),H12(T)=H12F(T),$
H22(T)=H22F(T),$
U1(T)=RESID1(T),U2(T)=RESID2(T),$
H = ||H11(T)|H12(T),H22(T)||,$
U = ||U1(T),U2(T)||,$
%LOGDENSITY(H,U)
*
* Positive definite parameterization (BEKK,EK)
* This enforces a positive definite covariance matrix by writing the
* covariance matrix evolution as
*
* V(t) = C'C + B'u(t)u(t)'B + A'V(t-1)A
*
* Note that the parameters are not globally identified: changing the signs
* of all members of C,B or A will have no effect on the function value.
* Using METHOD=SIMPLEX to begin is quite important with this setup, to
* pull the estimates away from zero before starting the derivative-based
* methods.
*
NLPAR(SUBITERATION=1000)
NONLIN(ADD) VC11 VC12 VC22 $
VA11 VA12 VA21 VA22 $
VB11 VB12 VB21 VB22
*
FRML H11F = (VC=||VC11,VC12|0.0,VC22||),$
(VA=||VA11,VA12|VA21,VA22||),$
(VB=||VB11,VB12|VB21,VB22||),$
(H=||H11{1}|H12{1},H22{1}||),$
(UB=||U1{1},U2{1}||*VB),$
(H=TR(VC)*VC+%MQFORM(H,VA)+TR(UB)*UB),$
H(1,1)
FRML H12F = H(1,2)
FRML H22F = H(2,2)
*
* Initialize c's from the decomp of the covariance matrix
*
COMPUTE CINIT = %DECOMP(RR)
COMPUTE VC11=CINIT(1,1) , VC12 = CINIT(1,2) , VC22=CINIT(2,2)
*
COMPUTE VA11=VA22=0.3 , VA12=VA21=0.1
COMPUTE VB11=VB22=0.2 , VB12=VB21=0.1
*
MAXIMIZE(vcv,METHOD=SIMPLEX,RECURSIVE,robusterrors,ITERS=50) LOGL GSTART GEND
MAXIMIZE(vcv,METHOD=BFGS,RECURSIVE,robusterrors,ITERS=1000) LOGL GSTART GEND
COMPUTE HN = %DECOMP(H)
COMPUTE HN11 = HN(1,1)
COMPUTE HN22 = HN(2,2)
SET NRED1 = U1(T)/((HN11)**0.5)
SET NRED2 = U2(T)/((HN22)**0.5)
SET ROU1 = H12/(H11*H22)**0.5
STATISTICS ROU1
* period 2
smpl 1992:11:1 2002:12:31
SET DSCP =LOG(h1)-LOG(h1{1})
SET DSFP =LOG(h3)-LOG(h3{1})
SET ECT =LOG(h3)-LOG(h1)
* Starting and ending points for GARCH estimation. GSTART must
* be at least entry 2.
*
COMPUTE gstart=1992:11:10, gend=2002:12:31
*
* Parameters for the regression function
*
NONLIN B10 B11 B12 B13 C11 C12 C13 E11 B20 B21 B22 B23 C21 C22 C23 E22
FRML RESID1 = (DSCP-B10-B11*DSCP{1}-B12*DSCP{2}-B13*DSCP{3}-C11*DSFP{1}-C12*DSFP{2}-C13*DSFP{3}-E11*ECT{1})
FRML RESID2 = (DSFP-B20-B21*DSFP{1}-B22*DSFP{2}-B23*DSFP{3}-C21*DSCP{1}-C22*DSCP{2}-C23*DSCP{3}-E22*ECT{1})
*
* Do initial regression. Copy initial values for regression parameters
*
LINREG DSCP / R1
# CONSTANT DSCP{1} DSCP{2} DSCP{3} DSFP{1} DSFP{2} DSFP{3} ECT{1}
COMPUTE B10 = %BETA(1)
COMPUTE B11 = %BETA(2)
COMPUTE B12 = %BETA(3)
COMPUTE B13 = %BETA(4)
COMPUTE C11 = %BETA(5)
COMPUTE C12 = %BETA(6)
COMPUTE C13 = %BETA(7)
COMPUTE E11 = %BETA(8)
LINREG DSFP / R2
# CONSTANT DSCP{1} DSCP{2} DSCP{3} DSFP{1} DSFP{2} DSFP{3} ECT{1}
COMPUTE B20 = %BETA(1)
COMPUTE B21 = %BETA(2)
COMPUTE B22 = %BETA(3)
COMPUTE B23 = %BETA(4)
COMPUTE C21 = %BETA(5)
COMPUTE C22 = %BETA(6)
COMPUTE C23 = %BETA(7)
COMPUTE E22 = %BETA(8)
*
* Get the covariance matrix of the residuals.
*
VCV(MATRIX=RR,NOPRINT)
# R1 R2
DECLARE SERIES U1 U2
DECLARE SERIES H11 H12 H22
*
* Initialize residuals
*
SET U1 = R1
SET U2 = R2
*
* Seed the covariance matrix with values from it. This is important
* for GARCH models: if the initial values of the H series are
* unreasonable, the entire estimation is thrown off.
*
SET H11 = RR(1,1)
SET H22 = RR(2,2)
SET H12 = RR(1,2)
*
* This is a standard log likelihood formula for any bivariate
* ARCH, GARCH, ARCH-M,... The difference among these will be in
* the definitions of H11F,H22F,H12F,RESID1 and RESID2
*
DECLARE SYMMETRIC H
DECLARE VECTOR U
DECLARE FRML H11F H12F H22F
*
FRML LOGL = $
H11(T)=H11F(T),H12(T)=H12F(T),$
H22(T)=H22F(T),$
U1(T)=RESID1(T),U2(T)=RESID2(T),$
H = ||H11(T)|H12(T),H22(T)||,$
U = ||U1(T),U2(T)||,$
%LOGDENSITY(H,U)
*
* Positive definite parameterization (BEKK,EK)
* This enforces a positive definite covariance matrix by writing the
* covariance matrix evolution as
*
* V(t) = C'C + B'u(t)u(t)'B + A'V(t-1)A
*
* Note that the parameters are not globally identified: changing the signs
* of all members of C,B or A will have no effect on the function value.
* Using METHOD=SIMPLEX to begin is quite important with this setup, to
* pull the estimates away from zero before starting the derivative-based
* methods.
*
NLPAR(SUBITERATION=1000)
NONLIN(ADD) VC11 VC12 VC22 $
VA11 VA12 VA21 VA22 $
VB11 VB12 VB21 VB22
*
FRML H11F = (VC=||VC11,VC12|0.0,VC22||),$
(VA=||VA11,VA12|VA21,VA22||),$
(VB=||VB11,VB12|VB21,VB22||),$
(H=||H11{1}|H12{1},H22{1}||),$
(UB=||U1{1},U2{1}||*VB),$
(H=TR(VC)*VC+%MQFORM(H,VA)+TR(UB)*UB),$
H(1,1)
FRML H12F = H(1,2)
FRML H22F = H(2,2)
*
* Initialize c's from the decomp of the covariance matrix
*
COMPUTE CINIT = %DECOMP(RR)
COMPUTE VC11=CINIT(1,1) , VC12 = CINIT(1,2) , VC22=CINIT(2,2)
*
COMPUTE VA11=VA22=0.3 , VA12=VA21=0.1
COMPUTE VB11=VB22=0.2 , VB12=VB21=0.1
*
MAXIMIZE(vcv,METHOD=SIMPLEX,RECURSIVE,robusterrors,ITERS=50) LOGL GSTART GEND
MAXIMIZE(vcv,METHOD=BFGS,RECURSIVE,robusterrors,ITERS=1000) LOGL GSTART GEND
COMPUTE HN = %DECOMP(H)
COMPUTE HN11 = HN(1,1)
COMPUTE HN22 = HN(2,2)
SET NRED1 = U1(T)/((HN11)**0.5)
SET NRED2 = U2(T)/((HN22)**0.5)
SET ROU2 = H12/(H11*H22)**0.5
STATISTICS ROU2