Dynamic conditional correlation multivariate GARCH

For technical questions regarding estimation of single equations, systems, VARs, Factor analysis and State Space Models in EViews. General econometric questions and advice should go in the Econometric Discussions forum.

Moderators: EViews Gareth, EViews Moderator

malagesh
Posts: 1
Joined: Fri Jul 17, 2009 12:03 am

Re: Dynamic conditional correlation multivariate GARCH

Postby malagesh » Thu Jan 06, 2011 11:33 pm

does anybody know how to incorporate asymmetry in DCC-GARCH model? i will be grateful to you if somebody can provide me asymmetric DCC-GARCH programme?
thanking you

Norling87
Posts: 1
Joined: Thu Apr 14, 2011 2:02 am

Re: Dynamic conditional correlation multivariate GARCH

Postby Norling87 » Mon Apr 18, 2011 6:38 am

Hey!

The above given code works very well for estimating the DCC-GARCH, but as I understand it, the code uses the whole sample to estimate the correlation and uses that sample to estimate the correlation at each time t.

In my study, I want to use the DCC-GARCH in the bivariate case and roll a in-sample period of for say 500 observations to forecast an out-of-sample of, say 800 obervations. I want it to be a rolling-window forecast, shifting the in-sample 1-period ahead when forecasting the next days correlation. I tried to modify the code but wasn't even close to succeeding. Can anyone help me with this?

Regards

charlie295
Posts: 1
Joined: Tue Jul 19, 2011 5:48 am

Re: Dynamic conditional correlation multivariate GARCH

Postby charlie295 » Tue Jul 19, 2011 5:52 am

Hi everybody,

I have managed to use the code provided kindly by hvtcapollo and produced reasonable rho values.

Probably an easy question but im not an expert in statistics, which of the series in the code gives the values of the conditional variances/st devs? (is it var_z1 and var_z2 or Z1/Z2 or something else)

please help. I need to know urgently

thanks a lot

tg128
Posts: 18
Joined: Mon Sep 22, 2008 1:10 pm

Re: Dynamic conditional correlation multivariate GARCH

Postby tg128 » Thu Aug 04, 2011 8:18 am

Hvtcapollo wrote:You can consider this code. I used it last year for my research and you should be ok if using it for the bivariate. For trivariate u need to modify a litle bit especially for the log likelihood function.

Code: Select all

'change path to program path
%path=@runpath
cd %path

'load workfile containing the return series
load nikkei_sp.WF1

'set sample range
sample s1 1/06/1995 12/25/2007
scalar pi=3.14159

'defining the return series in terms of y1 and y2
series y1=r_nikkei
series y2=r_sp

'fitting univariate GARCH(1,1) models to each of the two returns series
equation eq_y1.arch(1,1,m=1000,h) y1 c
equation eq_y2.arch(1,1,m=1000,h) y2 c

'extract the standardized residual series from the GARCH fit
eq_y1.makeresids(s) z1
eq_y2.makeresids(s) z2

'extract garch series from univariate fit
eq_y1.makegarch() garch1
eq_y2.makegarch() garch2

'Caculate sample variance of series z1, z2 and covariance of z1and z2 and correlation between z1 and z2
scalar var_z1=@var(z1)
scalar var_z2=@var(z2)
scalar cov_z1z2=@cov(z1,z2)
scalar corr12=@cor(z1,z2)

'defining the starting values for the var(z1) var(z2) and covariance (z1,z2)
series var_z1t=var_z1
series var_z2t=var_z2
series cov_z1tz2t=cov_z1z2

'declare the coefficient starting values
coef(2) T
T(1)=0.2
T(2)=0.7

' ...........................................................
' LOG LIKELIHOOD for correlation part
' set up the likelihood
' 1) open a new blank likelihood object and name it 'dcc'
' 2) specify the log likelihood model by append
' ...........................................................

logl dcc
dcc.append @logl logl

'specify var_z1t, var_z2t, cov_z1tz2t
dcc.append var_z1t=@nan(1-T(1)-T(2)+T(1)*(z1(-1)^2)+T(2)*var_z1t(-1),1)
dcc.append var_z2t=@nan(1-T(1)-T(2)+T(1)*(z2(-1)^2)+T(2)*var_z2t(-1),1)
dcc.append cov_z1tz2t=@nan((1-T(1)-T(2))*corr12+T(1)*z1(-1)*z2(-1)+T(2)*cov_z1tz2t(-1),1)

dcc.append pen=(var_z1t<0)+(var_z2t<0)

