R - Modelado multivariado GARCH (rugarch y ccgarch)

La primera vez que hago una pregunta aquí, haré todo lo posible para ser explícito, ¡pero avíseme si debo proporcionar más información! Segundo, esa es una pregunta larga ... ¡espero que sea fácil de resolver para alguien;)! Entonces, al usar "R", estoy modelando modelos GARCH multivariados basados ​​en algún papel (Manera et al. 2012).

Modelo los modelos de correlación condicional constante (CCC) y correlación condicional dinámica (DCC) con regresores externos en las ecuaciones de medias; utilizando la versión "R" 3.0.1 con el paquete "rugarch" versión 1.2-2 para el GARCH univariable con regresores externos, y el paquete "ccgarch" (versión 0.2.0-2) para los modelos CCC / DCC. (Actualmente estoy buscando en el paquete "rmgarch", pero parece ser solo para el DCC y también necesito el modelo CCC).

Tengo problemas en las ecuaciones medias de mis modelos. En el documento que mencioné anteriormente, ¡las estimaciones de los parámetros de la ecuación media entre los modelos CCC y DCC cambian! Y no sé cómo haría eso en R ... (actualmente, buscando en Google y en el libro de Tsay "Análisis de series cronológicas financieras" y el libro de Engle "Anticipando las correlaciones" para encontrar mi error)

Lo que quiero decir con "mis ecuaciones medias no cambian entre los modelos CCC y DCC", es lo siguiente: Especifico el GARCH univariable para mi n = 5 series de tiempo con el paquete rugarch. Luego, uso los parámetros de estimación de GARCH (términos ARCH + GARCH) y los uso para las funciones CCC y DCC "eccc.sim ()" y "dcc.sim ()". Luego, desde las funciones eccc.estimation () y dcc.estimation (), puedo recuperar las estimaciones de las ecuaciones de varianza y las matrices de correlación. Pero no por la ecuación media.

Publico el código R (reproducible y mi original) solo para modelos univariados y el modelo CCC. Gracias ya por leer mi post !!!!!

Nota: en el código a continuación, "data.repl" es un objeto "zoo" de dim 843x22 (9 series de devoluciones de Commodities diarias y series de variables explicativas). El GARCHO multivariado es solo para 5 series.

Código reproducible:

# libraries:
library(rugarch)
library(ccgarch)
library(quantmod)
# Creating fake data:
dataRegr <- matrix(rep(rnorm(3149,  11, 1),1), ncol=1, nrow=3149)
dataFuelsLag1 <- matrix(rep(rnorm(3149, 24, 8),2), ncol=2, nrow=3149)
#S&P 500 via quantmod and Yahoo Finance
T0 <- "2000-06-23"
T1 <- "2012-12-31"
getSymbols("^GSPC", src="yahoo", from=T0, to=T1)
sp500.close <- GSPC[,"GSPC.Close"], 
getSymbols("UBS", src="yahoo", from=T0, to=T1)
ubs.close <- UBS[,"UBS.Close"]
dataReplic <- merge(sp500.close, ubs.close, all=TRUE)
dataReplic[which(is.na(dataReplic[,2])),2] <- 0  #replace NA

### (G)ARCH modelling ###
#########################
# External regressors: macrovariables and all fuels+biofuel Working's T index
ext.regr.ext <- dataRegr
regre.fuels <- cbind(dataFuelsLag1, dataRegr)
### spec of GARCH(1,1) spec with AR(1) ###
garch11.fuels <- as.list(1:2)
for(i in 1:2){
  garch11.fuels[[i]] <- ugarchspec(mean.model = list(armaOrder=c(1,0), 
                                                     external.regressors = as.matrix(regre.fuels[,-i])))
}

### fit of GARCH(1,1) AR(1) ###
garch11.fuels.fit <- as.list(1:2)
for(i in 1:2){
  garch11.fuels.fit[[i]] <- ugarchfit(garch11.fuels[[i]], dataReplic[,i])
}
##################################################################
#### CCC fuels: with external regression in the mean eqaution ####
##################################################################
nObs <- length(data.repl[-1,1])
coef.unlist <- sapply(garch11.fuels.fit, coef)
cccFuels.a <- rep(0.1, 2)
cccFuels.A <- diag(coef.unlist[6,])
cccFuels.B <- diag(coef.unlist[7, ])
cccFuels.R <- corr.test(data.repl[,fuels.ind], data.repl[,fuels.ind])$r

