[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