'specify rho12
dcc.append rho12=cov_z1tz2t/@sqrt(@abs(var_z1t*var_z2t))

'defining the determinant of correlation matrix and determinant of Dt
dcc.append detrRt=(1-(rho12^2))
dcc.append detrDt=@sqrt(garch1*garch2)
dcc.append pen=pen+(detrRt<0)
dcc.append detrRt=@abs(detrRt)

'define the log likelihood function
dcc.append logl=(-1/2)*(2*log(2*pi)+log(detrRt)+(z1^2+z2^2-2*rho12*z1*z2)/detrRt)-10*pen

'estimate the model
smpl s1
dcc.ml(showopts, m=500, c=1e-5)

'display output and graphs
show dcc.output
graph corr.line rho12
show corr


thanks for the code!

i wonder how to compute q11,t and q22,t from the DCC model and save them seperately please?

ruhee.mittal
Posts: 2
Joined: Thu Nov 17, 2011 4:28 am

Re: Dynamic conditional correlation multivariate GARCH

Postby ruhee.mittal » Thu Nov 17, 2011 5:22 am

i am not able to get answers with this code.
is this code incomplete??
please help.

ruhee.mittal
Posts: 2
Joined: Thu Nov 17, 2011 4:28 am

Re: Dynamic conditional correlation multivariate GARCH

Postby ruhee.mittal » Mon Nov 21, 2011 5:26 am

hello,
i am not able to generate logl series with the above program. thus i am not able to reach the final results. kindly help me in solving this problem.
thnk you..

nikolastico
Posts: 1
Joined: Tue Mar 05, 2013 11:23 pm

Re: Dynamic conditional correlation multivariate GARCH

Postby nikolastico » Tue Mar 05, 2013 11:38 pm

Hello to all,

I'm currently trying to using this code I copied from another post and modified it to allow assymetries (ADCC). I'm trying to testing contagion on index returns series...

Code: Select all

'ADCC Model by Cappiello et al (2006)

'Load workfile and measure length of series
series obscount = 1
scalar obslength = @sum(obscount)

'Specify the return series
series y1 = bovespa
series y2 = igbvl

'Specify the number of iterations in the MLE (Engle & Sheppard (2001) used just one iteration)
!itermle = 1000

'Specify the initial values of the parameters
coef(1) alpha
coef(1) beta
coef(1) gamma

'Values may vary depending on which will result in the highest Likelihood value
alpha(1) = 0.04
beta(1) = 0.94
gamma(1) = 0.02

'Setting the sample
sample s0    @first+1 @last
sample s1    @first+2 @last
sample sf    @first+3 @last
sample sf_alt   @first+13 @last

'Initialization at sample s0
smpl s0

'Each return series is modeled with their respective GARCH specifications:
'Use Bollerslev-Wooldridge QML
'Standard errors

equation eq1.arch(1,1,thrsh=1,m=1000,c=1e-5,h) y1 c y1(-1) 'res_s11_1000 @ res_s11_1000
equation eq2.arch(1,1,thrsh=1,m=1000,c=1e-5,h) y2 c y2(-1) 'res_s22_1000 @ res_s22_1000

'Make residual series
eq1.makeresids e1
eq2.makeresids e2

'Make a garch series from the univariate estimates
eq1.makegarch h11
eq2.makegarch h22

'Normalizing the residuals from e to e* (named as "e1n" and "e2n")
series e1n = e1/h11^0.5
series e2n = e2/h22^0.5

'Make residual series for asymmetries in DCC model
series n1n = @recode(e1n<0,e1n*e1n,0)
series n2n = @recode(e2n<0,e2n*e2n,0)

'The Q_bar=E[en*en'] components and its sample equivalent
series qbar11 = @mean(e1n*e1n)
series qbar12 = @mean(e1n*e2n)
series qbar21 = @mean(e2n*e1n)
series qbar22 = @mean(e2n*e2n)

'The N_bar
series nbar11 = @mean(n1n*n1n)
series nbar12 = @mean(n1n*n2n)
series nbar21 = @mean(n2n*n1n)
series nbar22 = @mean(n2n*n2n)

'The (en*en') matrix components
series e11n = e1n*e1n
series e12n = e1n*e2n
series e21n = e2n*e1n
series e22n = e2n*e2n

'The (nn*nn') matrix components
series n11n = n1n*n1n
series n12n = n1n*n2n
series n21n = n2n*n1n
series n22n = n2n*n2n

