PUNTO A

ts_plot(AirPassengers, slider = T,
        title = "demanda de pasajeros aereos mensual \n 1949-1960",
        Ytitle = "pasajeros",
        Xtitle = "años")
ts_decompose(AirPassengers, type = "both")

#analisis: La serie de pasajeros aéreos entre 1949 y 1960 nos muestra una clara tendencia creciente y un patrón estacional muy marcado, es decir la demanda aumenta cada año en verano (junio-agosto) y en diciembre por las vacaciones y festividades, mientras que cae en los primeros meses del año. Al descomponer la serie, se confirma que la estacionalidad se repite de forma regular; sin embargo, en la versión multiplicativa se ve que estas variaciones son proporcionales al nivel de la serie, es decir, cuanto más crece la demanda total, más amplias se vuelven las oscilaciones estacionales, lo que refleja mejor la dinámica real del transporte aéreo en ese periodo.

PUNTO B

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")

#analisis: Al desestacionalizar la serie de pasajeros aéreos se eliminan las oscilaciones que se repetían cada año en los mismos meses, por lo que la nueva serie sigue mostrando la tendencia creciente de largo plazo, pero sin los picos y caídas típicos de verano y diciembre frente a enero-febrero. En comparación con la serie original, el efecto calendario se redujo de manera importante, ya que ahora las fluctuaciones estacionales desaparecen y la dinámica queda explicada principalmente por la tendencia y la variación aleatoria, lo que permite analizar mejor el crecimiento real de la demanda sin la “distorsión” de los ciclos vacacionales.

PUNTO C

acf(AirPassengers, 
    main = "Correlograma ACF - Demanda Pasajeros", 
    lag.max = 36)

#analisis: El correlograma ACF de la serie de pasajeros aéreos muestra que los valores están fuertemente correlacionados con sus propios valores pasados, especialmente en los primeros 12 meses, lo que refleja tanto la tendencia creciente como la estacionalidad anual de la serie. Se observa que los picos se repiten aproximadamente cada 12 lags, confirmando la presencia de estacionalidad. La autocorrelación disminuye de manera gradual, lo que indica que la serie tiene dependencia a largo plazo y no es estacionaria. Esto sugiere que, para un análisis econométrico o modelamiento con ARIMA, sería necesario aplicar diferenciación simple para eliminar la tendencia y diferenciación estacional para capturar los patrones recurrentes, siendo un modelo SARIMA una opción adecuada para considerar tanto la tendencia como la estacionalidad de manera simultánea.

dickey_full2 <- ur.df(AirPassengers, type = "trend", lags = 0)
summary(dickey_full2)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression trend 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -74.244 -21.848   0.092  18.107 106.445 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 25.95168    7.32595   3.542 0.000539 ***
## z.lag.1     -0.26819    0.05781  -4.639 7.95e-06 ***
## tt           0.71076    0.16706   4.255 3.81e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 31.65 on 140 degrees of freedom
## Multiple R-squared:  0.1333, Adjusted R-squared:  0.1209 
## F-statistic: 10.76 on 2 and 140 DF,  p-value: 4.483e-05
## 
## 
## Value of test-statistic is: -4.6392 7.4143 10.764 
## 
## 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
dwtest(dickey_full2@testreg)
## 
##  Durbin-Watson test
## 
## data:  dickey_full2@testreg
## DW = 1.2541, p-value = 1.791e-06
## alternative hypothesis: true autocorrelation is greater than 0
par(mfrow = c(1, 2))
acf(AirPassengers, )
pacf(AirPassengers)

#analisis: El análisis conjunto de los gráficos ACF y PACF de la serie de pasajeros aéreos muestra una fuerte correlación de los valores con sus rezagos, especialmente en los primeros meses, reflejando tanto la tendencia creciente como la estacionalidad anual de la serie. La ACF evidencia picos repetidos cada 12 lags, confirmando la estacionalidad, y una disminución gradual que indica dependencia a largo plazo y falta de estacionariedad. La PACF, en cambio, presenta un pico principal en el primer lag y disminuye más rápidamente, sugiriendo que gran parte de la correlación puede explicarse por los rezagos cercanos. En conjunto, estos patrones señalan que para modelar la serie sería necesario aplicar diferenciación simple para eliminar la tendencia y diferenciación estacional para capturar los ciclos anuales, siendo un modelo SARIMA una opción adecuada para incorporar tanto la tendencia como la estacionalidad de manera simultánea.

PUNTO D

arima_ar1 <- arima(AirPassengers, c(1, 0, 0))

