Page 1 of 1

MV GARCH

Posted: Tue Mar 15, 2011 8:16 am
by pinnyoshea
Hi all,

I have tried to adjust the existing diagonal bekk code a MGARCH-BEKK model without the diagonal restriction but as this is my first attempt at programming EVIEWs (version 7) I am unsure if I have been successful. I have read all the posts regarding the MVGARCH BEKK in the forums and ran the BV GARCH-M (diagonal bekk) code successfully.

The unrestricted code runs without error but I am unsure about the output. The diagonal coefficients are very close to those obtained when I run a diagonal bekk. I would greatly appreciate any help/advice provided.

Code: Select all

' BV_GARCH.PRG (3/30/2004) ' example program for EViews LogL object ' ' unrestricted version of ' bi-variate BEKK of Engle and Kroner (1995): ' ' y = mu + res ' res ~ N(0,H) ' ' H = omega*omega' + beta H(-1) beta' + alpha res(-1) res(-1)' alpha' ' ' where ' ' y = 2 x 1 ' mu = 2 x 1 ' H = 2 x 2 (symmetric) ' H(1,1) = variance of y1 (saved as var_y1) ' H(1,2) = cov of y1 and y2 (saved as var_y2) ' H(2,2) = variance of y2 (saved as cov_y1y2) ' omega = 2 x 2 low triangular ' beta = 2 x 2 ' alpha = 2 x 2 ' 'change path to program path %path = @runpath cd %path ' dependent variables of both series must be continues smpl @all series y1 =irl_spread_rtns series y2 = irl_cds_rtns ' set sample ' first observation of s1 need to be one or two periods after ' the first observation of s0 sample s0 01/03/2008 9/30/2010 sample s1 01/04/2008 9/30/2010 ' initialization of parameters and starting values ' change below only to change the specification of model smpl s0 'get starting values from univariate GARCH equation eq1.arch(m=100,c=1e-5) y1 c equation eq2.arch(m=100,c=1e-5) y2 c ' declare coef vectors to use in bi-variate GARCH model ' see above for details coef(2) mu mu(1) = eq1.c(1) mu(2)= eq2.c(1) coef(3) omega omega(1)=0.5 omega(2)=0 omega(3)=0.5 coef(4) alpha alpha(1) = 0.5 alpha(2) = 0.5 alpha(3) = 0.5 alpha(4) = 0.5 coef(4) beta beta(1)= 0.5 beta(2)= 0.5 beta(3) =0.5 beta(4)= 0.5 ' constant adjustment for log likelihood !mlog2pi = 2*log(2*@acos(-1)) ' use var-cov of sample in "s1" as starting value of variance-covariance matrix series cov_y1y2 = @cov(y1-mu(1), y2-mu(2)) series var_y1 = @var(y1) series var_y2 = @var(y2) series sqres1 = (y1-mu(1))^2 series sqres2 = (y2-mu(2))^2 series res1res2 = (y1-mu(1))*(y2-mu(2)) ' ........................................................... ' LOG LIKELIHOOD ' set up the likelihood ' 1) open a new blank likelihood object (L.O.) name bvgarch ' 2) specify the log likelihood model by append ' ........................................................... logl bvgarch bvgarch.append @logl logl bvgarch.append sqres1 = (y1-mu(1))^2 bvgarch.append sqres2 = (y2-mu(2))^2 bvgarch.append res1res2 = (y1-mu(1))*(y2-mu(2)) ' calculate the variance and covariance series bvgarch.append var_y1 = omega(1)^2 + beta(1)^2*var_y1(-1)+beta(1)*beta(3)*cov_y1y2(-1)+beta(1)*beta(3)*cov_y1y2(-1)+beta(3)^2*var_y2(-1) + alpha(1)^2*sqres1(-1)+alpha(1)*alpha(3)*res1res2(-1)+alpha(1)*alpha(3)*res1res2(-1)+alpha(3)^2*sqres2(-1) bvgarch.append var_y2 = omega(3)^2+omega(2)^2 +beta(4)^2*var_y2(-1)+beta(4)*beta(2)*cov_y1y2(-1)+beta(4)*beta(2)*cov_y1y2(-1)+beta(2)^2*var_y1(-1) + alpha(4)^2*sqres2(-1)+alpha(4)*alpha(2)*res1res2(-1)+alpha(4)*alpha(2)*res1res2(-1)+alpha(2)^2*sqres1(-1) bvgarch.append cov_y1y2 = omega(1)*omega(2) + beta(2)*beta(1)*var_y1(-1) + beta(3)*beta(2)*cov_y1y2(-1) + beta(1)*beta(4)*cov_y1y2(-1) + beta(4)*beta(3)*var_y2(-1) + alpha(2)*alpha(1)*sqres1(-1) + alpha(4)*alpha(1)*res1res2(-1) + alpha(3)*alpha(2)*res1res2(-1) + alpha(4)*alpha(3)*sqres2(-1) ' determinant of the variance-covariance matrix bvgarch.append deth = var_y1*var_y2 - cov_y1y2^2 ' inverse elements of the variance-covariance matrix bvgarch.append invh1 = var_y2/deth bvgarch.append invh3 = var_y1/deth bvgarch.append invh2 = -cov_y1y2/deth ' log-likelihood series bvgarch.append logl =-0.5*(!mlog2pi + (invh1*sqres1+2*invh2*res1res2+invh3*sqres2) + log(deth)) ' remove some of the intermediary series ' bvgarch.append @temp invh1 invh2 invh3 sqres1 sqres2 res1res2 deth ' estimate the model smpl s1 bvgarch.ml(showopts, m=100, c=1e-5) ' change below to display different output show bvgarch.output graph varcov.line var_y1 var_y2 cov_y1y2 show varcov ' LR statistic for univariate versus bivariate model scalar lr = -2*( eq1.@logl + eq2.@logl - bvgarch.@logl ) scalar lr_pval = 1 - @cchisq(lr,1)
Thanks,
Naoise

Re: MV GARCH

Posted: Thu Mar 17, 2011 6:40 am
by pinnyoshea
Hi All,

I have another related question. I am running the above model on sovereign CDS and Bond returns for portugal, Ireland, greece and spain. The model achieves convergence for greece and spain but fails to converge for the other two. I have tried varying expanding and contracting the sample size and changing my initial coefficient values but the result is the same.

Does this mean I have a problem with the specification of the model? I have searched the forum already for the answer but was unsuccessful. I really hope someone can have a quick glance through my code and even just tell me if I am completely off the mark here.

Thanks again,
Naoise