'Initialize the elements of Qt for variance targeting
series q11 = @var(e1)
series q12 = @cov(e1,e2)
series q21 = @cov(e2,e1)
series q22 = @var(e2)

'***********************************************************************************************

'Declare a Loglikelihood object
logl dcc
dcc.append @logl logl

'The elements of matrix Qt
dcc.append  q11 = (qbar11 - (alpha(1))^2*qbar11 - (beta(1))^2*qbar11 + (gamma(1))^2*nbar11) + (alpha(1))^2*e11n(-1) + (gamma(1))^2*n11n(-1) + (beta(1))^2*q11(-1)
dcc.append  q12 = (qbar12 - (alpha(1))^2*qbar12 - (beta(1))^2*qbar12 + (gamma(1))^2*nbar12) + (alpha(1))^2*e12n(-1) + (gamma(1))^2*n12n(-1) + (beta(1))^2*q12(-1)
dcc.append  q21 = (qbar21 - (alpha(1))^2*qbar21 - (beta(1))^2*qbar21 + (gamma(1))^2*nbar21) + (alpha(1))^2*e21n(-1) + (gamma(1))^2*n21n(-1) + (beta(1))*2*q21(-1)
dcc.append  q22 = (qbar22 - (alpha(1))^2*qbar22 - (beta(1))^2*qbar22 + (gamma(1))^2*nbar22) + (alpha(1))^2*e22n(-1) + (gamma(1))^2*n22n(-1) + (beta(1))^2*q22(-1)

'As input to detQQQ
dcc.append  q12n = ((qbar11 - (alpha(1))^2*qbar11 - (beta(1))^2*qbar11 + (gamma(1))^2*nbar11) + (alpha(1))^2*e11n(-1) + (gamma(1))^2*n11n(-1) + (beta(1))^2*q11(-1))/((abs(q11)^0.5)*(abs(q22)^0.5))
dcc.append  q21n = ((qbar21 - (alpha(1))^2*qbar21 - (beta(1))^2*qbar21 + (gamma(1))^2*nbar21) + (alpha(1))^2*e21n(-1) + (gamma(1))^2*n21n(-1) + (beta(1))*2*q21(-1))/((abs(q22)^0.5)*(abs(q11)^0.5))

'Setting up the Loglikelihood function, assuming that resid ~ N(0,H)

