Para concluir con la serie estudiada durante las Actividad 7 y 8, ahora procederemos a hacer predicciones para esta serie combinando los modelos ARIMA y GARCH propuestos en las actividades pasadas.
# ?AirPassengers
data("AirPassengers")
Y <- AirPassengers
head(Y,24)
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1949 112 118 132 129 121 135 148 148 136 119 104 118
## 1950 115 126 141 135 125 149 170 170 158 133 114 140
# auto.arima(Y, ic="aic", trace=T) <--- Best model: ARIMA(0,1,1)(2,1,0)[12]
arima.opt <- arima(Y, order=c(0,1,1), seasonal = list(order = c(2, 1, 0), period = 12))
resid2 <- arima.opt$residuals^2
garch.fit <- garchFit(~garch(1,1), resid2, include.mean=F)
##
## Series Initialization:
## ARMA Model: arma
## Formula Mean: ~ arma(0, 0)
## GARCH Model: garch
## Formula Variance: ~ garch(1, 1)
## ARMA Order: 0 0
## Max ARMA Order: 0
## GARCH Order: 1 1
## Max GARCH Order: 1
## Maximum Order: 1
## Conditional Dist: norm
## h.start: 2
## llh.start: 1
## Length of Series: 144
## Recursion Init: mci
## Series Scale: 215.3649
##
## Parameter Initialization:
## Initial Parameters: $params
## Limits of Transformations: $U, $V
## Which Parameters are Fixed? $includes
## Parameter Matrix:
## U V params includes
## mu -5.51030751 5.510308 0.0 FALSE
## omega 0.00000100 100.000000 0.1 TRUE
## alpha1 0.00000001 1.000000 0.1 TRUE
## gamma1 -0.99999999 1.000000 0.1 FALSE
## beta1 0.00000001 1.000000 0.8 TRUE
## delta 0.00000000 2.000000 2.0 FALSE
## skew 0.10000000 10.000000 1.0 FALSE
## shape 1.00000000 10.000000 4.0 FALSE
## Index List of Parameters to be Optimized:
## omega alpha1 beta1
## 2 3 5
## Persistence: 0.9
##
##
## --- START OF TRACE ---
## Selected Algorithm: nlminb
##
## R coded nlminb Solver:
##
## 0: 202.32040: 0.100000 0.100000 0.800000
## 1: 201.46039: 0.111272 0.133138 0.814336
## 2: 200.00422: 0.0819789 0.147673 0.795328
## 3: 198.96870: 0.0758046 0.182232 0.809408
## 4: 198.55350: 0.0153369 0.218227 0.837170
## 5: 198.44466: 0.0394790 0.289112 0.826432
## 6: 197.66069: 0.0423671 0.303056 0.791390
## 7: 197.54894: 0.0283638 0.295623 0.799269
## 8: 197.34920: 0.0281245 0.288137 0.815310
## 9: 197.29756: 0.0220209 0.275007 0.825497
## 10: 197.26333: 0.0248130 0.258385 0.830911
## 11: 197.26099: 0.0246309 0.252421 0.831457
## 12: 197.25778: 0.0237725 0.248005 0.835415
## 13: 197.25744: 0.0246264 0.247209 0.835398
## 14: 197.25699: 0.0244581 0.248193 0.834793
## 15: 197.25699: 0.0244165 0.248346 0.834755
## 16: 197.25699: 0.0244227 0.248279 0.834766
## 17: 197.25699: 0.0244218 0.248302 0.834763
## 18: 197.25699: 0.0244217 0.248302 0.834763
##
## Final Estimate of the Negative LLH:
## LLH: 970.8731 norm LLH: 6.742174
## omega alpha1 beta1
## 1132.7308818 0.2483019 0.8347626
##
## R-optimhess Difference Approximated Hessian Matrix:
## omega alpha1 beta1
## omega -3.902190e-06 -3.950682e-02 -9.304018e-02
## alpha1 -3.950682e-02 -6.704186e+02 -1.383887e+03
## beta1 -9.304018e-02 -1.383887e+03 -3.375743e+03
## attr(,"time")
## Time difference of 0.003076077 secs
##
## --- END OF TRACE ---
##
##
## Time to Estimate Parameters:
## Time difference of 0.02467203 secs
arima.preds <- predict(arima.opt, n.ahead = 12)
garch.preds <- predict(garch.fit, n.ahead = 12, crit_val=1.96, plot=T)
Aquí el valor crítico (crit_val=1.96) es el valor más comúnmente usado, pues corresponde al valor necesario para generar un Intervalo de Confianza del 95%. Otros valores críticos importantes se listan a continuación dependiendo del porcentaje que desean cubrir con su intervalo de confianza:
Sintaxis función qnorm # Es la distribución normal estándar (Z)
qnorm(p, # Número o vector de probabilidades
mean = 0, # Número o vector representando la/s media/s
sd = 1, # Número o vector representando la/s desviación/es típica/s
lower.tail = TRUE, # Si TRUE, las probabilidades son P(X <= x), o P(X > x) si FALSE
log.p = FALSE) # Si TRUE, las probabilidades vienen dadas como logaritmos
qnorm(0.975) #95% Confidence Interval
## [1] 1.959964
qnorm(0.95) #90% Confidence Interval
## [1] 1.644854
qnorm(0.90) #80% Confidence Interval
## [1] 1.281552
qnorm(0.995) #99% Confidence Interval
## [1] 2.575829
La pregunta de como el 95% de confianza, corresponde a un valor p de 0.975, para conocer el valor crítico (1.96)
nivel_confianza <- 0.90 # Intervalo o nivel de confianza
calcula_p <- 1 - (1 - nivel_confianza) / 2 # Valor p que requiere qnorm
mi_valor_critico <- qnorm(calcula_p) # Valor critico resultado
print(mi_valor_critico) # Imprimir el valor crítico
## [1] 1.644854
crit_val <- 1.96
lowband.arima <- arima.preds$pred - crit_val*arima.preds$se
upband.arima <- arima.preds$pred + crit_val*arima.preds$se
# ? cbind
# ? ts.plot
ts.plot(cbind(tail(AirPassengers,36), arima.preds$pred, lowband.arima, upband.arima), lty=c(1,3,3,3), col=c("black", "blue", "red", "purple"), main="Proyecciones AirPassangers")
lowband.garch <- arima.preds$pred - sqrt(garch.preds$standardDeviation)
upband.garch <- arima.preds$pred + sqrt(garch.preds$standardDeviation)
ts.plot(cbind(tail(AirPassengers,36), arima.preds$pred, lowband.garch, upband.garch), lty=c(1,3,3,3), col=c("black", "blue", "red", "red"), main="Proyecciones IPC")
Breve comparativa de los intervalos
lowband.arima
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 428.9610 400.5655 433.2625 466.3836 477.7945 532.9096 619.8424 604.2340
## Sep Oct Nov Dec
## 1961 505.1796 452.8110 383.7362 426.9380
lowband.garch
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 426.9851 402.2312 437.9938 473.7880 487.5805 544.8492 633.7499 619.9537
## Sep Oct Nov Dec
## 1961 522.5780 471.7717 404.1562 448.7246
upband.arima
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 473.7328 453.6390 493.5042 533.0271 550.2764 610.7935 702.7773 691.9293
## Sep Oct Nov Dec
## 1961 597.3899 549.3253 484.3707 531.5304
upband.garch
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 475.7087 451.9733 488.7729 525.6227 540.4903 598.8538 688.8698 676.2097
## Sep Oct Nov Dec
## 1961 579.9914 530.3645 463.9507 509.7439
O bien de la distancia hacia la media
arima.preds$pred - lowband.arima
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 22.38590 26.53673 30.12088 33.32172 36.24095 38.94196 41.46740 43.84763
## Sep Oct Nov Dec
## 1961 46.10515 48.25717 50.31723 52.29620
arima.preds$pred - lowband.garch
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 24.36179 24.87108 25.38953 25.91738 26.45490 27.00233 27.55994 28.12798
## Sep Oct Nov Dec
## 1961 28.70670 29.29638 29.89728 30.50965
upband.arima - arima.preds$pred
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 22.38590 26.53673 30.12088 33.32172 36.24095 38.94196 41.46740 43.84763
## Sep Oct Nov Dec
## 1961 46.10515 48.25717 50.31723 52.29620
upband.garch - arima.preds$pred
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 24.36179 24.87108 25.38953 25.91738 26.45490 27.00233 27.55994 28.12798
## Sep Oct Nov Dec
## 1961 28.70670 29.29638 29.89728 30.50965
Nótese como en el caso de los intervalos originales del modelo ARIMA los intervalos van incrementando notablemente a través del tiempo; sin embargo al momento de combinar con el modelo GARCH, aunque sí sigue habiendo incremento a través del tiempo, este aumento es mucho más gradual.
Desarrolla las actividades del punto 4 hasta antes de este punto (excepto 4.1, 4.2 y 4.3), pero con intervalo de confianza del 99% qnorm(0.995) #99% Confidence Interval [1] 2.575829
garch.preds <- predict(garch.fit, n.ahead = 12, crit_val=2.575829, plot=T)
crit_val <- 2.575829
lowband.arima <- arima.preds$pred - crit_val*arima.preds$se
upband.arima <- arima.preds$pred + crit_val*arima.preds$se
# ? cbind
# ? ts.plot
ts.plot(cbind(tail(AirPassengers,36), arima.preds$pred, lowband.arima, upband.arima), lty=c(1,3,3,3), col=c("black", "blue", "red", "purple"), main="Proyecciones AirPassangers")
lowband.garch <- arima.preds$pred - sqrt(garch.preds$standardDeviation)
upband.garch <- arima.preds$pred + sqrt(garch.preds$standardDeviation)
ts.plot(cbind(tail(AirPassengers,36), arima.preds$pred, lowband.garch, upband.garch), lty=c(1,3,3,3), col=c("black", "blue", "red", "red"), main="Proyecciones IPC")
lowband.arima
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 421.9274 392.2277 423.7985 455.9140 466.4076 520.6741 606.8134 590.4572
## Sep Oct Nov Dec
## 1961 490.6934 437.6486 367.9266 410.5066
lowband.garch
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 426.9851 402.2312 437.9938 473.7880 487.5805 544.8492 633.7499 619.9537
## Sep Oct Nov Dec
## 1961 522.5780 471.7717 404.1562 448.7246
upband.arima
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 480.7664 461.9768 502.9682 543.4967 561.6632 623.0290 715.8062 705.7062
## Sep Oct Nov Dec
## 1961 611.8760 564.4876 500.1803 547.9618
upband.garch
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 475.7087 451.9733 488.7729 525.6227 540.4903 598.8538 688.8698 676.2097
## Sep Oct Nov Dec
## 1961 579.9914 530.3645 463.9507 509.7439
arima.preds$pred - lowband.arima
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 29.41952 34.87453 39.58482 43.79135 47.62780 51.17746 54.49640 57.62449
## Sep Oct Nov Dec
## 1961 60.59131 63.41949 66.12683 68.72759
arima.preds$pred - lowband.garch
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 24.36179 24.87108 25.38953 25.91738 26.45490 27.00233 27.55994 28.12798
## Sep Oct Nov Dec
## 1961 28.70670 29.29638 29.89728 30.50965
upband.arima - arima.preds$pred
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 29.41952 34.87453 39.58482 43.79135 47.62780 51.17746 54.49640 57.62449
## Sep Oct Nov Dec
## 1961 60.59131 63.41949 66.12683 68.72759
upband.garch - arima.preds$pred
## Jan Feb Mar Apr May Jun Jul Aug
## 1961 24.36179 24.87108 25.38953 25.91738 26.45490 27.00233 27.55994 28.12798
## Sep Oct Nov Dec
## 1961 28.70670 29.29638 29.89728 30.50965
CONCLUSIONES: Podemos observar entre los modelos que con un intervalo del 99%, el nivel de significancia desciende por lo que los modelos se contraen ya que un intervalo de confianza del 99% es más amplio que uno del 95%, lo que significa que hay una mayor probabilidad de que el valor real caiga dentro del intervalo, aunque esto también implica que la precisión de la predicción se reduce, ya que abarca un rango más amplio de valores posibles; esto es porque el intervalo de confianza (IC) nos da un rango de valores dentro del cual esperamos que se encuentre el valor real de un parámetro desconocido, con un cierto nivel de confianza; una IC mayor significa que hay más incertidumbre sobre el valor real del parámetro, un IC mayor nos indica que hay menos certeza sobre el valor real del parámetro. Esto significa que la capacidad de predicción del modelo es menor.