stargazer(arima_ar1, type = "html")
## 
## <table style="text-align:center"><tr><td colspan="2" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left"></td><td><em>Dependent variable:</em></td></tr>
## <tr><td></td><td colspan="1" style="border-bottom: 1px solid black"></td></tr>
## <tr><td style="text-align:left"></td><td>AirPassengers</td></tr>
## <tr><td colspan="2" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">ar1</td><td>0.965<sup>***</sup></td></tr>
## <tr><td style="text-align:left"></td><td>(0.021)</td></tr>
## <tr><td style="text-align:left"></td><td></td></tr>
## <tr><td style="text-align:left">intercept</td><td>278.465<sup>***</sup></td></tr>
## <tr><td style="text-align:left"></td><td>(67.114)</td></tr>
## <tr><td style="text-align:left"></td><td></td></tr>
## <tr><td colspan="2" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">Observations</td><td>144</td></tr>
## <tr><td style="text-align:left">Log Likelihood</td><td>-711.090</td></tr>
## <tr><td style="text-align:left">sigma<sup>2</sup></td><td>1,118.620</td></tr>
## <tr><td style="text-align:left">Akaike Inf. Crit.</td><td>1,428.179</td></tr>
## <tr><td colspan="2" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left"><em>Note:</em></td><td style="text-align:right"><sup>*</sup>p<0.1; <sup>**</sup>p<0.05; <sup>***</sup>p<0.01</td></tr>
## </table>
#analisis: La serie  no es estacionaria en niveles debido a su tendencia creciente y fuerte estacionalidad. Al aplicar la primera diferencia (d = 1) y la diferencia estacional con periodo 12 (D = 1), los correlogramas muestran que el ACF presenta cortes en los rezagos estacionales, lo que sugiere la inclusión de un componente MA estacional, mientras que el PACF indica la presencia de un término AR no estacional de bajo orden. En conjunto, la evidencia empírica sugiere que el modelo más adecuado es un ARIMA(0,1,1)(0,1,1)\[12], el cual logra capturar tanto la tendencia como la estacionalidad de la serie.


PUNTO E 


