1# the full log-likelihood function of the DCC-GARCH(1,1) model 2loglik.dcc <- function (param, dvar, model) { 3 nobs <- dim(dvar)[1] 4 ndim <- dim(dvar)[2] 5 Id <- diag(ndim) 6 npar <- length(param) 7 dcc.param <- param[(npar-1):npar] 8 9 if(model=="diagonal"){ # for the diagonal vector GARCH equation 10 a <- param[1:ndim] # constant in variance 11 A <- diag(param[(ndim+1):(2*ndim)]) # ARCH parameter 12 B <- diag(param[(2*ndim+1):(3*ndim)]) # GARCH parameter 13 } else if(model=="extended"){ # for the extended vector GARCH equation 14 a <- param[1:ndim] 15 A <- matrix(param[(ndim+1):(ndim^2+ndim)], ndim, ndim) 16 B <- matrix(param[(ndim^2+ndim+1):(2*ndim^2+ndim)], ndim, ndim) 17 } 18 19 h <- vector.garch(dvar, a, A, B) 20 z <- dvar/sqrt(h) 21 DCC <- dcc.est(z, dcc.param)$DCC 22 23# lf1 <- -0.5*ndim*log(2*pi) - rowSums(log(h)) -0.5*rowSums(z^2) 24 lf1 <- -0.5*ndim*log(2*pi) - rowSums(log(h)) # bug fixed on 23072009 25 lf2 <- numeric(nobs) 26 for( i in 1:nobs){ 27 R <- matrix(DCC[i,], ndim, ndim) 28 invR <- solve(R) 29 tmpz <- as.vector(z[i,]) 30 lf2[i] <- -0.5*(log(det(R)) +sum(tmpz*crossprod(invR, tmpz))) 31 } 32 sum(lf1 + lf2) 33} 34