# model=extended (Jeantheau (1998))
ccc.fuels.sim <- eccc.sim(nobs = nObs, a=cccFuels.a, A=cccFuels.A,
                          B=cccFuels.B, R=cccFuels.R, model="extended")
ccc.fuels.eps <- ccc.fuels.sim$eps
ccc.fuels.est <- eccc.estimation(a=cccFuels.a, A=cccFuels.A,
                                 B=cccFuels.B, R=cccFuels.R,
                                 dvar=ccc.fuels.eps, model="extended")
ccc.fuels.condCorr <- round(corr.test(ccc.fuels.est$std.resid,
                                      ccc.fuels.est$std.resid)$r,digits=3)

Mi código original:

### (G)ARCH modelling ###
#########################
# External regressors: macrovariables and all fuels+biofuel Working's T index
ext.regr.ext <- as.matrix(data.repl[-1,c(10:13, 16, 19:22)])
regre.fuels <- cbind(fuel.lag1, ext.regr.ext) #fuel.lag1 is the pre-lagged series
### spec of GARCH(1,1) spec with AR(1) ###
garch11.fuels <- as.list(1:5)
for(i in 1:5){
  garch11.fuels[[i]] <- ugarchspec(mean.model = list(armaOrder=c(1,0),
                                   external.regressors = as.matrix(regre.fuels[,-i])))
}# regre.fuels[,-i] => "-i" because I model an AR(1) for each mean equation

### fit of GARCH(1,1) AR(1) ###
garch11.fuels.fit <- as.list(1:5)
for(i in 1:5){
  j <- i
  if(j==5){j <- 7} #because 5th "fuels" is actually column #7 in data.repl
  garch11.fuels.fit[[i]] <- ugarchfit(garch11.fuels[[i]], as.matrix(data.repl[-1,j])))
}

#fuelsLag1.names <- paste(cmdty.names[fuels.ind], "(-1)")
fuelsLag1.names <- cmdty.names[fuels.ind]
rowNames.ext <- c("Constant", fuelsLag1.names, "Working's T Gasoline", "Working's T Heating Oil",
              "Working's T Natural Gas", "Working's T Crude Oil",
              "Working's T Soybean Oil", "Junk Bond", "T-bill", 
              "SP500", "Exch.Rate")
ic.n <- c("Akaike", "Bayes")
garch11.ext.univSpec <- univ.spec(garch11.fuels.fit, ols.fit.ext, rowNames.ext, 
                                  rowNum=c(1:15), colNames=cmdty.names[fuels.ind],
                                  ccc=TRUE)
##################################################################
#### CCC fuels: with external regression in the mean eqaution ####
##################################################################
# From my GARCH(1,1)-AR(1) model, I extract ARCH and GARCH
# in order to model a CCC GARCH model:
nObs <- length(data.repl[-1,1])
coef.unlist <- sapply(garch11.fuels.fit, coef)

cccFuels.a <- rep(0.1, length(fuels.ind))
cccFuels.A <- diag(coef.unlist[17,])
cccFuels.B <- diag(coef.unlist[18, ])
#based on Engle(2009) book, page 31:
cccFuels.R <- corr.test(data.repl[,fuels.ind], data.repl[,fuels.ind])$r

# model=extended (Jeantheau (1998))
# "allow the squared errors and variances of the series to affect
# the dynamics of the individual conditional variances
ccc.fuels.sim <- eccc.sim(nobs = nObs, a=cccFuels.a, A=cccFuels.A,
                                   B=cccFuels.B, R=cccFuels.R, model="extended")
ccc.fuels.eps <- ccc.fuels.sim$eps
ccc.fuels.est <- eccc.estimation(a=cccFuels.a, A=cccFuels.A,
                                          B=cccFuels.B, R=cccFuels.R,
                                          dvar=ccc.fuels.eps, model="extended")
ccc.fuels.condCorr <- round(corr.test(ccc.fuels.est$std.resid,
                                      ccc.fuels.est$std.resid)$r,digits=3)
colnames(ccc.fuels.condCorr) <- cmdty.names[fuels.ind]
rownames(ccc.fuels.condCorr) <- cmdty.names[fuels.ind]
lowerTri(ccc.fuels.condCorr, rep=NA)

Respuestas a la pregunta(1)

Su respuesta a la pregunta