10 votos

Predicción ARMA + GARCH con el paquete rugarch (R)

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.

1voto

Nick Klauer Puntos 2837

Tus estadísticas de resumen son realmente extrañas ( mediana = 0.0000 , máx 431 ...).

Calcula los rendimientos de la siguiente manera: $log(p_{t+1}/p_{t}) *100 $ y ejecuta el Arma-Garch en él.

Editar:

Como explicación: necesitas usar una serie temporal estacionaria: ver @Neeraj comentario

0 votos

Es porque estoy trabajando en los datos sin procesar diferenciados: d_FTSE_sample = diff(FTSE_sample), sin calcular el rendimiento (log). ¿Realmente este es el problema??

1 votos

Sí, es un problema porque al aplicar diff () no estás calculando los retornos. Alternativamente, puedes usar $ (Y_{t+1}-Y_{t} )/Y_{t}$.

1 votos

Bueno, mi objetivo no era calcular rendimientos, sino simplemente analizar la serie de tiempo: no pensé que, para este propósito, fuera "obligatorio" tener una serie de rendimientos, ya que mi profesor no calculó los rendimientos en ningún caso. Si me estás diciendo que es necesario para tener un mejor análisis (y para que las funciones de R funcionen correctamente), ¡lo haré! EDITAR: Quiero decir, estaba teniendo en cuenta que la serie no es estacionaria, y apliqué un modelo ARIMA a los datos para ajustar la no estacionariedad. ¿Realmente es necesario tener rendimientos? Porque, si es así, tengo que hacer todo el trabajo de nuevo.

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