El Índice de Precios al Consumidor (IPC) es uno de los indicadores económicos más relevantes para evaluar la evolución del costo de vida y la dinámica de la inflación en un país. En Colombia, el IPC constituye una herramienta fundamental para la toma de decisiones en política monetaria, formulación de programas sociales y proyecciones macroeconómicas. Un adecuado análisis de su comportamiento permite comprender los choques inflacionarios, las variaciones estacionales y las tendencias estructurales que afectan a los hogares y al sistema productivo.
El presente estudio utiliza datos oficiales provenientes del OECD Data Explorer, seleccionando la serie mensual del IPC de Colombia entre enero de 2019 y diciembre de 2024. Este intervalo corresponde a un periodo caracterizado por fenómenos económicos importantes: la pandemia por COVID-19, la posterior recuperación económica, las presiones inflacionarias globales y la transición hacia niveles de inflación más moderados en 2023–2024.
El análisis de la serie temporal se realiza utilizando el modelo ARIMA, una metodología ampliamente utilizada en econometría para capturar patrones como tendencia, autocorrelación y estacionalidad. Finalmente, se generan pronósticos de entre 5 y 10 periodos futuros, tal como exige el taller.
El comportamiento del IPC durante el periodo analizado presenta una tendencia creciente consistente con choques externos (como el aumento del precio de alimentos y energía a nivel global) y choques internos (como los efectos post-pandemia). Comprender esta dinámica es fundamental no solo para fines académicos, sino también para la identificación de patrones que pueden anticipar riesgos inflacionarios o cambios estructurales en el comportamiento de precios.
Analizar y pronosticar el comportamiento del IPC de Colombia utilizando la metodología ARIMA, aplicando una ventana mínima de 60 periodos y generando una predicción de 10 periodos futuros.
El estudio emplea una ventana temporal desde enero de 2019 hasta diciembre de 2024, para un total de 72 observaciones mensuales utilizadas, lo que permite capturar:
Esta ventana es adecuada porque refleja un ciclo económico completo reciente y mejora la estabilidad del modelo ARIMA.Ademas este modelo
Los datos utilizados provienen del OECD Data Explorer, específicamente de la serie mensual del Índice de Precios al Consumidor (IPC) de Colombia.
Estas observaciones abarcan el período enero de 2019 a diciembre de 2024, cumpliendo así con la exigencia mínima de 60 periodos establecida en la guía del taller.
library(lubridate)
library(forecast)
library(ggplot2)
library(tseries)
df <- read.csv("Datos/colombia.csv")
cpi <- df[, c("TIME_PERIOD", "OBS_VALUE")]
cpi$TIME_PERIOD <- ym(cpi$TIME_PERIOD)
cpi <- cpi[order(cpi$TIME_PERIOD), ]
start_year <- year(min(cpi$TIME_PERIOD))
start_month <- month(min(cpi$TIME_PERIOD))
cpi_ts <- ts(cpi$OBS_VALUE,
start=c(start_year, start_month),
frequency=12)
Las estadísticas descriptivas permiten identificar la estructura básica del IPC en el período analizado. Se calcularon:
Valores mínimo, máximo, mediana y cuartiles.
Desviación estándar como medida de dispersión.
Estas medidas muestran que el IPC presenta un crecimiento sostenido y una variabilidad acorde a procesos inflacionarios típicos.
summary(cpi$OBS_VALUE)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 117.6 123.0 131.3 138.9 156.6 169.3
sd(cpi$OBS_VALUE)
## [1] 17.88816
La gráfica muestra una tendencia marcada ascendente, típica del comportamiento del IPC. se evidencia un cambio un poco brusco creciente del año 2022 al 2023 y para el año 2024 ya empieza a disminuir.
Implicación: la presencia de una tendencia sostenida implica no estacionariedad en nivel; para modelar con ARIMA es necesario diferenciar (al menos d=1) o trabajar con tasas de variación (inflación mensual/anual). También sugiere impacto de choques (pandemia, choques globales de oferta/energía) en 2021–2023.
plot(cpi_ts,
main="IPC Colombia (Serie Temporal, 2019–2024)",
ylab="Índice",
xlab="Tiempo",
col="steelblue")
Se evidencia un cambio un poco brusco creciente del año 2022 al 2023 y para el año 2024 ya empieza a disminuir. La presencia de una tendencia sostenida implica no estacionariedad en nivel; para modelar con ARIMA es necesario diferenciar al menos una o trabajar con tasas de variación (inflación mensual/anual). También sugiere impacto de choques (pandemia, choques globales de oferta/energía) en 2021–2023.
Mediante gráficos estacionales, ACF y PACF, se identificaron:
Existe estacionalidad mensual consistente: los patrones de meses son parecidos año a año, pero el nivel sube cada año.
No hay meses con saltos extremos y repetidos cada año (la estacionalidad no es muy fuerte en magnitud comparada con la tendencia): es más bien una estacionalidad de nivel (la serie sube en conjunto pero conserva la forma mensual). Implicación: un modelo ARIMA que capture tendencia + estacionalidad (por ejemplo SARIMA si la estacionalidad fuera fuerte cada 12 meses) podría usarse; sin embargo la estacionalidad parece más de nivel que de patrón cíclico pronunciado.
ggseasonplot(cpi_ts)
El análisis mediante gráficos estacionales, muestra que la serie del IPC no presenta una estacionalidad mensual marcada. Aunque los meses conservan una forma general similar cada año, no existen picos o caídas que se repitan sistemáticamente en meses específicos, lo cual indica que la estacionalidad es débil.
Lo que sí se evidencia claramente es un aumento progresivo del nivel de la serie año a año, lo que re eja una tendencia creciente más que un patrón estacional clásico. Las autocorrelaciones altas en los primeros rezagos con rman que la serie es no estacionaria, principalmente por la tendencia de largo plazo.
ggsubseriesplot(cpi_ts)
Con rma que la media mensual (línea azul) se incrementa con el paso de los años (niveles medios por mes crecen). Los trazos verticales muestran el rango interanual por mes: la variabilidad entre años aumenta para meses recientes (visto en 2022–2024). La variabilidad interanual aumentó en los años con alta inflación (2022–2023), por lo que los errores de predicción son potencialmente mayores en esos períodos.
ggAcf(cpi_ts)
Se muestra que la serie está fuertemente relacionada con sus valores pasados. Las autocorrelaciones iniciales son muy altas, lo que indica que el IPC cambia de manera lenta y mantiene una fuerte tendencia a lo largo del tiempo. Además, la ACF disminuye de forma gradual y no de manera brusca, lo que sugiere que la serie no es estacionaria y conserva una tendencia marcada durante todo el periodo analizado. Esto coincide con el comportamiento del IPC en Colombia en esos años, cuando la in ación presentó aumentos sostenidos.
ggPacf(cpi_ts)
Se observa un comportamiento típico de una serie no estacionaria con tendencia. El único rezago signi cativo es el lag 1, donde se observa un valor muy alto. A partir de allí, todos los demás rezagos caen dentro del intervalo de con anza y no resultan significativos. Este patrón indica que, aunque la serie presenta dependencia con su valor inmediatamente anterior, no hay evidencia de relaciones directas con rezagos más lejanos. En otras palabras, el IPC depende principalmente del mes anterior, pero no muestra efectos parciales relevantes de meses más distantes.
Se aplicó la prueba de ADF para evaluar si la serie es estacionaria.
Como resultados, el p-value de la serie original es mayor que 0.05, indicando que no es estacionaria. Esto implica que necesita al menos una diferenciación.
adf_original <- adf.test(cpi_ts)
adf_original
##
## Augmented Dickey-Fuller Test
##
## data: cpi_ts
## Dickey-Fuller = -2.0843, Lag order = 4, p-value = 0.541
## alternative hypothesis: stationary
La prueba de ADF se aplicó con el n de evaluar si la serie del IPC es estacionaria. Los resultados muestran que el p-value de la serie original es de 0.541, un valor muy superior a 0.05. Esto indica que no existe evidencia estadística su ciente para rechazar la hipótesis nula de no estacionariedad. Por lo tanto, la serie en su forma original presenta una tendencia y requiere al menos una diferenciación para intentar volverla estacionaria
Se realiza diferenciación:
cpi_diff <- diff(cpi_ts)
adf_diff <- adf.test(cpi_diff)
adf_diff
##
## Augmented Dickey-Fuller Test
##
## data: cpi_diff
## Dickey-Fuller = -2.1622, Lag order = 4, p-value = 0.5093
## alternative hypothesis: stationary
Posteriormente, se aplicó una primera diferenciación a la serie. Sin embargo, al realizar nuevamente la prueba ADF sobre la serie diferenciada, el p-value obtenido fue de 0.5093, aún mayor que 0.05. Esto signi ca que, incluso después de diferenciar una vez, la serie continúa sin ser estacionaria.
modelo <- auto.arima(cpi_ts,
seasonal = TRUE,
stepwise = FALSE,
approximation = FALSE)
modelo
## Series: cpi_ts
## ARIMA(0,2,2)(0,1,1)[12]
##
## Coefficients:
## ma1 ma2 sma1
## -0.3259 -0.1829 -0.8695
## s.e. 0.1350 0.1377 0.4483
##
## sigma^2 = 0.1234: log likelihood = -29.89
## AIC=67.78 AICc=68.54 BIC=76.02
El modelo sugerido por auto.arima fue:
ARIMA(0,2,2)(0,1,1)[12]
Este modelo incluye dos diferenciaciones no estacionales y una diferenciación estacional, lo cual indica que el algoritmo detectó una fuerte tendencia y patrones estacionales en la serie del IPC. Además, incorpora dos términos MA y un término MA estacional, lo que sugiere que la serie presenta componentes de ruido correlacionado tanto en la parte regular como en la parte estacional.
Sin embargo, el hecho de que el modelo incluya un total de tres diferenciaciones puede ser una señal de sobreajuste o sobre suavizamiento de la serie. En algunos casos, aplicar demasiadas diferenciaciones puede eliminar parte de la estructura real de los datos y hacer que el modelo pierda capacidad predictiva. Por esta razón, es recomendable evaluar con cuidado si todas las diferenciaciones son necesarias o si existen alternativas más parsimoniosas.
Aun así, los criterios de información (AIC, AICc y BIC) obtenidos por el modelo seleccionado se encuentran en niveles relativamente bajos, lo cual indica que, según el algoritmo, este modelo logra un buen equilibrio entre ajuste y complejidad. Esto permite contar con una primera aproximación razonable al comportamiento temporal del IPC
modelo2 <- Arima(cpi_ts, order=c(1,1,1), seasonal=c(1,1,1))
AIC(modelo)
## [1] 67.78044
AIC(modelo2)
## [1] 62.50996
El modelo:
ARIMA(1,1,1)(1,1,1)[12]
Posteriormente, se compararon los valores del criterio de información AIC de ambos modelos con el fin de determinar cuál ofrece un mejor equilibrio entre ajuste y complejidad.
El modelo seleccionado inicialmente por auto.arima() presentó un AIC de 67.78, mientras que el modelo2 alternativo obtuvo un AIC menor, específicamente 62.51. Dado que un valor más bajo de AIC indica un mejor desempeño del modelo bajo este criterio, el ARIMA(1,1,1)(1,1,1)[12] se considera superior en comparación con el modelo propuesto automáticamente. Esto sugiere que el modelo alternativo logra capturar la dinámica del IPC de manera más eficiente, utilizando un nivel adecuado de diferenciación y una estructura ARMA tanto en la parte regular como en la estacional que se ajusta mejor a los datos. Por lo tanto, este modelo es el candidato preferido para continuar con el análisis y la generación de pronósticos
Se examina la validez de los residuos:
checkresiduals(modelo2)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(1,1,1)(1,1,1)[12]
## Q* = 8.0261, df = 10, p-value = 0.6263
##
## Model df: 4. Total lags used: 14
Box.test(modelo2$residuals, lag=10, type="Ljung-Box")
##
## Box-Ljung test
##
## data: modelo2$residuals
## X-squared = 7.7052, df = 10, p-value = 0.6576
Los residuos presentan un comportamiento adecuado para nes de pronóstico. El gráfico de los residuos indica que estos fluctúan alrededor de cero sin mostrar tendencias, ciclos definidos ni patrones sistemáticos, lo que sugiere que el modelo captura correctamente la dinámica principal de la serie.
La función de autocorrelación de los residuos con rma esta observación, ya que ninguna de las barras supera los límites de significancia del 95%. Esto implica que no existe autocorrelación significativa en los errores, es decir, los residuos son independientes entre sí. De manera complementaria, el histograma evidencia que la distribución de los residuos se aproxima a una distribución normal, con una variabilidad estable a lo largo del tiempo. Las pruebas Ljung Box realizadas a diferentes rezagos arrojan valores p > 0.05, lo que indica que no se rechaza la hipótesis nula de ausencia de autocorrelación. En conjunto, estos resultados con rman que los residuos se comportan como ruido blanco
Se realiza un pronóstico de 10 meses.
pronostico <- forecast(modelo2, h=10)
autoplot(pronostico) +
ggtitle("Pronóstico del IPC para Colombia (10 meses)") +
ylab("Índice de Precios") +
xlab("Tiempo")
Tabla de predicciones:
print(data.frame(pronostico))
## Point.Forecast Lo.80 Hi.80 Lo.95 Hi.95
## Jan 2025 170.6605 170.1910 171.1300 169.9425 171.3786
## Feb 2025 172.1218 171.2388 173.0048 170.7714 173.4722
## Mar 2025 173.1010 171.7649 174.4372 171.0576 175.1445
## Apr 2025 173.9755 172.1571 175.7940 171.1945 176.7566
## May 2025 174.5745 172.2534 176.8957 171.0246 178.1245
## Jun 2025 174.8321 171.9945 177.6697 170.4923 179.1718
## Jul 2025 175.2393 171.8767 178.6018 170.0967 180.3819
## Aug 2025 175.6181 171.7262 179.5100 169.6659 181.5703
## Sep 2025 176.1320 171.7096 180.5545 169.3685 182.8956
## Oct 2025 176.2063 171.2548 181.1578 168.6336 183.7790
El pronóstico del IPC de Colombia para los próximos 10 meses muestra una continuación en la tendencia creciente observada en los últimos años. El modelo ARIMA proyecta que el índice de precios mantendrá un comportamiento ascendente moderado, sin presentar saltos abruptos ni señales de inestabilidad. Este resultado es coherente con el comportamiento reciente de la inflación en el país.
En el gráfico del pronóstico se observa la serie histórica junto con la proyección futura, resaltada con un intervalo de confianza que se amplía conforme avanza el horizonte temporal. Esto es normal en modelos de series de tiempo, ya que la incertidumbre aumenta a medida que se predicen periodos más lejanos. Aun así, el intervalo permanece relativamente estrecho, lo que indica que el modelo tiene un buen nivel de precisión.
La tabla de predicciones presenta los valores puntuales estimados para cada mes, así como los intervalos de con anza al 80% y al 95%. En general, los valores pronosticados se sitúan ligeramente por encima de los niveles actuales del IPC, reflejando incrementos mensuales pequeños pero consistentes. Estos resultados sugieren una inflación controlada, con aumentos graduales en el índice de precios
El análisis del IPC de Colombia entre 2019 y 2024 evidencia un comportamiento marcado por un fuerte choque inflacionario durante el periodo 2022–2023. En esos años, el índice registró sus mayores incrementos recientes, con variaciones anuales cercanas al 13.1% en 2022 y 9.3% en 2023. Aunque en 2024 la inflación mostró una desaceleración significativa, aún se mantuvo por encima de la meta establecida por el Banco de la República. Este contexto elevó de manera permanente el nivel de la serie y aumentó la incertidumbre en el corto plazo.
Desde el punto de vista estadístico, la serie no es estacionaria en nivel, como lo demuestra su tendencia creciente y el lento decaimiento de la ACF. Esto justificó el uso de diferenciación regular y estacional para alcanzar la estacionariedad. Si bien existe un patrón estacional mensual, este resulta moderado frente a la tendencia general, por lo que la incorporación de un componente SARIMA fue apropiada para capturar dichas variaciones.
La comparación de modelos mediante criterios de información mostró que el ARIMA(1,1,1)(1,1,1)[12] ofrecía un mejor ajuste que otras alternativas sugeridas automáticamente. El diagnóstico de residuos confirmó la validez del modelo, evidenciando ausencia de autocorrelación, distribución aproximadamente normal y un comportamiento cercano al ruido blanco, lo que respalda la estabilidad de las predicciones.
El pronóstico para los siguientes 10 meses sugiere que el IPC seguirá aumentando, aunque de manera más moderada en comparación con los picos observados en 2022-023. Sin embargo, la mayor volatilidad registrada después de 2022 implica intervalos de predicción más amplios, reflejando la incertidumbre del entorno inflacionario reciente.
En conjunto, este estudio cumple con los criterios metodológicos requeridos y proporciona una proyección coherente y confiable del comportamiento del IPC en el corto plazo, considerando tanto el contexto económico reciente como la estructura estadística de la serie.
Aunque el modelo ARIMA construido ofrece una aproximación coherente al comportamiento histórico del IPC en Colombia y logra capturar adecuadamente su tendencia y dinámica temporal, su alcance analítico presenta limitaciones importantes. En primer lugar, al tratarse de un modelo univariado, utiliza únicamente la información pasada del propio IPC, sin incorporar variables macroeconómicas que influyen directamente en la inflación.
Factores como la tasa de cambio, los precios internacionales del petróleo y los alimentos, las tasas de interés fijadas por el Banco de la República o los choques de oferta interna quedan por fuera del análisis, aun cuando tienen un impacto significativo en la variación mensual del índice de precios.
Esta ausencia de información externa implica que, aunque el ARIMA pueda ajustarse correctamente a los datos históricos, su capacidad predictiva se reduce en periodos donde ocurren cambios estructurales o choques inesperados. Por ejemplo, episodios de volatilidad cambiaria, reformas tributarias, eventos climáticos (como fenómenos de El Niño) o crisis internacionales pueden modificar el comportamiento de la inflación y generar desviaciones importantes respecto a las proyecciones del modelo.
Además, al comparar este enfoque con alternativas como los modelos VAR, VECM o los modelos semiestructurales utilizados por instituciones como el Banco de la República, es evidente que el ARIMA se queda corto para explicar las causas detrás de los movimientos del IPC. Mientras estos modelos permiten analizar relaciones entre múltiples variables y evaluar escenarios de política monetaria, el ARIMA se limita a extrapolar patrones pasados sin ofrecer una interpretación causal.
Por estas razones, aunque el modelo desarrollado en este taller es útil para describir el comportamiento histórico del IPC y proporcionar una primera aproximación a su posible evolución, sus resultados deben interpretarse con cautela. En contextos económicos dinámicos como el colombiano, es recomendable complementar este tipo de análisis con modelos multivariados o estructurales que permitan capturar la complejidad real del proceso inflacionario y mejorar la capacidad predictiva en presencia de shocks económicos.
library(lubridate)
library(ggplot2)
library(forecast)
library(tseries)
# 1. Cargar datos
df <- read.csv("Datos/colombia.csv")
View(df)
# 2. Seleccionar columnas relevantes
cpi <- df[, c("TIME_PERIOD", "OBS_VALUE")]
cpi$TIME_PERIOD <- ym(cpi$TIME_PERIOD)
cpi <- cpi[order(cpi$TIME_PERIOD), ]
View(cpi)
# 4. Crear serie temporal TS
start_year <- year(min(cpi$TIME_PERIOD))
start_month <- month(min(cpi$TIME_PERIOD))
cpi_ts <- ts(cpi$OBS_VALUE,
start=c(start_year, start_month),
frequency=12)
plot(cpi_ts,
main="IPC Colombia (Serie Temporal)",
ylab="Índice de Precios",
xlab="Tiempo")
# 5. Estadísticas descriptivas
summary(cpi$OBS_VALUE)
sd(cpi$OBS_VALUE)
# 6. Análisis eestacional y exploratorio
ggseasonplot(cpi_ts)
ggsubseriesplot(cpi_ts)
ggAcf(cpi_ts)
ggPacf(cpi_ts)
# 7. Prueba de estacionariedad ADF
adf.test(cpi_ts)
cpi_diff <- diff(cpi_ts)
adf.test(cpi_diff)
plot(cpi_diff, main="Serie Diferenciada")
ggAcf(cpi_diff)
ggPacf(cpi_diff)
# 8. Selección automática del mejor ARIMA
modelo <- auto.arima(cpi_ts,
seasonal = TRUE,
stepwise = FALSE,
approximation = FALSE)
modelo
# 9. Comparación con un modelo alternativo
modelo2 <- Arima(cpi_ts, order=c(1,1,1), seasonal=c(1,1,1))
AIC(modelo)
AIC(modelo2)
# 10. Diagnóstico del modelo
checkresiduals(modelo2)
Box.test(modelo2$residuals, lag=10, type="Ljung-Box")
# 11. Pronóstico a 10 meses
pronostico <- forecast(modelo2, h=10)
autoplot(pronostico) +
ggtitle("Pronóstico del IPC para Colombia (10 meses)") +
ylab("Índice de Precios") +
xlab("Tiempo")
# 12. Tabla con los valores pronosticados
pronostico_df <- data.frame(pronostico)
head(pronostico_df)
print(data.frame(pronostico))
Manual de R – https://fhernanb.github.io/Manual-de-R
Joaquín Barandica. https://www.joaquibarandica.com/post/ansupervised/
OECD. Consumer Price Index (CPI) — Colombia (Monthly). OECD Data Explorer. https://data-explorer.oecd.org/vis?tm=CPI%20–%20Consumer%20Price%20Index&pg=0&fs[0]=Reference%20area%2C0%7CColombia%23COL%23&fc=Reference%20area&snb=12&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_PRICES%40DF_PRICES_ALL&df[ag]=OECD.SDD.TPS&df[vs]=1.0&dq=COL.M.N.CPI.IX._T.N.GY%2B_Z&pd=2019-01%2C2024-12
Departamento Administrativo Nacional de Estadística. https://www.dane.gov.co/index.php/estadisticas-portema/precios-y-costos/indice-de-precios-al-consumidor-ipc”