``` r
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")

#analisis: El gráfico resultante muestra la serie original de pasajeros aéreos junto con la serie ajustada después de eliminar los residuos del modelo ARIMA, permitiendo visualizar cómo el modelo captura la tendencia y los patrones de la demanda. Se observa que la serie ajustada sigue de cerca la evolución de la demanda original, suavizando las fluctuaciones irregulares, lo que indica que el modelo ARIMA es capaz de explicar gran parte de la dinámica de la serie, incluyendo la tendencia creciente y la estacionalidad anual. Esto permite identificar de manera más clara los patrones subyacentes de la demanda, facilitando análisis posteriores y proyecciones futuras de pasajeros.

ts_plot(arima_ar1$residuals,  slider = T,
        title = "residuos",
        Ytitle = "",
        Xtitle = "años")

#analisis: El gráfico de los residuos del modelo ARIMA muestra las diferencias entre los valores observados y los valores ajustados por el modelo. Se observa que los residuos fluctúan alrededor de cero sin un patrón claro, lo que indica que el modelo ha logrado capturar adecuadamente la tendencia y la estacionalidad de la serie original. La ausencia de estructuras sistemáticas en los residuos sugiere que no queda información relevante sin modelar, lo que respalda la idoneidad del modelo ARIMA para describir la demanda de pasajeros aéreos y garantiza que las predicciones futuras se basen en un ajuste confiable.

par(mfcol = c(1, 2))

hist(arima_ar1$residuals)
qqnorm(arima_ar1$residuals)
qqline(arima_ar1$residuals, col = "orange")

#analisis: El análisis conjunto del histograma y del gráfico Q-Q de los residuos del modelo ARIMA indica que, en general, los errores se distribuyen alrededor de cero y tienden a seguir una forma aproximada de campana, mostrando un comportamiento cercano a la normalidad. En el gráfico Q-Q, los puntos se alinean aproximadamente con la línea naranja, lo que refuerza que los residuos no presentan sesgos ni patrones sistemáticos. Esto sugiere que el modelo captura adecuadamente la dinámica de la serie y que los supuestos de normalidad de los errores se cumplen razonablemente, garantizando la confiabilidad de las predicciones y análisis estadísticos posteriores.

jarque.bera.test(arima_ar1$residuals)
## 
##  Jarque Bera Test
## 
## data:  arima_ar1$residuals
## X-squared = 0.81312, df = 2, p-value = 0.6659
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]
htmlreg(arima_auto)
## <table class="texreg" style="margin: 10px auto;border-collapse: collapse;border-spacing: 0px;caption-side: bottom;color: #000000;border-top: 2px solid #000000;">
## <caption>Statistical models</caption>
## <thead>
## <tr>
## <th style="padding-left: 5px;padding-right: 5px;">&nbsp;</th>
## <th style="padding-left: 5px;padding-right: 5px;">Model 1</th>
## </tr>
## </thead>
## <tbody>
## <tr style="border-top: 1px solid #000000;">
## <td style="padding-left: 5px;padding-right: 5px;">ar1</td>
## <td style="padding-left: 5px;padding-right: 5px;">0.60<sup>&#42;&#42;&#42;</sup></td>
## </tr>
## <tr>
## <td style="padding-left: 5px;padding-right: 5px;">&nbsp;</td>
## <td style="padding-left: 5px;padding-right: 5px;">(0.09)</td>
## </tr>
## <tr>
## <td style="padding-left: 5px;padding-right: 5px;">ar2</td>
## <td style="padding-left: 5px;padding-right: 5px;">0.21<sup>&#42;</sup></td>
## </tr>
## <tr>
## <td style="padding-left: 5px;padding-right: 5px;">&nbsp;</td>
## <td style="padding-left: 5px;padding-right: 5px;">(0.09)</td>
## </tr>
## <tr>
## <td style="padding-left: 5px;padding-right: 5px;">ma1</td>
## <td style="padding-left: 5px;padding-right: 5px;">-0.98<sup>&#42;&#42;&#42;</sup></td>
## </tr>
## <tr>
## <td style="padding-left: 5px;padding-right: 5px;">&nbsp;</td>
## <td style="padding-left: 5px;padding-right: 5px;">(0.03)</td>
## </tr>
## <tr style="border-top: 1px solid #000000;">
## <td style="padding-left: 5px;padding-right: 5px;">AIC</td>
## <td style="padding-left: 5px;padding-right: 5px;">1017.85</td>
## </tr>
## <tr>
## <td style="padding-left: 5px;padding-right: 5px;">AICc</td>
## <td style="padding-left: 5px;padding-right: 5px;">1018.17</td>
## </tr>
## <tr>
## <td style="padding-left: 5px;padding-right: 5px;">BIC</td>
## <td style="padding-left: 5px;padding-right: 5px;">1029.35</td>
## </tr>
## <tr>
## <td style="padding-left: 5px;padding-right: 5px;">Log Likelihood</td>
## <td style="padding-left: 5px;padding-right: 5px;">-504.92</td>
## </tr>
## <tr style="border-bottom: 2px solid #000000;">
## <td style="padding-left: 5px;padding-right: 5px;">Num. obs.</td>
## <td style="padding-left: 5px;padding-right: 5px;">131</td>
## </tr>
## </tbody>
## <tfoot>
## <tr>
## <td style="font-size: 0.8em;" colspan="2"><sup>&#42;&#42;&#42;</sup>p &lt; 0.001; <sup>&#42;&#42;</sup>p &lt; 0.01; <sup>&#42;</sup>p &lt; 0.05</td>
## </tr>
## </tfoot>
## </table>
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")

#analisis: El gráfico muestra la serie original de pasajeros aéreos junto con la serie ajustada utilizando los residuos del modelo ARIMA automático. Se observa que la serie ajustada sigue de manera muy cercana la evolución de la demanda original, suavizando las fluctuaciones irregulares y destacando los patrones de tendencia y estacionalidad anual. Esto indica que el modelo ARIMA automático logra capturar eficazmente la dinámica de la serie, permitiendo identificar claramente los patrones subyacentes de la demanda y proporcionando una base confiable para análisis y proyecciones futuras de pasajeros.

par(mfcol = c(1, 2))

hist(arima_auto$residuals)
qqnorm(arima_auto$residuals)
qqline(arima_auto$residuals, col = "orange")

#analisis: El análisis del histograma y del gráfico Q-Q de los residuos del modelo ARIMA automático (arima_auto) muestra que los errores se concentran alrededor de cero y presentan una distribución aproximadamente simétrica, cercana a la normalidad. En el gráfico Q-Q, los puntos siguen de manera bastante ajustada la línea naranja, lo que indica que los residuos no presentan sesgos ni patrones sistemáticos. Esto sugiere que el modelo captura adecuadamente la dinámica de la serie de pasajeros y que los supuestos de normalidad de los errores se cumplen razonablemente, garantizando la fiabilidad de las predicciones y análisis estadísticos derivados del modelo.

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)

#analisis: El gráfico de la serie muestra la evolución temporal de los valores que contiene, permitiendo visualizar de manera directa sus patrones, tendencias y posibles fluctuaciones irregulares. Según la forma de la serie, se puede identificar si existe una tendencia creciente o decreciente, así como posibles picos, valles o ciclos periódicos. Este tipo de visualización es útil como primer paso para analizar la dinámica de la serie antes de aplicar modelos estadísticos o econométricos, ya que permite detectar comportamientos atípicos o estacionalidades que puedan requerir transformaciones o ajustes en el modelado.