Serie de tiempo seleccionada: Índice de Precios al Consumidor - IPC. índice y variación mensual, año corrido y anual del IPC sin alimentos (Enero de 2014 a Diciembre de 2023)
Periodo para entrenamiento del modelo (Train): 2014-2022
Periodo para prueba del modelo (test): 2023
Fuente: Departamento Nacional de Estadísticas - DANE
library(readxl)
library(forecast)
library(tseries)
library(ggplot2)
library(moments)
library(nortest)
datos <- read_excel("Taller2_Yesenia_Castro_Cely.xlsx", sheet = "train")
x <- datos
x <- ts(x, start = c(2014,1), end = c(2022,12), frequency=12)
x
## Jan Feb Mar Apr May Jun Jul
## 2014 80.89064 81.44025 81.69391 81.98985 82.16601 82.34921 82.40558
## 2015 83.47661 84.22351 84.51945 84.80834 85.21702 85.41432 85.68912
## 2016 88.10598 89.17700 89.76184 89.90981 90.38895 90.81172 91.05130
## 2017 92.73534 93.78523 94.36302 94.94786 95.22266 95.46223 95.41291
## 2018 97.01240 97.91432 98.18912 98.56257 98.88670 99.09808 99.14741
## 2019 100.46000 101.10000 101.44000 101.84000 102.10000 102.27000 102.41000
## 2020 103.82000 104.47000 104.75000 104.55000 104.14000 103.70000 103.86000
## 2021 104.74000 105.45000 105.86000 106.18000 106.34000 106.50000 106.83000
## 2022 109.43000 110.83000 111.47000 112.48000 113.25000 113.78000 114.61000
## Aug Sep Oct Nov Dec
## 2014 82.53241 82.63106 82.82835 82.96223 83.22999
## 2015 85.99915 86.41488 86.76015 87.15474 87.52818
## 2016 91.24154 91.53044 91.65727 91.78410 92.02368
## 2017 95.63134 95.84977 95.96956 96.18799 96.63191
## 2018 99.29538 99.40812 99.59837 99.74634 100.00000
## 2019 102.54000 102.73000 102.87000 103.09000 103.45000
## 2020 103.94000 104.34000 104.33000 104.13000 104.52000
## 2021 107.17000 107.50000 107.32000 107.64000 108.12000
## 2022 115.56000 116.45000 117.14000 117.84000 118.92000
class(x)
## [1] "ts"
plot(x,
main = "Serie de tiempo",
xlab = "Años",
ylab = "IPC sin alimentos",
type = "l",
col="blue")
summary(x)
## indice
## Min. : 80.89
## 1st Qu.: 89.87
## Median : 99.12
## Mean : 97.77
## 3rd Qu.:104.48
## Max. :118.92
print(x)
## Jan Feb Mar Apr May Jun Jul
## 2014 80.89064 81.44025 81.69391 81.98985 82.16601 82.34921 82.40558
## 2015 83.47661 84.22351 84.51945 84.80834 85.21702 85.41432 85.68912
## 2016 88.10598 89.17700 89.76184 89.90981 90.38895 90.81172 91.05130
## 2017 92.73534 93.78523 94.36302 94.94786 95.22266 95.46223 95.41291
## 2018 97.01240 97.91432 98.18912 98.56257 98.88670 99.09808 99.14741
## 2019 100.46000 101.10000 101.44000 101.84000 102.10000 102.27000 102.41000
## 2020 103.82000 104.47000 104.75000 104.55000 104.14000 103.70000 103.86000
## 2021 104.74000 105.45000 105.86000 106.18000 106.34000 106.50000 106.83000
## 2022 109.43000 110.83000 111.47000 112.48000 113.25000 113.78000 114.61000
## Aug Sep Oct Nov Dec
## 2014 82.53241 82.63106 82.82835 82.96223 83.22999
## 2015 85.99915 86.41488 86.76015 87.15474 87.52818
## 2016 91.24154 91.53044 91.65727 91.78410 92.02368
## 2017 95.63134 95.84977 95.96956 96.18799 96.63191
## 2018 99.29538 99.40812 99.59837 99.74634 100.00000
## 2019 102.54000 102.73000 102.87000 103.09000 103.45000
## 2020 103.94000 104.34000 104.33000 104.13000 104.52000
## 2021 107.17000 107.50000 107.32000 107.64000 108.12000
## 2022 115.56000 116.45000 117.14000 117.84000 118.92000
class(x)
## [1] "ts"
acf(x)
acf(ts(x, frequency=1))
pacf(x)
pacf(ts(x, frequency=1))
En la gráfica, se observa que los valores están dentro de los intervalos a partir del segundo rezago, se puede concluir que es un modelo AR.
ndiffs(x)
## [1] 1
Hay raíz unitaria, por lo tanto se puede concluir que la serie no es estacionaria
df1<-adf.test(x, k=0)
## Warning in adf.test(x, k = 0): p-value greater than printed p-value
df1
##
## Augmented Dickey-Fuller Test
##
## data: x
## Dickey-Fuller = 1.1623, Lag order = 0, p-value = 0.99
## alternative hypothesis: stationary
summary(df1)
## Length Class Mode
## statistic 1 -none- numeric
## parameter 1 -none- numeric
## alternative 1 -none- character
## p.value 1 -none- numeric
## method 1 -none- character
## data.name 1 -none- character
En la prueba Dickey-Fuller H0: no es estacionaria (raíz unitaria) p= > 0.05 y H1: es estacionaria p= <0.05. Teniendo el valor-p de 0.99 en la prueba se puede concluir que la serie no es estacionaria en sus datos originales
modelo1<-Arima(x, order=c(2,0,0), include.drift = TRUE)
summary(modelo1)
## Series: x
## ARIMA(2,0,0) with drift
##
## Coefficients:
## ar1 ar2 intercept drift
## 1.6150 -0.6376 79.6330 0.3433
## s.e. 0.0757 0.0767 1.5862 0.0258
##
## sigma^2 = 0.06092: log likelihood = -2.42
## AIC=14.85 AICc=15.44 BIC=28.26
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.004159765 0.2422036 0.1805778 -0.005557171 0.1817835 0.04506928
## ACF1
## Training set -0.02578281
tsdiag(modelo1)
Box.test(residuals(modelo1), type = "Ljung-Box")
##
## Box-Ljung test
##
## data: residuals(modelo1)
## X-squared = 0.073806, df = 1, p-value = 0.7859
modelo2<-arima(x, order=c(1,0,0))
summary(modelo2)
##
## Call:
## arima(x = x, order = c(1, 0, 0))
##
## Coefficients:
## ar1 intercept
## 0.9997 99.8676
## s.e. 0.0004 18.6143
##
## sigma^2 estimated as 0.2239: log likelihood = -76.12, aic = 158.25
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.3469711 0.4732296 0.3832574 0.3491848 0.3864819 1.000013
## ACF1
## Training set 0.5517327
seriedif<-diff(x, lag=1)
seriedif
## Jan Feb Mar Apr May Jun
## 2014 0.54960541 0.25366404 0.29594138 0.17615558 0.18320180
## 2015 0.24661781 0.74689966 0.29594138 0.28889515 0.40868095 0.19729425
## 2016 0.57779030 1.07102593 0.58483653 0.14797069 0.47914318 0.42277339
## 2017 0.71166855 1.04988726 0.57779030 0.58483653 0.27480271 0.23957159
## 2018 0.38049605 0.90191657 0.27480271 0.37344983 0.32412627 0.21138670
## 2019 0.46000000 0.64000000 0.34000000 0.40000000 0.26000000 0.17000000
## 2020 0.37000000 0.65000000 0.28000000 -0.20000000 -0.41000000 -0.44000000
## 2021 0.22000000 0.71000000 0.41000000 0.32000000 0.16000000 0.16000000
## 2022 1.31000000 1.40000000 0.64000000 1.01000000 0.77000000 0.53000000
## Jul Aug Sep Oct Nov Dec
## 2014 0.05636979 0.12683202 0.09864713 0.19729425 0.13387824 0.26775648
## 2015 0.27480271 0.31003382 0.41572717 0.34526494 0.39458850 0.37344983
## 2016 0.23957159 0.19024803 0.28889515 0.12683202 0.12683202 0.23957159
## 2017 -0.04932356 0.21843292 0.21843292 0.11978579 0.21843292 0.44391206
## 2018 0.04932356 0.14797069 0.11273957 0.19024803 0.14797069 0.25366404
## 2019 0.14000000 0.13000000 0.19000000 0.14000000 0.22000000 0.36000000
## 2020 0.16000000 0.08000000 0.40000000 -0.01000000 -0.20000000 0.39000000
## 2021 0.33000000 0.34000000 0.33000000 -0.18000000 0.32000000 0.48000000
## 2022 0.83000000 0.95000000 0.89000000 0.69000000 0.70000000 1.08000000
plot(seriedif)
acf(ts(seriedif, frequency=1))#Función de autocorrelación
pacf(ts(seriedif, frequency = 1))#Función de autocorrelación parcial
ndiffs(seriedif)
## [1] 0
No hay raiz unitaria, por lo tanto se puede concluir que la serie es estacionaria.
df2<-adf.test(seriedif, k=0)
## Warning in adf.test(seriedif, k = 0): p-value smaller than printed p-value
df2
##
## Augmented Dickey-Fuller Test
##
## data: seriedif
## Dickey-Fuller = -4.8865, Lag order = 0, p-value = 0.01
## alternative hypothesis: stationary
summary(df2)
## Length Class Mode
## statistic 1 -none- numeric
## parameter 1 -none- numeric
## alternative 1 -none- character
## p.value 1 -none- numeric
## method 1 -none- character
## data.name 1 -none- character
Teniendo en cuenta el p-valor obtenido en la prueba de Dickey-Fuller (0.01) se identifica que la serie ahora sí es estacionaria.
modelo3<-Arima(seriedif, order=c(1,1,0), include.drift = TRUE)
summary(modelo3)
## Series: seriedif
## ARIMA(1,1,0) with drift
##
## Coefficients:
## ar1 drift
## -0.2115 0.0049
## s.e. 0.0959 0.0212
##
## sigma^2 = 0.07127: log likelihood = -9.43
## AIC=24.86 AICc=25.1 BIC=32.85
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.000526035 0.2631923 0.1932397 35.25268 99.40545 0.844171
## ACF1
## Training set -0.02178836
tsdiag(modelo3)
Box.test(residuals(modelo3), type = "Ljung-Box")
##
## Box-Ljung test
##
## data: residuals(modelo3)
## X-squared = 0.052234, df = 1, p-value = 0.8192
modelo4<-arima(seriedif, order=c(1,1,0))
summary(modelo4)
##
## Call:
## arima(x = seriedif, order = c(1, 1, 0))
##
## Coefficients:
## ar1
## -0.2112
## s.e. 0.0959
##
## sigma^2 estimated as 0.06996: log likelihood = -9.46, aic = 22.92
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.005321309 0.263258 0.1926913 36.69843 98.06843 0.9742497
## ACF1
## Training set -0.0218577
modelo5<- auto.arima(x, seasonal = F, ic="aic", trace = T)
##
## ARIMA(2,1,2) with drift : 15.04895
## ARIMA(0,1,0) with drift : 58.71349
## ARIMA(1,1,0) with drift : 9.550868
## ARIMA(0,1,1) with drift : 25.18181
## ARIMA(0,1,0) : 145.5466
## ARIMA(2,1,0) with drift : 11.42794
## ARIMA(1,1,1) with drift : 11.44352
## ARIMA(2,1,1) with drift : 13.35279
## ARIMA(1,1,0) : 21.94358
##
## Best model: ARIMA(1,1,0) with drift
summary(modelo5)
## Series: x
## ARIMA(1,1,0) with drift
##
## Coefficients:
## ar1 drift
## 0.6301 0.3696
## s.e. 0.0771 0.0633
##
## sigma^2 = 0.06145: log likelihood = -1.78
## AIC=9.55 AICc=9.78 BIC=17.57
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.0006774964 0.2444222 0.1816685 -0.003928605 0.1832766 0.0453415
## ACF1
## Training set -0.01632017
modelo6 <- auto.arima(x, seasonal = T, ic="aic")
summary(modelo6)
## Series: x
## ARIMA(1,1,1)(2,0,0)[12] with drift
##
## Coefficients:
## ar1 ma1 sar1 sar2 drift
## 0.8765 -0.3751 0.4185 0.2441 0.4569
## s.e. 0.0737 0.1489 0.1031 0.1112 0.2297
##
## sigma^2 = 0.0442: log likelihood = 14.24
## AIC=-16.47 AICc=-15.63 BIC=-0.43
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.006965232 0.2043152 0.1456464 0.004116916 0.1474408 0.03635096
## ACF1
## Training set 0.01919086
El resultado (2,0,0) [12] indica que hay estacionalidad en el componente autoregresivo AR cada 12 meses
summary(modelo1)
## Series: x
## ARIMA(2,0,0) with drift
##
## Coefficients:
## ar1 ar2 intercept drift
## 1.6150 -0.6376 79.6330 0.3433
## s.e. 0.0757 0.0767 1.5862 0.0258
##
## sigma^2 = 0.06092: log likelihood = -2.42
## AIC=14.85 AICc=15.44 BIC=28.26
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.004159765 0.2422036 0.1805778 -0.005557171 0.1817835 0.04506928
## ACF1
## Training set -0.02578281
summary(modelo2)
##
## Call:
## arima(x = x, order = c(1, 0, 0))
##
## Coefficients:
## ar1 intercept
## 0.9997 99.8676
## s.e. 0.0004 18.6143
##
## sigma^2 estimated as 0.2239: log likelihood = -76.12, aic = 158.25
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.3469711 0.4732296 0.3832574 0.3491848 0.3864819 1.000013
## ACF1
## Training set 0.5517327
summary(modelo3)
## Series: seriedif
## ARIMA(1,1,0) with drift
##
## Coefficients:
## ar1 drift
## -0.2115 0.0049
## s.e. 0.0959 0.0212
##
## sigma^2 = 0.07127: log likelihood = -9.43
## AIC=24.86 AICc=25.1 BIC=32.85
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.000526035 0.2631923 0.1932397 35.25268 99.40545 0.844171
## ACF1
## Training set -0.02178836
summary(modelo4)
##
## Call:
## arima(x = seriedif, order = c(1, 1, 0))
##
## Coefficients:
## ar1
## -0.2112
## s.e. 0.0959
##
## sigma^2 estimated as 0.06996: log likelihood = -9.46, aic = 22.92
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.005321309 0.263258 0.1926913 36.69843 98.06843 0.9742497
## ACF1
## Training set -0.0218577
summary(modelo5)
## Series: x
## ARIMA(1,1,0) with drift
##
## Coefficients:
## ar1 drift
## 0.6301 0.3696
## s.e. 0.0771 0.0633
##
## sigma^2 = 0.06145: log likelihood = -1.78
## AIC=9.55 AICc=9.78 BIC=17.57
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.0006774964 0.2444222 0.1816685 -0.003928605 0.1832766 0.0453415
## ACF1
## Training set -0.01632017
summary(modelo6)
## Series: x
## ARIMA(1,1,1)(2,0,0)[12] with drift
##
## Coefficients:
## ar1 ma1 sar1 sar2 drift
## 0.8765 -0.3751 0.4185 0.2441 0.4569
## s.e. 0.0737 0.1489 0.1031 0.1112 0.2297
##
## sigma^2 = 0.0442: log likelihood = 14.24
## AIC=-16.47 AICc=-15.63 BIC=-0.43
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.006965232 0.2043152 0.1456464 0.004116916 0.1474408 0.03635096
## ACF1
## Training set 0.01919086
| Modelo | RSME | AIC |
|---|---|---|
| Modelo1 - (2,0,0) con intercepto | 0.1805778 | 14.85 |
| Modelo2 - (1,0,0) sin intercepto | 0.4732296 | 158.25 |
| Modelo3 - (1,1,0) con intercepto | 0.2631923 | 24.86 |
| Modelo4 - (1,1,0) sin intercepto | 0.263258 | 22.92 |
| Modelo5 - (1,1,0) autoarima | 0.2444222 | 9.55 |
| Modelo6 - (1,1,1) estacional | 0.2043152 | 16.47 |
Los mejores modelos son el modelo 1 teniendo en cuenta el Error cuadrático medio (RMSE) con un valor de 0.1805778 y el modelo 5 teniendo en cuenta el criterio de Akaike (AIC) con un valor de 9.55.
Para las pruebas de normalidad de los mejores modelos emplado el RMSE y AIC se considera:
H0: La muestra proviene de una distribución normal.
H1: La muestra no proviene de una distribución normal.
El nivel de significancia que se trabajará es de 0.05. Alfa=0.05
Criterio de Decisión
Si P < Alfa Se rechaza Ho
Si p >= Alfa No se rechaza Ho
#Método del histograma
hist(modelo1$residuals)
plot((density(modelo1$residuals)), ylab="Densidad", col="blue", xlab="Desviaciones estándar", las=1, lwd=4)
#Gráfico Q-Q norm
qqnorm(modelo1$residuals)
qqline(modelo1$residuals, col=2)
#Coeficientes de asimetría
skewness(modelo1$residuals)
## [1] 0.4539021
#Coeficientes der curtosis
kurtosis(modelo1$residuals)
## [1] 3.682591
#Test de Shapiro Wilks (para tamaños de muestra menores de 50)
shapiro.test(modelo1$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo1$residuals
## W = 0.97716, p-value = 0.05977
#Test de Komogorov-Smirnov-Lilliefors (para tamños de la muestra mayores a 50)
lillie.test(modelo1$residuals)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: modelo1$residuals
## D = 0.10047, p-value = 0.009234
#Test de Jarque - Bera
jarque.bera.test(modelo1$residuals)
##
## Jarque Bera Test
##
## data: modelo1$residuals
## X-squared = 5.8052, df = 2, p-value = 0.05488
Asimetría:Distribución asimétrica a la derecha
Curtosis: distribución leptocúrtica
Shapiro-Wilk: Como el p valor (0.05977) es mayor a alfa (0,05), no se rechaza la hipótesis nula. Esto sugiere que no hay evidencia estadística suficiente para concluir que los datos no siguen una distribución normal.
Lilliefors (Kolmogorov-Smirnov): Dado que 0.009234 < 0.05, se rechaza la hipótesis nula. Esto sugiere que hay evidencia estadística suficiente para concluir que los datos no siguen una distribución normal.
Jarque Bera Test: Dado que 0.05488 > 0.05, técnicamente no se rechaza la hipótesis nula. Esto sugiere que no hay evidencia estadística fuerte para concluir que los datos no siguen una distribución normal. En conjunto, estos resultados sugieren que los datos probablemente se desvían de una distribución normal perfecta
#Método del histograma
hist(modelo5$residuals)
plot((density(modelo5$residuals)), ylab="Densidad", col="blue", xlab="Desviaciones estándar", las=1, lwd=4)
#Gráfico Q-Q norm
qqnorm(modelo5$residuals)
qqline(modelo5$residuals, col=2)
#Coeficientes de asimetría
skewness(modelo5$residuals)
## [1] 0.6657392
#Coeficientes de curtosis
kurtosis(modelo5$residuals)
## [1] 3.878957
#Test de Shapiro Wilks (para tamaños de muestra menores de 50)
shapiro.test(modelo5$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo5$residuals
## W = 0.96373, p-value = 0.004844
#Test de Komogorov-Smirnov-Lilliefors (para tamños de la muestra mayores a 50)
lillie.test(modelo5$residuals)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: modelo5$residuals
## D = 0.10879, p-value = 0.003104
#Test de Jarque - Bera
jarque.bera.test(modelo5$residuals)
##
## Jarque Bera Test
##
## data: modelo5$residuals
## X-squared = 11.454, df = 2, p-value = 0.003256
Asimetría:Distribución asimétrica a la derecha
Kurtosis: distribución leptocúrtica
Los resultados de las demás pruebas: Shapiro-Wilk normality test p-value = 0.004844, Lilliefors (Kolmogorov-Smirnov) normality test p-value = 0.003104 y Jarque Bera Test p-value = 0.003256 muestran que todos los p-valores son menores que 0.05 (e incluso menores que 0.01), se rechaza la hipótesis nula en todas las pruebas. Esto proporciona una fuerte evidencia estadística para concluir que los datos no siguen una distribución normal.
pronostico<-forecast(modelo5, h=12, level = 95)
autoplot(pronostico)
# Cargar los datos del año 10 de la serie
datos <- read_excel("Taller2_Yesenia_Castro_Cely.xlsx", sheet = "test")
x_test <- datos
ipc_real <- ts(x_test, start = c(1,1), end = c(1,12), frequency=12)
ipc_real
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov
## 1 120.84 122.86 124.20 125.43 126.37 127.00 127.73 128.49 129.12 129.45 130.35
## Dec
## 1 131.21
# Crear tabla con pronósticos
prediccion <- data.frame(pronostico)
# Crear tabla comparativa
prueba <- data.frame(cbind(ipc_real, prediccion$Point.Forecast))
prueba
## ipc_real prediccion.Point.Forecast
## 1 120.84 119.7372
## 2 122.86 120.3889
## 3 124.20 120.9362
## 4 125.43 121.4178
## 5 126.37 121.8580
## 6 127.00 122.2720
## 7 127.73 122.6697
## 8 128.49 123.0569
## 9 129.12 123.4376
## 10 129.45 123.8142
## 11 130.35 124.1882
## 12 131.21 124.5606
# Calcular la diferencia entre valor real y valor pronosticado
prueba["diferencia"]<-(prueba$ipc_real - prueba$prediccion.Point.Forecast)
prueba["diferencia porcentual"]<-(prueba$diferencia / prueba$ipc_real)
colnames(prueba)<-c("IPC real", "Pronóstico", "Diferencia", "Diferencia porcentual")
prueba
## IPC real Pronóstico Diferencia Diferencia porcentual
## 1 120.84 119.7372 1.102763 0.00912581
## 2 122.86 120.3889 2.471099 0.02011313
## 3 124.20 120.9362 3.263767 0.02627832
## 4 125.43 121.4178 4.012178 0.03198738
## 5 126.37 121.8580 4.512014 0.03570479
## 6 127.00 122.2720 4.727953 0.03722798
## 7 127.73 122.6697 5.060341 0.03961748
## 8 128.49 123.0569 5.433093 0.04228417
## 9 129.12 123.4376 5.682376 0.04400849
## 10 129.45 123.8142 5.635775 0.04353631
## 11 130.35 124.1882 6.161767 0.04727094
## 12 131.21 124.5606 6.649393 0.05067748
plot(prueba$`IPC real`,
main = "Serie de tiempo - 2023",
xlab = "Meses",
ylab = "IPC sin alimentos",
xlim = c(1,12),
type = "l",
col="blue")
lines(prueba$Pronóstico, col=("red"))
axis(1, at = 1:12, labels = 1:12)
legend("topleft",
legend = c("IPC real", "Predicción usando el modelo 5"),
col = c("blue", "red"),
lty = 1,
cex = 0.8)
La serie de tiempo del índice de precios al consumidor en su valores originales sigue un modelo AR al considerar los resultados de la función de autocorrelación parcial.
La serie de tiempo del índice de precios al consumidor en su valores originales presenta una raíz unitaria, es decir, no es estacionaria. Los resultados de la prueba Dickey-Fuller reportan un valor-p de 0.99.
Al realizar la prueba de estacionalidad se identifica que indica que hay estacionalidad en el componente autoregresivo AR (2,0,0) cada 12 meses [12].
Los mejores modelos son el modelo 1 - (2,0,0) con intercepto teniendo en cuenta el Error cuadrático medio (RMSE) con un valor de 0.1805778 y el modelo 5 - (1,1,0) usando autoarima teniendo en cuenta el criterio de Akaike (AIC) con un valor de 9.55.
Al realizar la validación de los valores pronosticados por el modelo 5 (mejor modelo por AIC) comparándolos con los valores reales del IPC sin alimentos del año 2023 se encuentran diferencias menores al 5% para cada uno de los meses. Esto sugiere que el modelo 5 es preciso y ha capturado bien los patrones de la serie.