Punto A
# Graficar la serie
ts_plot(AirPassengers, slider = T,
title = "demanda de pasajeros aereos mensual \n 1949-1960",
Ytitle = "pasajeros",
Xtitle = "años")
#descomponer la serie
ts_decompose(AirPassengers, type = "both")
La serie de demanda de pasajeros aéreos entre 1949 y 1960 muestra una clara tendencia creciente en el número de viajeros, lo que refleja la expansión de la aviación en esos años. Además, se observa un patrón estacional muy claro mostrando que los picos más altos se presentan en julio y agosto, cuando aumenta la demanda por vacaciones de verano, y también en diciembre asociado a las festividades de fin de año. Por el contrario, los valores más bajos suelen darse en enero y febrero, meses de menor actividad en viajes. Otro aspecto importante es que las variaciones estacionales se hacen cada vez más grandes a medida que aumenta la cantidad total de pasajeros, lo que significa que la amplitud de los ciclos crece con el tiempo.
Un análisis de ACI (Asociación de Transporte Aéreo) indica que la demanda de transporte aéreo tiende a alcanzar su punto máximo año tras año en los meses de julio y agosto, lo cual coincide con un incremento estacional vinculado a las vacaciones de verano.
Al descomponer la serie, tanto en forma aditiva como multiplicativa, se confirma la fuerte presencia de tendencia y estacionalidad, sin embargo, la descomposición multiplicativa se ajusta mejor porque refleja que los picos y caídas no son siempre del mismo tamaño, sino que aumentan proporcionalmente al nivel de la serie.
Punto B
#desestacionalizar la serie
demanda_descom <- decompose(AirPassengers, type = "additive")
AirPassengers_des <- AirPassengers - demanda_descom$seasonal
fechas <- seq(from = as.Date("1949-01-01"),
to = as.Date("1960-12-01"),
by = "month")
demanda <- data.frame("demanda_ob" = as.numeric(AirPassengers)) %>%
mutate(demanda_des = as.numeric(AirPassengers_des),
fecha = fechas)
ts_plot(demanda, slider = T,
title = "demanda de pasajeros aereos mensual \n normal y desestacionalizada 1949-1960",
Ytitle = "pasajeros",
Xtitle = "años")
La serie original mantiene los picos de demanda en julio, agosto y diciembre, y los valles en enero y febrero, reflejando los ciclos estacionales de vacaciones y festividades.
En cambio, la serie desestacionalizada elimina estos patrones repetitivos, mostrando una curva más suave que resalta la tendencia creciente de largo plazo y las variaciones irregulares, reduciendo asi el efecto calendario de las estacionalidades. Gracias a este ajuste, es más fácil ver cómo la aviación internacional experimentó un crecimiento sostenido en esos años, independiente de los ciclos anuales.
Punto C
#probar si la serie es estacionaria
#tes de Dickey Fuller
df <- ur.df(AirPassengers, type = "trend", lags = 1)
summary(df)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -64.98 -20.02 0.50 18.51 85.51
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 36.56047 6.53666 5.593 1.15e-07 ***
## z.lag.1 -0.41315 0.05399 -7.652 3.08e-12 ***
## tt 1.11017 0.15534 7.147 4.69e-11 ***
## z.diff.lag 0.52003 0.07380 7.046 7.99e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 27.33 on 138 degrees of freedom
## Multiple R-squared: 0.363, Adjusted R-squared: 0.3491
## F-statistic: 26.21 on 3 and 138 DF, p-value: 1.767e-13
##
##
## Value of test-statistic is: -7.6523 19.6836 29.279
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2 6.22 4.75 4.07
## phi3 8.43 6.49 5.47
#tes de correlogramas
par(mfcol = c(1, 2))
acf(AirPassengers, )
pacf(AirPassengers)
#prueba de dw
dwtest(df@testreg)
##
## Durbin-Watson test
##
## data: df@testreg
## DW = 2.0808, p-value = 0.6172
## alternative hypothesis: true autocorrelation is greater than 0
Tras una revision anterior de forma priori en el punto A, se determino que la serie no es estacionaria. Al aplicar la prueba de Dickey–Fuller aumentada a la serie, el estadístico obtenido (–7.65) es menor que los valores críticos, por lo que se rechaza la hipótesis nula de raíz unitaria y se concluye que la serie sería estacionaria. Sin embargo, los correlogramas muestran una clara persistencia temporal y fuerte estacionalidad. El ACF va disminuyendo lentamente pero no es cercano a cero. Por su parte, la prueba de Durbin–Watson arrojó un valor de 2.08, cercano a 2, lo que sugiere que no existe autocorrelación de primer orden en los residuos del modelo. Por lo tanto, los resultados señalan que, aunque el ACF muestre que la serie no es estacionaria, las demas pruebas demuestran lo contrario, por lo que la conclusion es que la serie es estacionaria segun prueba DF Y DW
Punto D
# Estimar un modelo ARIMA (1, 0, 0)
arima_ar1 <- arima(AirPassengers, c(1, 0, 0))
stargazer(arima_ar1, type = "html")
| Dependent variable: | |
| AirPassengers | |
| ar1 | 0.965*** |
| (0.021) | |
| intercept | 278.465*** |
| (67.114) | |
| Observations | 144 |
| Log Likelihood | -711.090 |
| sigma2 | 1,118.620 |
| Akaike Inf. Crit. | 1,428.179 |
| Note: | p<0.1; p<0.05; p<0.01 |
El modelo ARIMA (1,0,0) resulta ser el más eficiente ya que logra capturar la dinámica de la serie de tiempo sin necesidad de aplicar diferenciación, dado que la serie se comporta de manera estacionaria en niveles. Los correlogramas mostraron un patrón característico de un proceso autorregresivo de primer orden, lo cual justificó la inclusión de un término AR(1) (p=1). No fue necesario considerar un componente de diferenciación (d=0), ni un componente de media móvil (q=0), ya que la PACF mostró un rezago significativo en el primer orden, mientras que la ACF no evidenció patrones que sugirieran la presencia de un proceso MA.
Punto E
# Parametros
demanda <- demanda %>% mutate(resid = arima_ar1$residuals,
demanda_est = as.numeric(demanda_ob-resid)) %>%
select(demanda_ob, demanda_est, fecha)
ts_plot(demanda, slider = T,
title = "demanda de pasajeros aereos mensual \n normal y ajustada 1949-1960",
Ytitle = "pasajeros",
Xtitle = "años")
#graficar los errores
ts_plot(arima_ar1$residuals, slider = T,
title = "residuos",
Ytitle = "",
Xtitle = "años")
par(mfcol = c(1, 2))
hist(arima_ar1$residuals)
qqnorm(arima_ar1$residuals)
qqline(arima_ar1$residuals, col = "red")
#Prueba jarque bera
jarque.bera.test(arima_ar1$residuals)
##
## Jarque Bera Test
##
## data: arima_ar1$residuals
## X-squared = 0.81312, df = 2, p-value = 0.6659
#Version Automatica
arima_auto <- auto.arima(AirPassengers, trace = T)
##
## ARIMA(2,1,2)(1,1,1)[12] : Inf
## ARIMA(0,1,0)(0,1,0)[12] : 1031.539
## ARIMA(1,1,0)(1,1,0)[12] : 1020.582
## ARIMA(0,1,1)(0,1,1)[12] : 1021.192
## ARIMA(1,1,0)(0,1,0)[12] : 1020.488
## ARIMA(1,1,0)(0,1,1)[12] : 1021.103
## ARIMA(1,1,0)(1,1,1)[12] : Inf
## ARIMA(2,1,0)(0,1,0)[12] : 1022.583
## ARIMA(1,1,1)(0,1,0)[12] : 1022.583
## ARIMA(0,1,1)(0,1,0)[12] : 1020.733
## ARIMA(2,1,1)(0,1,0)[12] : 1018.165
## ARIMA(2,1,1)(1,1,0)[12] : 1018.395
## ARIMA(2,1,1)(0,1,1)[12] : 1018.84
## ARIMA(2,1,1)(1,1,1)[12] : Inf
## ARIMA(3,1,1)(0,1,0)[12] : 1019.565
## ARIMA(2,1,2)(0,1,0)[12] : 1019.771
## ARIMA(1,1,2)(0,1,0)[12] : 1024.478
## ARIMA(3,1,0)(0,1,0)[12] : 1023.984
## ARIMA(3,1,2)(0,1,0)[12] : Inf
##
## Best model: ARIMA(2,1,1)(0,1,0)[12]
demanda <- demanda %>% mutate(resid = arima_auto$residuals,
demanda_est = as.numeric(demanda_ob-resid)) %>%
select(demanda_ob, demanda_est, fecha)
ts_plot(demanda, slider = T,
title = "demanda de pasajeros aereos mensual \n normal y ajustada 1949-1960",
Ytitle = "pasajeros",
Xtitle = "años")
par(mfcol = c(1, 2))
hist(arima_auto$residuals)
qqnorm(arima_auto$residuals)
qqline(arima_auto$residuals, col = "red")
jarque.bera.test(arima_auto$residuals)
##
## Jarque Bera Test
##
## data: arima_auto$residuals
## X-squared = 15.131, df = 2, p-value = 0.0005181
furval <- forecast(arima_ar1, h = 5, level = c(0.95))
print(furval)
## Point Forecast Lo 95 Hi 95
## Jan 1961 426.5698 361.0173 492.1223
## Feb 1961 421.3316 330.2510 512.4122
## Mar 1961 416.2787 306.6594 525.8979
## Apr 1961 411.4045 286.9917 535.8173
## May 1961 406.7027 269.9542 543.4512
par(mfcol = c(1, 1))
plot(furval)
Modelo ARIMA (1, 0, 0): Estudiando la normalidad de los errores en este modelo obtuvimos en el test de Jarque-Bera un resultado (0.81312) lo que indica que los errores siguen una distribucion normal, pues este valor es cercano a cero. Ademas, su p-value (0.6659) es superior a 0.05, lo que indica que no se rechaza la hipotesis nula de normalidad de los residuos. El grafico de distribucion de los residuos muestra que los residuos tienen media cero y que la mayoria de los valores se concentran al rededor del cero.
El histigrama no sigue perfectamente la curva de campana de Gauss, tiene una forma un poco apuntada a la izquierda y la distrubucion es centrad alrededor de cero. El grafico Q-Q Plot muestra que los puntos siguen bastante bie la linea aunque con desviaciones en las colas.
AUTO-ARIMA (2, 1, 1)(0, 1, 0)[12]: Al aplicar el AUTO_ARIMA, se observa que la serie ajustada logra seguir de manera más cercana la serie original, capturando tanto la tendencia como la estacionalidad de periodo 12. En el test de Jarque-Bera, los resultados del X-squared (15.131) y su p-value (0.0005181), menor a 0,05, indican que los residuos no siguen una distribución normal. En el histograma, la mayoría de los residuos se concentran alrededor de cero, lo que muestra un ajuste razonable, sin embargo, se detectan algunos valores extremos que señalan la presencia de residuos atípicos. Por su parte, el Q-Q Plot refleja que, aunque los residuos en la zona central se alinean con la linea de referencia, en los extremos se presentan desviaciones, lo cual confirma que los errores no se distribuyen de manera normal.
Pronostico del modelo ARIMA (1, 0, 0): Al aplicar el modelo ARIMA(1,0,0), indica que el pronóstico para el periodo enero a mayo de 1961 presenta valores decrecientes frente a los últimos datos observados. En enero de 1961 el pronóstico es de 426,56 pasajeros, y para mayo desciende a 406,70 pasajeros. En el gráfico se aprecia que el modelo logra capturar la tendencia general de crecimiento que venía mostrando la serie histórica, sin embargo, el ajuste no reproduce de manera clara la estacionalidad característica de los datos. Esto genera que las predicciones proyectadas sean más suavizadas respecto al comportamiento real de la serie.
El modelo sugiere que, tras el fuerte incremento de la demanda de pasajeros del año anterior, para inicios de 1961 se proyecta una ligera disminución en el número de pasajeros transportados. Esto se podria deber a lo ya mencionado que es que la demanda de pasajeros disminuye a inicios de cada año, donde los valores mas bajos suelen darse en eso meses de menor actividad en viajes