Datos utilizados son de https://si3.bcentral.cl/Siete/ES/Siete/Cuadro/CAP_ESTADIST_MACRO/MN_EST_MACRO_IV/PEM_VAR12_IPC/PEM_VAR12_IPC
carga librerya
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(tseries)
library(astsa)
##
## Attaching package: 'astsa'
## The following object is masked from 'package:forecast':
##
## gas
library(forecast)
datos <- read.csv("ipc_general_cleaned.csv")
datos$Fecha <- as.Date(datos$Fecha, "%Y-%m-%d")
ipc_ts <- ts(datos$IPC, start=c(2010, 1), frequency=12)
table(ipc_ts)
## ipc_ts
## -1.3 0.3 0.9 1 1.2 1.3 1.5 1.6 1.7 1.8 1.9 2 2.1 2.2 2.3 2.4
## 1 2 2 1 1 1 5 1 3 2 6 6 2 4 5 2
## 2.5 2.6 2.7 2.8 2.9 3 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4
## 5 6 10 7 5 5 5 3 3 4 3 1 2 2 3 3
## 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5 5.1 5.3 5.5 5.7 6 6.5
## 1 5 2 5 5 3 2 3 1 2 1 2 1 1 1 1
## 6.7 7.2 7.6 7.7 7.8 8.7 9.4 9.9 10.5 11.1 11.5 11.9 12.3 12.5 12.8 13.1
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1
## 13.3 13.7 14.1
## 1 1 1
# Graficar la serie original
plot(ipc_ts, type="l", ylab="IPC", xlab="Tiempo")
El pico hacia el final podría indicar un evento económico significativo, como una inflación repentina o un cambio en la política económica, que luego parece haber sido corregido o seguido por un ajuste igualmente rápido.
# Aplicar transformaciones si son necesarias (ejemplo: logaritmo y diferenciación)
ipc_log <- log(ipc_ts)
## Warning in log(ipc_ts): Se han producido NaNs
ipc_diff <- diff(ipc_log)
# Graficar las series transformadas
plot(ipc_log, type="l", ylab="Log(IPC)", xlab="Tiempo")
plot(ipc_diff, type="l", ylab="Dif(Log(IPC))", xlab="Tiempo")
El gráfico de la serie diferenciada muestra una variabilidad que parece constante en el tiempo, lo cual es una propiedad deseable en una serie estacionaria. No obstante, la presencia de picos podría indicar efectos estacionales o outliers que no fueron completamente eliminados por la diferenciación.
# ACF y PACF
Acf(ipc_diff)
Pacf(ipc_diff)
Basado en la ACF y PACF, un estadístico podría considerar un modelo ARIMA(1,1,0) o ARIMA(0,1,1), dependiendo de si los picos en la PACF o ACF son significativos y si reflejan la estructura autoregresiva o de media móvil de la serie de tiempo.
# Modelos ARIMA
modelo1 <- auto.arima(ipc_ts)
modelo2 <- Arima(ipc_ts, order=c(1,1,1))
modelo3 <- Arima(ipc_ts, order=c(0,1,2))
# Comparar AIC y BIC
summary(modelo1)
## Series: ipc_ts
## ARIMA(2,1,2)(2,0,1)[12] with drift
##
## Coefficients:
## ar1 ar2 ma1 ma2 sar1 sar2 sma1 drift
## 0.3526 0.4860 -0.0243 -0.4466 0.0279 0.0145 -0.7437 0.0461
## s.e. 0.2220 0.1893 0.2088 0.1253 0.1891 0.1519 0.1802 0.0306
##
## sigma^2 = 0.1394: log likelihood = -72.4
## AIC=162.79 AICc=163.95 BIC=190.8
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.003185369 0.3631637 0.2812446 0.6508048 11.99504 0.1400801
## ACF1
## Training set -0.07703188
#El AIC es 162.79, el AIC corregido es 163.95, y el BIC es 190.8. Estos valores son relativamente bajos
summary(modelo2)
## Series: ipc_ts
## ARIMA(1,1,1)
##
## Coefficients:
## ar1 ma1
## 0.8357 -0.5348
## s.e. 0.0817 0.1223
##
## sigma^2 = 0.1972: log likelihood = -99.96
## AIC=205.92 AICc=206.07 BIC=215.26
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.006886587 0.4400665 0.3408482 1.373744 14.82745 0.1697669
## ACF1
## Training set 0.004751468
#El AIC es 205.92, el AIC corregido es 206.07, y el BIC es 215.26. Estos valores son más altos que los del modelo 1
summary(modelo3)
## Series: ipc_ts
## ARIMA(0,1,2)
##
## Coefficients:
## ma1 ma2
## 0.4013 0.0532
## s.e. 0.0992 0.1006
##
## sigma^2 = 0.2128: log likelihood = -106.19
## AIC=218.38 AICc=218.53 BIC=227.72
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.02439307 0.4571571 0.3562235 2.170125 15.22467 0.1774249
## ACF1
## Training set -0.01121683
#El AIC es 218.38, el AIC corregido es 218.53, y el BIC es 227.72. Estos son los valores más altos de los tres modelos
El Modelo 1 parece ser el mejor ajuste de los tres modelos basado en los criterios de información AIC y BIC. El AIC y el BIC son más bajos para el Modelo 1, lo que generalmente indica que el modelo tiene un mejor equilibrio entre complejidad y capacidad de ajuste a los datos. Además, los errores de entrenamiento (ME, RMSE, MAE, etc.) son más bajos en el Modelo 1, lo que sugiere que este modelo hace un mejor trabajo al capturar la dinámica de los datos.
# Análisis de residuos
checkresiduals(modelo1)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(2,1,2)(2,0,1)[12] with drift
## Q* = 27.633, df = 17, p-value = 0.04941
##
## Model df: 7. Total lags used: 24
class(modelo1)
## [1] "forecast_ARIMA" "ARIMA" "Arima"
prediccion_2_meses <- forecast(modelo1, h=2)
print(prediccion_2_meses)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Dec 2023 4.828995 4.350487 5.307504 4.097179 5.560812
## Jan 2024 4.925736 4.130149 5.721324 3.708991 6.142482
Para diciembre de 2023, el pronóstico puntual es aproximadamente 4.28, con un intervalo de confianza del 95% que va de aproximadamente 3.59 a 5.97.