Page 1 of 1

tv-garch-m program,warning 'singular covariance'

Posted: Mon May 02, 2011 4:47 am
by helen
hi!everybody.I am trying to run an estimation of multivariate GARCH in mean model (BEKK) using programming and my code is as follows.
Running the program, it does not work,failere to improve likelihood after 1 iteration,I got warning as 'singular covariance-coefficients are not unique'.
i am wondering why this happen?could anybody give me some advice?thanks you very much. :)

Code: Select all

' tri-variate BEKK of Engle and Kroner (1995): 'mean equation ' y1= lambda1*h(1,1)+lambda2*h(1,2)+lambda3*h(1,3)+ res1 ' y2=lambda2*h(2,2)+lambda3*h(2,3) + res2 ' y3=lambda3*h(3,3)+res3 ' res ~ N(0,H) ' ' H = omega*omega' + beta H(-1) beta' + alpha res(-1) res(-1)' alpha' ' ' where, ' y = 3 x 1 ' lambda = 3 x 1 ' H = 3 x 3 (symmetric) ' H(1,1) = variance of y1 (saved as var_y1) ' H(1,2) = cov of y1 and y2 (saved as cov_y1y2) ' H(1,3) = cov of y1 and y2 (saved as cov_y1y3) ' H(2,2) = variance of y2 (saved as var_y2) ' H(2,3) = cov of y1 and y3 (saved as cov_y2y3) ' H(3,3) = variance of y3 (saved as var_y3) ' omega = 3 x 3 low triangular ' beta = 3 x 3 diagonal ' alpha = 3 x 3 diagonal ' set sample ' first observation of s1 need to be one or two periods after ' the first observation of s0 sample s0 1 847 sample s1 3 846 ' 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(archm=var,m=100,c=1e-5) y1 equation eq2.arch(archm=var,m=100,c=1e-5) y2 equation eq3.arch(archm=var,m=100,c=1e-5) y3 'save the conditional variances eq1.makegarch garch1 eq2.makegarch garch2 eq3.makegarch garch3 ' declare coef vectors to use in GARCH model coef(3) lambda lambda(1) = eq1.c(1) lambda(2) = eq2.c(1) lambda(3) = eq3.c(1) coef(6) omega omega(1) = (eq1.c(2))^.5 omega(2) = 0 omega(3) = 0 omega(4) = eq2.c(2)^.5 omega(5) = 0 omega(6) = eq3.c(2)^.5 coef(3) alpha alpha(1) = (eq1.c(3))^.5 alpha(2) = (eq2.c(3))^.5 alpha(3) = (eq3.c(3))^.5 coef(3) beta beta(1) = (eq1.c(4))^.5 beta(2) = (eq2.c(4))^.5 beta(3) = (eq3.c(4))^.5 ' use sample var-cov as starting value of variance-covariance matrix series cov_y1y2 = @cov(y1-lambda(1)*garch1, y2-lambda(2)*garch2) series cov_y1y3 = @cov(y1-lambda(1)*garch1, y3-lambda(3)*garch3) series cov_y2y3 = @cov(y2-lambda(2)*garch2, y3-lambda(3)*garch3) series var_y1 = @var(y1-lambda(1)*garch1) series var_y2 = @var(y2-lambda(2)*garch2) series var_y3 = @var(y3-lambda(3)*garch3) series sqres1 = (y1-lambda(1)*garch1)^2 series sqres2 = (y2-lambda(2)*garch2)^2 series sqres3 = (y3-lambda(3)*garch3)^2 series res1res2 = (y1-lambda(1)*garch1)*(y2-lambda(2)*garch2) series res1res3 = (y1-lambda(1)*garch1)*(y3-lambda(3)*garch3) series res2res3 = (y2-lambda(2)*garch2)*(y3-lambda(3)*garch3) ' constant adjustment for log likelihood !mlog2pi = 3*log(2*@acos(-1)) ' ........................................................... ' LOG LIKELIHOOD ' set up the likelihood ' 1) open a new blank likelihood object name tvgarch ' 2) specify the log likelihood model by append ' ........................................................... logl tvgarch ' squared errors and cross errors tvgarch.append @logl logl tvgarch.append sqres1 = (y1-lambda(1)*var_y1-lambda(2)*cov_y1y2-lambda(3)*cov_y1y3)^2 tvgarch.append sqres2 = (y2-lambda(2)*var_y2-lambda(3)*cov_y2y3)^2 tvgarch.append sqres3 = (y3-lambda(3)*var_y3)^2 tvgarch.append res1res2 = (y1-lambda(1)*var_y1-lambda(2)*cov_y1y2-lambda(3)*cov_y1y3)*(y2-lambda(2)*var_y2-lambda(3)*cov_y2y3) tvgarch.append res1res3 = (y1-lambda(1)*var_y1-lambda(2)*cov_y1y2-lambda(3)*cov_y1y3)*(y3-lambda(3)*var_y3) tvgarch.append res2res3 = (y2-lambda(2)*var_y2-lambda(3)*cov_y2y3)*(y3-lambda(3)*var_y3) ' variance and covariance series tvgarch.append var_y1 = omega(1)^2 + beta(1)^2*var_y1(-1) + alpha(1)^2*sqres1(-1) tvgarch.append var_y2 = omega(2)^2+omega(4)^2 + beta(2)^2*var_y2(-1) + alpha(2)^2*sqres2(-1) tvgarch.append var_y3 = omega(3)^2+omega(5)^2+omega(6)^2 + beta(3)^2*var_y3(-1) + alpha(3)^2*sqres3(-1) tvgarch.append cov_y1y2 = omega(1)*omega(2) + beta(2)*beta(1)*cov_y1y2(-1) + alpha(2)*alpha(1)*res1res2(-1) tvgarch.append cov_y1y3 = omega(1)*omega(3) + beta(3)*beta(1)*cov_y1y3(-1) + alpha(3)*alpha(1)*res1res3(-1) tvgarch.append cov_y2y3 = omega(2)*omega(3) + omega(4)*omega(5) + beta(3)*beta(2)*cov_y2y3(-1) + alpha(3)*alpha(2)*res2res3(-1) ' determinant of the variance-covariance matrix tvgarch.append deth = var_y1*var_y2*var_y3 - var_y1*cov_y2y3^2-cov_y1y2^2*var_y3+2*cov_y1y2*cov_y2y3*cov_y1y3-cov_y1y3^2*var_y2 ' calculate the elements of the inverse of var_cov (H) matrix ' numbered as vech(inv(H)) tvgarch.append invh1 = (var_y2*var_y3-cov_y2y3^2)/deth tvgarch.append invh2 = -(cov_y1y2*var_y3-cov_y1y3*cov_y2y3)/deth tvgarch.append invh3 = (cov_y1y2*cov_y2y3-cov_y1y3*var_y2)/deth tvgarch.append invh4 = (var_y1*var_y3-cov_y1y3^2)/deth tvgarch.append invh5 = -(var_y1*cov_y2y3-cov_y1y2*cov_y1y3)/deth tvgarch.append invh6 = (var_y1*var_y2-cov_y1y2^2)/deth ' log-likelihood series tvgarch.append logl = -0.5*(!mlog2pi + (invh1*sqres1+invh4*sqres2+invh6*sqres3 +2*invh2*res1res2 +2*invh3*res1res3+2*invh5*res2res3 ) + log(deth)) ' remove some of the intermediary series tvgarch.append @temp invh1 invh2 invh3 invh4 invh5 invh6 sqres1 sqres2 sqres3 res1res2 res1res3 res2res3 deth ' estimate the model smpl s1 tvgarch.ml(showopts, m=100, c=1e-5) ' change below to display different output show tvgarch.output