[R-SIG-Finance] DCC composite likelihood

Bastian Offermann bastian2507hk at yahoo.co.uk
Sat Nov 10 21:05:55 CET 2012


Hi everyone,

I want to estimate a standard DCC model by maximizing a composite 
likelihood function by optimizing over the function "comp" as shown in 
the code below. I want to get the optimal parameters alpha and beta for 
a set of 29 assets, i.e. 406 pairwise correlations. Each asset has 1019 
observations.

So what I am trying is basically the double for-loop in the function. 
Calculating the pairwise rho for each point in time and for each pair. 
CL here denotes the composite likelihood. I only want to have one alpha 
and one beta. The functional form is shown in eq. 2.8 on page 9/44 in 
the following paper: http://fic.wharton.upenn.edu/fic/papers/11/11-20.pdf

I guess it must be the for-loop since my optimization does not come to 
an end.

Thanks in advance.


----------------------------------------------------------------------------------------------------------------

library("stats")
library("rugarch")
library("moments")
library("tseries")
library("fGarch")
library("nlme")
library("fOptions")
library("NMOF")

res <- matrix(rnorm(1019*29, 1019, 29)   ## artificial data

comb <- combn(1:29, 2, FUN = NULL, simplify = TRUE)
comb.sq <- matrix(,1019,406)
comb.cr <- matrix(,1019,406)
for(j in 1:406) { comb.sq[,j] <- res[,comb[1,j]]^2 + res[,comb[2,j]]^2
                   comb.cr[,j] <- res[,comb[1,j]]*res[,comb[2,j]] 
}         ## only data manipulation

comp <- function(pars) {

alpha <- pars[1]
beta <- pars[2]
q11 <- matrix(,1019,406)
q12 <- matrix(,1019,406)
q22 <- matrix(,1019,406)
rho <- matrix(,1019,406)
rho12b <- matrix(,1,406)
like <- matrix(, 1019, 406)
CL <- NULL
comb <- combn(1:29, 2, FUN = NULL, simplify = TRUE)

q11[1,] <- 1         ## starting values for each qii, qij
q22[1,] <- 1
q12[1,] <- apply(comb.cr, 2, mean)
rho12b[1,] <- apply(comb.cr, 2, mean)
rho[1,] <- q12[1,]/sqrt(q11[1,]*q22[1,])

for(j in 1:406)  {     ## calculating time-varying pairwise correlation 
for each pair j and each point in time i
for(i in 2:1019) {


q11[i,j] <-  1 + alpha*(res[i-1,comb[1,j]]^2-1)+beta*(q11[i-1,j]-1)

q12[i,j] <- rho12b[1,j] + alpha*(comb.cr[i-1,j]-rho12b[1,j]) + 
beta*(q12[i-1,j]-rho12b[1,j])

q22[i,j] <- 1 + alpha*(res[i-1,comb[2,j]]^2-1) + beta*(q22[i-1,j]-1)

rho[i,j] <- q12[i,j]/sqrt(q11[i,j]*q22[i,j])

CL <- c(CL, 0.5*(log(1-rho[i,j]^2) + (comb.sq[i,j] - 
2*rho[i,j]*comb.cr[i,j])/(1-rho[i,j]^2)))

                   }
                   }
CL <- sum(CL)
return(CL)
                    }



const1 <- matrix(c(1,0,-1,0,1,-1), 3, 2)   # constraints for nonlinear 
optimization
const2 <- c(0.0001, 0.0001, -0.999)
constrOptim(c(0.1, 0.85), comp, NULL, ui=const1, ci=const2)


---------------------------------------------------------------------------------------------------

R version 2.14.1 (2011-12-22)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United 
States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United 
States.1252

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods base

other attached packages:
  [1] NMOF_0.25-4           fOptions_2160.81 nlme_3.1-104          
fGarch_2110.80        fBasics_2160.85
  [6] MASS_7.3-16           timeSeries_2160.95 timeDate_2160.95      
tseries_0.10-29       zoo_1.7-7
[11] quadprog_1.5-4        moments_0.13 rugarch_1.0-11        
Rsolnp_1.12           truncnorm_1.0-5
[16] chron_2.3-42          numDeriv_2012.3-1 RcppArmadillo_0.3.4.0 
Rcpp_0.9.10           R.utils_1.16.2
[21] R.oo_1.9.9            R.methodsS3_1.4.2

loaded via a namespace (and not attached):
[1] grid_2.14.1      lattice_0.20-10  stabledist_0.6-4 tools_2.14.1



More information about the R-SIG-Finance mailing list