'The Loglikelihood function is L' = -0.5*{summation from t=1 to T of ([log of determinant of inverse(diag[Qt])*Qt*inverse(diag[Qt])] + [en'*inverse(diag[Qt])*Qt*inverse(diag[Qt])*en])

'Taking the adjoint{inverse(diag[Qt])*Qt*inverse(diag[Qt])}
dcc.append  detQQQ = 1 - q12n*q21n

'Tomando el adjoint{inverse(diag[Qt])*Qt*inverse(diag[Qt])}
dcc.append  cofact11 =   1*1
dcc.append  cofact12 =(-1)*q21n
dcc.append  cofact21 =(-1)*q12n
dcc.append  cofact22 =   1*1

'Taking the inverse{inverse(diag[Qt])*Qt*inverse(diag[Qt])}
dcc.append  invQQQ11 = cofact11/detQQQ
dcc.append  invQQQ12 = cofact12/detQQQ
dcc.append  invQQQ21 = cofact21/detQQQ
dcc.append  invQQQ22 = cofact22/detQQQ

'Taking the en'*inverse{inverse(diag[Qt])*Qt*inverse(diag[Qt])}*en
dcc.append  enQQQen11 = e1n*invQQQ11*e1n
dcc.append  enQQQen12 = e1n*invQQQ12*e2n
dcc.append  enQQQen21 = e2n*invQQQ21*e1n
dcc.append  enQQQen22 = e2n*invQQQ22*e2n

'Append the loglikelihood function
'Instead of log(detQQQ) use log(abs(detQQQ))
dcc.append logl = -0.5*(log(abs(detQQQ)) + (enQQQen11+enQQQen21+ enQQQen12+enQQQen22))

'Specifies the sample data where the estimation will be made
smpl s1

'Estimates the parameters now using BHHH algorithm
dcc.ml(b, showopts, m=!itermle, c=1e-5)

'A detQQQnpd = 0 indicates detQQQ is positive definite
series count = (detQQQ<=0)
scalar detQQQnpd = @sum(count)

'Display the estimated parameters
show dcc.output

'Forecast the q's by initializing them
series  q11f = 0
series  q12f = 0
series  q21f = 0
series  q22f = 0

'Specify the sample period to be forecasted
smpl sf
series  q11f = (qbar11 - (alpha(1))^2*qbar11 - (beta(1))^2*qbar11 + (gamma(1))^2*nbar11) + (alpha(1))^2*e11n(-1) + (gamma(1))^2*n11n(-1) + (beta(1))^2*q11(-1)
series  q12f = (qbar12 - (alpha(1))^2*qbar12 - (beta(1))^2*qbar12 + (gamma(1))^2*nbar12) + (alpha(1))^2*e12n(-1) + (gamma(1))^2*n12n(-1) + (beta(1))^2*q12(-1)
series  q21f = (qbar21 - (alpha(1))^2*qbar21 - (beta(1))^2*qbar21 + (gamma(1))^2*nbar21) + (alpha(1))^2*e21n(-1) + (gamma(1))^2*n21n(-1) + (beta(1))*2*q21(-1)
series  q22f = (qbar22 - (alpha(1))^2*qbar22 - (beta(1))^2*qbar22 + (gamma(1))^2*nbar22) + (alpha(1))^2*e22n(-1) + (gamma(1))^2*n22n(-1) + (beta(1))^2*q22(-1)

'To plot the time-varying conditional correlation
smpl sf_alt
series rt = q12f/(@sqr(q11f)*@sqr(q22f))
graph rtgraph.line rt
show rtgraph

delete e1n e2n
delete q12n q21n
delete n1n n2n
delete n11n n12n n21n n22n
delete e11n e12n e21n e22n
delete qbar*
delete xbar*
delete cofact*
delete enqqqen*
delete invqqq*
delete enqqqen*
delete eigenvect*
delete invqqq*

show detqqqnpd

series eigmins
scalar eigmin

for !j = 4 to obslength
   'Input the hijsim to the elements of a 2x2 Q matrix
   sym(2) Q
   Q(1,1) = q11f(!j)
   Q(2,1) = q21f(!j)
   Q(2,2) = q22f(!j)

   'Take the eigenvalues of Q
   vector(4) Qeigenval
   Qeigenval = @eigenvalues(Q)

   'Collect the min eigenvalues in each Qt
   eigmins(!j) = @min(Qeigenval)
next

eigmin = @min(eigmins)
show eigmin


I don't understand the following error message that Eviews 6 shows:

Missing values in @LOGL series at current coefficients at observation 1/24/1993 in "DO_DCC.ML(B,SHOWOPTS,M=1000,C=1E-5)"

Could anyone help me with this?

Thanks in advance.

tesis_dcc.wf1
Thesis Workfile
(78.54 KiB) Downloaded 952 times

trubador
Did you use forum search?
Posts: 1518
Joined: Thu Nov 20, 2008 12:04 pm

Re: Dynamic conditional correlation multivariate GARCH

Postby trubador » Wed Mar 06, 2013 5:34 am

Carefully place your sample periods. For instance, you should use "smpl sf" instead of "smpl s1" before calling the estimation algorithm...

nicktz
Posts: 18
Joined: Thu Mar 28, 2013 1:41 am

Re: Dynamic conditional correlation multivariate GARCH

Postby nicktz » Thu Mar 28, 2013 1:46 am

I am having trouble extending the DCC code to the tri-variate case... Please help!!

snowdeer
Posts: 1
Joined: Wed May 08, 2013 5:02 am

Re: Dynamic conditional correlation multivariate GARCH

Postby snowdeer » Wed May 08, 2013 5:15 am

Dear trubador,
I used the codes you provided for DCC-GARCH for eviews 5.0 and got the warning message "unmatched parenthesis" after typing the code"dcc.ml(showopts, m=500, c=1e-5)". Would you please enlighten me how to solve the problem? Thank you very much

trubador
Did you use forum search?
Posts: 1518
Joined: Thu Nov 20, 2008 12:04 pm

Re: Dynamic conditional correlation multivariate GARCH

Postby trubador » Wed May 08, 2013 7:08 am

The code is not mine.

I am not sure if anything specific to version 5 is going on, but the message is pretty clear: There is at least one missing bracket somewhere in the code that you are currently using.

nicktz
Posts: 18
Joined: Thu Mar 28, 2013 1:41 am

Re: Dynamic conditional correlation multivariate GARCH

Postby nicktz » Fri May 17, 2013 5:55 am

Hi Trubador,
I have trouble running the ADCC code on the attached data set.
It keeps saying missing values at 11/09/2007. This is a random date in the middle of my workfile.
I cannot understand what the problem might be! I have checked the starting values yet nothing seems to help.
Any ideas? Much appreciated!
Attachments
trial2.wf1
(88.83 KiB) Downloaded 789 times
trial_adcc_code.docx
(16.66 KiB) Downloaded 925 times

trubador
Did you use forum search?
Posts: 1518
Joined: Thu Nov 20, 2008 12:04 pm

Re: Dynamic conditional correlation multivariate GARCH

Postby trubador » Fri May 17, 2013 4:33 pm

There is a typo in your likelihood specification, which leads to explosive behavior:
dcc.append q21 = (qbar21 - (alpha(1))^2*qbar21 - (beta(1))^2*qbar21 + (gamma(1))^2*nbar21) + (alpha(1))^2*e21n(-1) + (gamma(1))^2*n21n(-1) + (beta(1))*2*q21(-1)
Just replace the red part with ^

nicktz
Posts: 18
Joined: Thu Mar 28, 2013 1:41 am

Re: Dynamic conditional correlation multivariate GARCH

Postby nicktz » Mon May 20, 2013 7:45 am

Thanks so much!!!! :lol:

Rosen89
Posts: 2
Joined: Mon Aug 12, 2013 12:37 pm

Re: Dynamic conditional correlation multivariate GARCH

Postby Rosen89 » Mon Aug 12, 2013 12:49 pm

I have seen that there are some other posts about this but none of the answers seem to make any difference for me: the problem is that when I run the LOGL I get up that I have missing values....
If anybody could help that would be brilliant as I have not much experience in this area (which is also why the code I am using is not mine but one I found in this forum)
For info purposes: I am running a spot price against a portfolio -- both weekly returns



'change path to program path
%path=@runpath
cd %path

'load workfile containing the return series
load spot_pfh.WF1

'set sample range
sample s1 1/07/2000 6/09/2006
scalar pi=3.14159

'defining the return series in terms of y1 and y2
series y1=spot
series y2=pf_h

'fitting univariate GARCH(1,1) models to each of the two returns series
equation eq_y1.arch(1,1,m=1000,h) y1 c
equation eq_y2.arch(1,1,m=1000,h) y2 c

'extract the standardized residual series from the GARCH fit
eq_y1.makeresids(s) z1
eq_y2.makeresids(s) z2

'extract garch series from univariate fit
eq_y1.makegarch() garch1
eq_y2.makegarch() garch2

'Caculate sample variance of series z1, z2 and covariance of z1and z2 and correlation between z1 and z2
scalar var_z1=@var(z1)
scalar var_z2=@var(z2)
scalar cov_z1z2=@cov(z1,z2)
scalar corr12=@cor(z1,z2)

'defining the starting values for the var(z1) var(z2) and covariance (z1,z2)
series var_z1t=var_z1
series var_z2t=var_z2
series cov_z1tz2t=cov_z1z2

'declare the coefficient starting values
coef(2) T
T(1)=0.2
T(2)=0.7

logl dcc
dcc.append @logl logl

'specify var_z1t, var_z2t, cov_z1tz2t
dcc.append var_z1t=@nan(1-T(1)-T(2)+T(1)*(z1(-1)^2)+T(2)*var_z1t(-1),1)
dcc.append var_z2t=@nan(1-T(1)-T(2)+T(1)*(z2(-1)^2)+T(2)*var_z2t(-1),1)
dcc.append cov_z1tz2t=@nan((1-T(1)-T(2))*corr12+T(1)*z1(-1)*z2(-1)+T(2)*cov_z1tz2t(-1),1)

dcc.append pen=(var_z1t<0)+(var_z2t<0)

'specify rho12
dcc.append rho12=cov_z1tz2t/@sqrt(@abs(var_z1t*var_z2t))

'defining the determinant of correlation matrix and determinant of Dt
dcc.append detrRt=(1-(rho12^2))
dcc.append detrDt=@sqrt(garch1*garch2)
dcc.append pen=pen+(detrRt<0)
dcc.append detrRt=@abs(detrRt)

'define the log likelihood function
dcc.append logl=(-1/2)*(2*log(2*pi)+log(detrRt)+(z1^2+z2^2-2*rho12*z1*z2)/detrRt)-10*pen

'estimate the model
smpl s1
dcc.ml(showopts, m=500, c=1e-5)



This is when I get up that I have missing values -- again, if anybody has time to help I would very much appreciate it :)


Return to “Estimation”

Who is online

Users browsing this forum: No registered users and 30 guests