Estoy analizando la serie FTSE 100, desde 2007-01-01 hasta 2010-12-31 (tarea de examen universitario). Tengo que usar los datos hasta el 2010-11-30 como muestra, y las observaciones restantes (23) como pronóstico dentro de la muestra (para verificar el rendimiento predictivo de mi modelo). El modelo ajustado es un ARMA(3,2) con perturbaciones GARCH(1,1) en la muestra diferenciada (en realidad, el modelo es un ARIMA):
model.spec.final = ugarchspec(variance.model=list(model="fGARCH", submodel="GARCH", garchOrder=c(2,1)), mean.model = list(armaOrder=c(3,2), include.mean=F,arfima = FALSE), distribution.model="std", fixed.pars=list(alpha1=0))
model.fit.final = ugarchfit(spec=model.spec.final, data=d_FTSE, out.sample=23, solver.control=list(trace=0))
El problema de pronóstico:
model.forecast = ugarchforecast(model.fit.final, n.ahead=23, n.roll=23, out.sample = 23)
me da esta salida:
> model.forecast
*------------------------------------*
* Pronóstico del Modelo GARCH *
*------------------------------------*
Modelo: fGARCH
Sub-Modelo fGARCH: GARCH
Horizonte: 23
Pasos de avance: 23
Fuera de muestra: 23
Pronóstico de 0-rollo [T0=2010-11-30]:
Serie Sigma
T+1 -8.4391 82.56
T+2 7.2799 79.80
T+3 2.7655 NA
T+4 -9.5286 NA
T+5 5.8482 NA
T+6 3.9431 NA
T+7 -9.1431 NA
T+8 4.3687 NA
T+9 4.8931 NA
T+10 -8.5682 NA
T+11 2.9420 NA
T+12 5.6136 NA
T+13 -7.8394 NA
T+14 1.5987 NA
T+15 6.1117 NA
T+16 -6.9922 NA
T+17 0.3636 NA
T+18 6.3994 NA
T+19 -6.0613 NA
T+20 -0.7440 NA
T+21 6.4927 NA
T+22 -5.0795 NA
T+23 -1.7100 NA
el resultado es el mismo si elimino la especificación sobre las observaciones fuera de la muestra (ya que también está especificado en el ajuste del modelo) y si modifico el parámetro n.roll. ¿por qué todos esos NA? ¿cómo puedo resolver el problema?
intentando con este código:
spec=getspec(model.fit.final)
setfixed(spec) <- as.list(coef(model.fit.final))
model.forecast.2= ugarchforecast(spec, n.ahead=1, n.roll=23, data=d_FTSE[1:length(d_FTSE), ,drop=F],out.sample=23)
que viene de la respuesta a otra pregunta (Forecasting using rugarch package) parece funcionar, pero cuando grafico los resultados:
> plot(model.forecast.2,which="all")
Error in rect(fdates[i - 1], Zdn[i - 1], fdates[i], Zup[i], col = colors()[142], :
no se pueden mezclar coordenadas de longitud cero y de longitud no cero
Es muy frustrante.
estadísticas básicas:
> stat.desc(d_FTSE)
FTSE.Ajustado
nbr.val 1044.0000000
nbr.null 33.0000000
nbr.na 0.0000000
min -391.0996100
max 431.2998050
rango 822.3994150
suma -320.8999030
mediana 0.0000000
media -0.3073754
SE.media 2.4136309
IC.media.0.95 4.7361256
var 6081.9409506
desv.est 77.9867998
coef.var -253.7184283
gracias de antemano.
He podido utilizar correctamente la función ugarchroll: ¿realiza un trabajo similar a ugarchforecast? aquí hay una parte de la salida:
> model.forecast3
*-------------------------------------*
* GARCH Roll *
*-------------------------------------*
No. Refits : 2
Horizonte de Refit : 22
No. Pronósticos : 23
Modelo GARCH : fGARCH(2,1)
SubModelo fGARCH : GARCH
Distribución : std
Densidad de Pronóstico:
Mu Sigma Skew Shape Shape(GIG) Realizado
2010-12-01 -8.4391 82.5557 0 10.8735 0 114.2002
2010-12-02 4.3050 79.8021 0 10.8735 0 125.1001
2010-12-03 0.6100 68.5355 0 10.8735 0 -22.3003
2010-12-06 -12.0731 59.4221 0 10.8735 0 25.0000
(...)
0 votos
¿Puede proporcionar un resumen de sus retornos (media, desviación estándar...)?
0 votos
Malick, en realidad estoy trabajando en la serie diferenciada. Sin embargo, la edité con algunas estadísticas básicas de esa serie.
0 votos
Tienes algunos problemas en tus devoluciones: cf mín = -391. Calcula los rendimientos logarítmicos y aplica tu modelo sobre ellos.
2 votos
No puedes usar el modelo GARCH si tus datos no son estacionarios. Esta es la condición primordial para aplicar cualquier modelo de la familia GARCH. Tomar la diferencia absoluta de los precios no hace que la serie sea estacionaria. La razón es simple: los cambios en el precio de las acciones dependen del nivel de precio existente. A mayores precios, mayor desviación. Por lo tanto, es mejor tomar la diferencia de logaritmos.
0 votos
Simplemente traza tu gráfico de diferencia de series. Verás un pico más grande en los datos cuando el valor del índice sea alto y un pico más bajo cuando el valor del índice sea bajo.
0 votos
Acabo de ver picos más grandes cuando la diferencia es mayor, sin embargo, la prueba adf dijo que la serie diferenciada es estacionaria (en todos los niveles de significancia)
0 votos
Grafica $dY_t$ en función de $Y_t$ y luego observa tu gráfico. Encontrarás una especie de tendencia ascendente en tus datos.