Analisis : Con respecto a la demanda de pasajeros aĆ©reos en Estados Unidos (1949ā1960) se puede observar una con claridad una tendencia que incrementa a lo largo de los aƱos, es decir, que el nĆŗmero promedio de pasajeros crece a lo largo del periodo. AdemĆ”s, la serie muestra un patrón estacional repetitivo, en donde, los picos de la grafica se concentran en los meses de junio, julio y agosto, en los cuales la demanda es mayor por debido a las temporadas de verano, tambiĆ©n se evidencia que el los meses de diciembre esta tendencia se reduce, infiriendo que la demanda es menor.
De acuerdo con la grÔfica la tendencia de la serie se ve reflejado desde los años 50 donde los avances tecnológicos dieron impulso a la aeronÔutica y la creación de aviones.
Con respecto al codigo de descomposición de la serie, se muestra que esta posee estacionalidad, donde se presenta una tendencia positiva a lo largo de los años. Esto afirma que la demanda de pasajeros presenta mayor actividad en los meses de verano con respecto a los meses de invierno, marcando un efecto calendario
# graficar la serie
ts_plot(AirPassengers, slider = TRUE,
title = "Demanda promedio mensual de pasajeros en Estados Unidos de 1949-1960",
Ytitle = "pasajeros",
Xtitle = "aƱos" )
# descomponer
ts_decompose(AirPassengers, type = "both")
Analisis: Cuando se desestacionaliza la serie, se evidencia una tendencia de crecimiento de la demanda de pasajeros mÔs estable en comparación con la original, la cual no depende del número de pasajeros durante los meses sino factores generales como los costos, el crecimiento económico y los avances del medio aéreo
demanda_descom <- decompose(AirPassengers, type = "additive")
demanda_des <- AirPassengers - demanda_descom$seasonal
demanda <- data.frame("demanda_ob" = as.numeric(AirPassengers)) %>%
mutate(demanda_des = as.numeric(demanda_des),
fecha = demanda_air$fecha)
ts_plot(demanda, slider = TRUE,
title = "Demanda de pasajeros grafico normal y desetacionalizada",
Ytitle = "pasajeros",
Xtitle = "aƱos")
Analisis: Cuando analizamos la serie de pasajeros apriori, lo primero que se nota es que no es estacionaria, porque presenta una tendencia positiva, en la cual con el paso de los aƱos la demanda de pasajeros aumenta generando picos mƔs altos. Lo que significa que que los valores de la serie no se mantienen estables en el tiempo.
Al revisar el test de correlogramas, se observa que la serie muestra un comportamiento autorregresivo (AR), especĆficamente un AR(2), lo que significa que los valores pasados influyen bastante en los futuros, tambiĆ©n muestra que la correlación disminuye lentamente.
Luego, al aplicar la prueba de Dickey-Fuller Aumentada, el resultado arrojó un p-value mayor a 0.05, lo cual indica que no podemos rechazar la hipótesis nula, esto confirma que la serie no es estacionaria.
Por esta razón, para trabajar con el modelo es necesario transformar la serie y volverla estacionaria, para ellos se realizarĆ” una transformacion logarĆtimica, el cual busca reducir la variabiliad de los datos. como se muestra en la serie original los picos on muchos mas altos, una vez realizada la transformación se evidenica que las oscilaciones cambian a lo largo de los aƱos.
Analisis: Para identifica el modelo se evidencia que los correlogramas sugieren un ARIMA (2,1,1), esto se identifica a travƩs de el PACF donde posee dos resagos, ademas se muestra una diferencia junto con una media movil.Luego, se utiliza auto.arima para ver a sugerencia que el software me da para identificar el mejor modelo, en ese caso ARIMA(2,1,1)(0,1,0)[12]
# Estacionariedad (a priori, correlograma, Dickey-Fuller)
# test de Dickey Fuller
df <- ur.df(AirPassengers, type = "trend", lags = 1)
summary(df)
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
dwtest(df@testreg)
Durbin-Watson test
data: df@testreg DW = 2.0808, p-value = 0.6172 alternative hypothesis: true autocorrelation is greater than 0
# test de correlogramas ACF Y PACF
par(mfcol = c(1,2))
acf(AirPassengers,)
pacf(AirPassengers)
# Transformación logarĆtmica para pasar la serie a estacionaria
AirPassengers_log <- log(AirPassengers)
ts_plot(AirPassengers_log,
title = "Serie AirPassengers en Logaritmo",
Ytitle = "log(pasajeros)",
Xtitle = "AƱos")
model_ar <- auto.arima(AirPassengers)
summary(model_ar)
Series: AirPassengers ARIMA(2,1,1)(0,1,0)[12]
Coefficients: ar1 ar2 ma1 0.5960 0.2143 -0.9819 s.e. 0.0888 0.0880 0.0292
sigma^2 = 132.3: log likelihood = -504.92 AIC=1017.85 AICc=1018.17 BIC=1029.35
Training set error measures: ME RMSE MAE MPE MAPE MASE ACF1 Training set 1.3423 10.84619 7.86754 0.420698 2.800458 0.245628 -0.00124847
checkresiduals(model_ar)
Ljung-Box test
data: Residuals from ARIMA(2,1,1)(0,1,0)[12] Q* = 37.784, df = 21, p-value = 0.01366
Model df: 3. Total lags used: 24
# Estimación del Modelo ARIMA
arima_ar2 <- arima(AirPassengers, c(2, 1, 1))
stargazer(arima_ar2, type = "html")
| Dependent variable: | |
| AirPassengers | |
| ar1 | 1.091*** |
| (0.078) | |
| ar2 | -0.489*** |
| (0.074) | |
| ma1 | -0.844*** |
| (0.043) | |
| Observations | 143 |
| Log Likelihood | -685.169 |
| sigma2 | 844.608 |
| Akaike Inf. Crit. | 1,378.338 |
| Note: | p<0.1; p<0.05; p<0.01 |
demanda <- demanda %>% mutate(resid = arima_ar2$residuals, demanda_est = as.numeric(demanda_ob-resid)) %>% select(demanda_ob, demanda_est, fecha)
ts_plot(demanda, slider = TRUE,
title = "Demanda de pasajeros grafico normal y estimada",
Ytitle = "pasajeros",
Xtitle = "aƱos")
# Mostrar errores, mediante el histograma y jaeque bera
ts_plot(arima_ar2$residuals, slider = TRUE,
title = "Residuos",
Ytitle = "",
Xtitle = "aƱos")
par(mfcol = c(1,2))
hist(arima_ar2$residuals)
qqnorm(arima_ar2$residuals)
qqline(arima_ar2$residuals, col = "blue")
library(tseries)
jarque.bera.test(arima_ar2$residuals)
Jarque Bera Test
data: arima_ar2$residuals X-squared = 2.2565, df = 2, p-value = 0.3236
# Utilización del auto.arima
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)
| Ā | Model 1 |
|---|---|
| ar1 | 0.60*** |
| Ā | (0.09) |
| ar2 | 0.21* |
| Ā | (0.09) |
| ma1 | -0.98*** |
| Ā | (0.03) |
| AIC | 1017.85 |
| AICc | 1018.17 |
| BIC | 1029.35 |
| Log Likelihood | -504.92 |
| Num. obs. | 131 |
| ***p < 0.001; **p < 0.01; *p < 0.05 | |
Analisis: Una vez ajustado el modelo anterior, se muestra un pronostico de 5 meses, donde se presenta una tendencia creciente, dondela demnada de pasajeros en Estados Unidos muestra picos importantes, gracias al consumo en temporadas especificas
demanda <- demanda %>% mutate(resid = arima_auto$residuals, demanda_est = as.numeric(demanda_ob-resid)) %>% select(demanda_ob, demanda_est, fecha)
ts_plot(demanda, slider = TRUE,
title = "Demanda de pasajeros grafico normal y estimada",
Ytitle = "pasajeros",
Xtitle = "aƱos")
par(mfcol = c(1,2 ))
hist(arima_auto$residuals)
qqnorm(arima_auto$residuals)
qqline(arima_auto$residuals, col = "yellow")
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_auto, h = 6, level = c(0.95))
par(mfcol = c(1, 1 ))
plot(furval)
```