How to do Multivariate Mean-GARCH in EVIEWS-7
Posted: Thu Sep 09, 2010 2:03 pm
Dear Friend,
Recently I have been trying to estimate Multivariate Mean-GARCH using 3 series.
I am herewith uploading the the programme for the analysis of Multivariate Mean-GARCH in Eviews-7. This is not working.
Can anybody suggest where I am going wrong?
The programmes are as follows
TV_GARCH.PRG
' example program for EViews LogL object
'
'
' restricted version of
' tri-variate BEKK of Engle and Kroner (1995):
' y = mu + lambda*H + res
' res ~ N(0,H)
'
' H = omega*omega' + beta H(-1) beta' + alpha res(-1) res(-1)' alpha'
'
'
' where,
' y = 3 x 1
' mu = 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
'
'change path to program path
%path = @runpath
cd %path
' load workfile
load fx.wf1
' dependent variables of all series must be continues
series y1 = dlnjy
series y2 = dnsf
series y3 = dlnbp
' set sample
'first observation of s1 need to be one or two periods after
' the first observation of s0
sample s0 1980-01-07 2000-12-25
' 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 c
equation eq2.arch(archm=var,m=100,c=1e-5) y2 c
equation eq3.arch(archm=var,m=100,c=1e-5) y3 c
'save the conditional variances
eq1.makegarch garch1
eq2.makegarch garch2
eq3.makegarch garch3
' declare coef vectors to use in GARCH model
coef(3)
lambda(1) = eq1.c(1)
lambda(2) = eq2.c(1)
lambda(3) = eq3.c(1)
coef(3) mu
mu(1) = eq1.c(2)
mu(2) = eq2.c(2)
mu(3) = eq3.c(3)
coef(6) omega
omega(1) = (eq1.c(3))^.5
omega(2) = 0
omega(3) = 0
omega(4) = eq2.c(3)^.5
omega(5) = 0
omega(6) = eq3.c(3)^.5
coef(3) alpha
alpha(1) = (eq1.c(4))^.5
alpha(2) = (eq2.c(4))^.5
alpha(3) = (eq2.c(4))^.5
coef(3) beta
beta(1) = (eq1.c(5))^.5
beta(2) = (eq2.c(5))^.5
beta(3) = (eq3.c(5))^.5
' use sample var-cov as starting value of variance-covariance matrix
series cov_y1y2 = @cov(y1-mu(1)-lambda(1)*garch1, y2-mu(2)-lambda(2)*garch2)
series cov_y1y3 = @cov(y1-mu(1)-lambda(1)*garch1, y3-mu(3)-lambda(3)*garch3)
series cov_y2y3 = @cov(y2-mu(2)-lambda(2)*garch2, y3-mu(3)-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-mu(1)-lambda(1)*garch1)^2
series sqres2 = (y2-mu(2)-lambda(2)*garch2)^2
series sqres3 = (y3-mu(3)-lambda(3)*garch3)^2
series res1res2 = (y1-mu(1)-lambda(1)*garch1)*(y2-mu(2)-lambda(2)*garch2)
series res1res3 = (y1-mu(1)-lambda(1)*garch1)*(y3-mu(3)-lambda(3)*garch3)
series res2res3 = (y2-mu(2)-lambda(2)*garch2)*(y3-mu(3)-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-mu(1)-lambda(1)*garch1)^2
tvgarch.append sqres2 = (y2-mu(2)-lambda(2)*garch2)^2
tvgarch.append sqres3 = (y3-mu(3)-lambda(3)*garch3)^2
tvgarch.append res1res2 = (y1-mu(1)-lambda(1)*garch1)*(y2-mu(2)-lambda(2)*garch2)
tvgarch.append res1res3 = (y1-mu(1)-lambda(1)*garch1)*(y3-mu(3)-lambda(3)*garch3)
tvgarch.append res2res3 = (y2-mu(2)-lambda(2)*garch2)*(y3-mu(3)-lambda(3)*garch3)
' 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
tvgarchm.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
graph var.line var_y1 var_y2 var_y3
graph cov.line cov_y1y2 cov_y1y3 cov_y2y3
show var
show cov
' LR statistic for univariate vs trivariate
scalar lr = -2*(eq1.@logl + eq2.@logl + eq3.@logl - tvgarch.@logl)
scalar lr_pval = 1 - @cchisq(lr,3)
Recently I have been trying to estimate Multivariate Mean-GARCH using 3 series.
I am herewith uploading the the programme for the analysis of Multivariate Mean-GARCH in Eviews-7. This is not working.
Can anybody suggest where I am going wrong?
The programmes are as follows
TV_GARCH.PRG
' example program for EViews LogL object
'
'
' restricted version of
' tri-variate BEKK of Engle and Kroner (1995):
' y = mu + lambda*H + res
' res ~ N(0,H)
'
' H = omega*omega' + beta H(-1) beta' + alpha res(-1) res(-1)' alpha'
'
'
' where,
' y = 3 x 1
' mu = 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
'
'change path to program path
%path = @runpath
cd %path
' load workfile
load fx.wf1
' dependent variables of all series must be continues
series y1 = dlnjy
series y2 = dnsf
series y3 = dlnbp
' set sample
'first observation of s1 need to be one or two periods after
' the first observation of s0
sample s0 1980-01-07 2000-12-25
' 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 c
equation eq2.arch(archm=var,m=100,c=1e-5) y2 c
equation eq3.arch(archm=var,m=100,c=1e-5) y3 c
'save the conditional variances
eq1.makegarch garch1
eq2.makegarch garch2
eq3.makegarch garch3
' declare coef vectors to use in GARCH model
coef(3)
lambda(1) = eq1.c(1)
lambda(2) = eq2.c(1)
lambda(3) = eq3.c(1)
coef(3) mu
mu(1) = eq1.c(2)
mu(2) = eq2.c(2)
mu(3) = eq3.c(3)
coef(6) omega
omega(1) = (eq1.c(3))^.5
omega(2) = 0
omega(3) = 0
omega(4) = eq2.c(3)^.5
omega(5) = 0
omega(6) = eq3.c(3)^.5
coef(3) alpha
alpha(1) = (eq1.c(4))^.5
alpha(2) = (eq2.c(4))^.5
alpha(3) = (eq2.c(4))^.5
coef(3) beta
beta(1) = (eq1.c(5))^.5
beta(2) = (eq2.c(5))^.5
beta(3) = (eq3.c(5))^.5
' use sample var-cov as starting value of variance-covariance matrix
series cov_y1y2 = @cov(y1-mu(1)-lambda(1)*garch1, y2-mu(2)-lambda(2)*garch2)
series cov_y1y3 = @cov(y1-mu(1)-lambda(1)*garch1, y3-mu(3)-lambda(3)*garch3)
series cov_y2y3 = @cov(y2-mu(2)-lambda(2)*garch2, y3-mu(3)-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-mu(1)-lambda(1)*garch1)^2
series sqres2 = (y2-mu(2)-lambda(2)*garch2)^2
series sqres3 = (y3-mu(3)-lambda(3)*garch3)^2
series res1res2 = (y1-mu(1)-lambda(1)*garch1)*(y2-mu(2)-lambda(2)*garch2)
series res1res3 = (y1-mu(1)-lambda(1)*garch1)*(y3-mu(3)-lambda(3)*garch3)
series res2res3 = (y2-mu(2)-lambda(2)*garch2)*(y3-mu(3)-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-mu(1)-lambda(1)*garch1)^2
tvgarch.append sqres2 = (y2-mu(2)-lambda(2)*garch2)^2
tvgarch.append sqres3 = (y3-mu(3)-lambda(3)*garch3)^2
tvgarch.append res1res2 = (y1-mu(1)-lambda(1)*garch1)*(y2-mu(2)-lambda(2)*garch2)
tvgarch.append res1res3 = (y1-mu(1)-lambda(1)*garch1)*(y3-mu(3)-lambda(3)*garch3)
tvgarch.append res2res3 = (y2-mu(2)-lambda(2)*garch2)*(y3-mu(3)-lambda(3)*garch3)
' 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
tvgarchm.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
graph var.line var_y1 var_y2 var_y3
graph cov.line cov_y1y2 cov_y1y3 cov_y2y3
show var
show cov
' LR statistic for univariate vs trivariate
scalar lr = -2*(eq1.@logl + eq2.@logl + eq3.@logl - tvgarch.@logl)
scalar lr_pval = 1 - @cchisq(lr,3)