3 votos

Pronóstico condicional devuelve en DCC-GARCH-cópula enfoque en R

alguien que me pueda ayudar a interpretar y modificar este código?

Tengo un conjunto de datos y quieres reservar los últimos 100 retornos para el análisis de la muestra. Después de especificar y ajustar el garch-spd-cópula, en el bucle para solucionar una condición para $i=1$ y otro por $i=2,...,100$, y calcular estos primeros cálculos (presigma, preR, preQ, ...). Ahora, quiero R para hacer el 1 paso delante de previsión simulado 1000 veces (n.sim=1 y m.sim=1000 en cgarchsim comando), mientras que de forma incremental en cuenta la "extendida" del conjunto de datos (considerar T para la previsión de T+1, considere la posibilidad de T+1, para la previsión de T+2, ...). Me gustaría que el resultado final sea un 100x3x1000 array (100: observaciones, 3: activos, 1000 simulaciones) de 1-paso por delante de las previsiones.

install.packages("rmgarch")
library(rmgarch)

data(dji30retw)
Dat = dji30retw[, 1:3, drop = FALSE]

uspec17 = ugarchspec(mean.model = list(armaOrder = c(0,0)), 
             variance.model = list(garchOrder = c(1,1), model = "sGARCH", variance.targeting=FALSE), 
             distribution.model = "norm")
spec17 = cgarchspec(uspec = multispec( replicate(3, uspec17) ), asymmetric = FALSE, 
             distribution.model = list(copula = "mvnorm", method = "Kendall", 
                                       time.varying = TRUE, transformation = "spd"))
fit17 <- cgarchfit(spec17, Dat, out.sample=100, spd.control=list(upper=0.95, lower=0.05, type="mle", kernel="normal"),
         cluster=NULL, fit.control=list(eval.se=FALSE))

T = dim(Dat)[1]-100
simMu = simS = filtMu = filtS = matrix(NA, ncol = 3, nrow = 100)
simCor = simC = filtC = filtCor = array(NA, dim = c(3,3,100))
colSd = function(x) apply(x, 2, "sd")
specx17 = spec17
for(i in 1:3) specx17@umodel$fixed.pars[[i]] = as.list(fit17@model$mpars[fit17@model$midx[,i]==1,i])
setfixed(specx17)<-as.list(fit17@model$mpars[fit17@model$midx[,4]==1,4])

for(i in 1:100){
 if(i==1){
 presigma = matrix(tail(sigma(fit17), 1), ncol = 3)
 prereturns = matrix(unlist(Dat[T, ]), ncol = 3, nrow = 1)
 preresiduals = matrix(tail(residuals(fit17),1), ncol = 3, nrow = 1)
 preR = last(rcor(fit17))[,,1]
 diag(preR) = 1
 preQ = fit17@mfit$Qt[[length(fit17@mfit$Qt)]]
 preZ = tail(fit17@mfit$Z, 1)
 tmp = cgarchfilter(specx17, Dat[1:(T+1), ], filter.control = list(n.old = T))
 filtMu[i,] = tail(fitted(tmp), 1)
 filtS[i,] = tail(sigma(tmp), 1)
 filtC[,,i] = last(rcov(tmp))[,,1]
 filtCor[,,i] = last(rcor(tmp))[,,1]
 } 
 else{
 presigma = matrix(tail(sigma(tmp), 1), ncol = 3)
 prereturns = matrix(unlist(Dat[(T+i-1), ]), ncol = 3, nrow = 1)
 preresiduals = matrix(tail(residuals(tmp),1), ncol = 3, nrow = 1)
 preR = last(rcor(tmp))[,,1]
 diag(preR) = 1
 preQ = tmp@mfilter$Qt[[length(tmp@mfilter$Qt)]]
 preZ = tail(tmp@mfilter$Z, 1) 
 tmp = cgarchfilter(specx17, Dat[1:(T+i-1), ], filter.control = list(n.old = T))  		
 filtMu[i,] = tail(fitted(tmp), 1)
 filtS[i,] = tail(sigma(tmp), 1)
 filtC[,,i] = last(rcov(tmp))[,,1]
 filtCor[,,i] = last(rcor(tmp))[,,1]
 }
 sim17 = cgarchsim(fit17, n.sim = 1, m.sim = 1000, startMethod = "sample", preR = preR, preQ = preQ, preZ = preZ,
                prereturns = prereturns, presigma = presigma, preresiduals = preresiduals, cluster = NULL)
 simx = t(sapply(sim17@msim$simX, FUN = function(x) x[1,]))
 simMu[i,] = colMeans(simx)
 simC[,,i] = sim17@msim$simH[[1]][,,1]
 simCor[,,i] = sim17@msim$simR[[1]][,,1]
 simS[i,] = sqrt(diag(simC[,,i]))
}

Sin embargo, si ejecuto esta, como condicional de rendimientos (sim17@msim$simX) puedo obtener tres 1 paso delante previsiones simulado 1000 veces, no hay rastro de el resto de los 99 valores que ser estimado. Alguna idea de por qué, y cómo modificar el código para tener 100 estimaciones?

1voto

Guan Puntos 21

En la línea de:

sim17 = cgarchsim(fit17, n.sim = 1, m.sim = 1000, startMethod = "sample", preR = preR, preQ = preQ, preZ = preZ,
            prereturns = prereturns, presigma = presigma, preresiduals = preresiduals, cluster = NULL)

usted debe agregar n.start=0:

sim17 = cgarchsim(fit17, n.sim = 1, n.start=0, m.sim = 1000, startMethod = "sample", preR = preR, preQ = preQ, preZ = preZ,
            prereturns = prereturns, presigma = presigma, preresiduals = preresiduals, cluster = NULL)

Debería funcionar bien entonces.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X