El presente análisis busca identificar señales económicas del sector construcción colombiano mediante variables relacionadas con la industria cementera.
Empresa seleccionada: Cementos Argos.
Variables analizadas:
El objetivo es analizar tendencias, estacionalidad y realizar un pronóstico de corto plazo mediante un modelo ARIMA/SARIMA.
library(readxl)
library(forecast)
datos <- read_excel(
"Base Caso1.xlsx",
sheet = "Caso2"
)
head(datos)
## # A tibble: 6 × 62
## FECHA PNCEM DECEM CONCRETO LICC POLLO HUEVO PNCAFE PICAFE
## <dttm> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2012-01-01 00:00:00 868474 823284. 526136. 1.50e6 91722. 52929. 535 8.75e5
## 2 2012-02-01 00:00:00 865408 846615. 584897. 1.73e6 94142. 52870. 571 8.26e5
## 3 2012-03-01 00:00:00 998847 950453. 634905. 1.43e6 88748. 52979. 576 7.28e5
## 4 2012-04-01 00:00:00 852138 789542. 550290. 1.39e6 92013. 52633. 580 7.03e5
## 5 2012-05-01 00:00:00 919675 904691. 639649. 1.96e6 93279. 52466. 689 6.70e5
## 6 2012-06-01 00:00:00 906243 879219. 620338. 1.96e6 91315. 52665. 714 5.93e5
## # ℹ 53 more variables: PECAFE <dbl>, XCAF <dbl>, M <dbl>, X <dbl>, TRM <dbl>,
## # M_CEREAL <dbl>, M_CERAMICO <dbl>, M_FARM <dbl>, X_COMB <dbl>, X_AZU <dbl>,
## # X_PREALIM <dbl>, X_FARM <dbl>, X_QUIM <dbl>, X_PAPEL <dbl>,
## # X_CERAMICO <dbl>, IPIR <dbl>, IPIR_PAPEL <dbl>, IPIR_FARM <dbl>,
## # IPIR_PREALIM <dbl>, MIN <dbl>, ICC <dbl>, VEH <dbl>, CART <dbl>, DAH <dbl>,
## # ENER <dbl>, BRENT <dbl>, IPC <dbl>, TO <dbl>, TD <dbl>, ISE <dbl>,
## # CAN <dbl>, AZUCAR <dbl>, CEM_V <dbl>, COR_V <dbl>, M_V <dbl>, X_V <dbl>, …
names(datos)
## [1] "FECHA" "PNCEM" "DECEM" "CONCRETO"
## [5] "LICC" "POLLO" "HUEVO" "PNCAFE"
## [9] "PICAFE" "PECAFE" "XCAF" "M"
## [13] "X" "TRM" "M_CEREAL" "M_CERAMICO"
## [17] "M_FARM" "X_COMB" "X_AZU" "X_PREALIM"
## [21] "X_FARM" "X_QUIM" "X_PAPEL" "X_CERAMICO"
## [25] "IPIR" "IPIR_PAPEL" "IPIR_FARM" "IPIR_PREALIM"
## [29] "MIN" "ICC" "VEH" "CART"
## [33] "DAH" "ENER" "BRENT" "IPC"
## [37] "TO" "TD" "ISE" "CAN"
## [41] "AZUCAR" "CEM_V" "COR_V" "M_V"
## [45] "X_V" "IPIR_V" "MIN_V" "ICC_V"
## [49] "VEH_V" "PEAJE_V" "ENER_V" "CART_V"
## [53] "POLLO_V" "ENER_CALI" "LICC_CALI" "VEH_CALI"
## [57] "X_CALI" "OCUP_HOTEL_CALI" "ICC_CALI" "PEAJE_CALI"
## [61] "DAH_CALI" "IPIR_CALI"
datos$FECHA <- as.Date(datos$FECHA)
datos <- datos[order(datos$FECHA),]
head(datos)
## # A tibble: 6 × 62
## FECHA PNCEM DECEM CONCRETO LICC POLLO HUEVO PNCAFE PICAFE PECAFE
## <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2012-01-01 868474 823284. 526136. 1498909 91722. 52929. 535 874863. 256.
## 2 2012-02-01 865408 846615. 584897. 1728147 94142. 52870. 571 826220. 246.
## 3 2012-03-01 998847 950453. 634905. 1425267 88748. 52979. 576 727565. 226.
## 4 2012-04-01 852138 789542. 550290. 1388134 92013. 52633. 580 703033. 215.
## 5 2012-05-01 919675 904691. 639649. 1960736 93279. 52466. 689 670335. 210.
## 6 2012-06-01 906243 879219. 620338. 1956173 91315. 52665. 714 592504. 186.
## # ℹ 52 more variables: XCAF <dbl>, M <dbl>, X <dbl>, TRM <dbl>, M_CEREAL <dbl>,
## # M_CERAMICO <dbl>, M_FARM <dbl>, X_COMB <dbl>, X_AZU <dbl>, X_PREALIM <dbl>,
## # X_FARM <dbl>, X_QUIM <dbl>, X_PAPEL <dbl>, X_CERAMICO <dbl>, IPIR <dbl>,
## # IPIR_PAPEL <dbl>, IPIR_FARM <dbl>, IPIR_PREALIM <dbl>, MIN <dbl>,
## # ICC <dbl>, VEH <dbl>, CART <dbl>, DAH <dbl>, ENER <dbl>, BRENT <dbl>,
## # IPC <dbl>, TO <dbl>, TD <dbl>, ISE <dbl>, CAN <dbl>, AZUCAR <dbl>,
## # CEM_V <dbl>, COR_V <dbl>, M_V <dbl>, X_V <dbl>, IPIR_V <dbl>, …
tail(datos)
## # A tibble: 6 × 62
## FECHA PNCEM DECEM CONCRETO LICC POLLO HUEVO PNCAFE PICAFE PECAFE
## <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2025-07-01 1262045. 1.20e6 695647. 2.11e6 1.62e5 97217. 1373. 2.37e6 324.
## 2 2025-08-01 1257261. 1.10e6 620780. 1.47e6 1.68e5 97949. 1243. 2.76e6 353.
## 3 2025-09-01 1237727. 1.18e6 681625. 1.79e6 1.68e5 98401. 1142. 2.97e6 406.
## 4 2025-10-01 1271214. 1.20e6 709834. 1.70e6 1.73e5 98883. 1208. 2.95e6 402.
## 5 2025-11-01 1226494. 1.11e6 636589. 1.42e6 1.80e5 99416. 1266. 2.89e6 408.
## 6 2025-12-01 1200230. 1.07e6 596981. 1.94e6 1.73e5 99503. 1233. 2.75e6 385.
## # ℹ 52 more variables: XCAF <dbl>, M <dbl>, X <dbl>, TRM <dbl>, M_CEREAL <dbl>,
## # M_CERAMICO <dbl>, M_FARM <dbl>, X_COMB <dbl>, X_AZU <dbl>, X_PREALIM <dbl>,
## # X_FARM <dbl>, X_QUIM <dbl>, X_PAPEL <dbl>, X_CERAMICO <dbl>, IPIR <dbl>,
## # IPIR_PAPEL <dbl>, IPIR_FARM <dbl>, IPIR_PREALIM <dbl>, MIN <dbl>,
## # ICC <dbl>, VEH <dbl>, CART <dbl>, DAH <dbl>, ENER <dbl>, BRENT <dbl>,
## # IPC <dbl>, TO <dbl>, TD <dbl>, ISE <dbl>, CAN <dbl>, AZUCAR <dbl>,
## # CEM_V <dbl>, COR_V <dbl>, M_V <dbl>, X_V <dbl>, IPIR_V <dbl>, …
PNCEM <- ts(
datos$PNCEM,
start=c(2012,1),
frequency=12
)
DECEM <- ts(
datos$DECEM,
start=c(2012,1),
frequency=12
)
LICC <- ts(
datos$LICC,
start=c(2012,1),
frequency=12
)
plot(
PNCEM,
main="Producción nacional de cemento PNCEM 2012-2025",
xlab="Año",
ylab="Toneladas"
)
plot(
DECEM,
main="Despachos nacionales de cemento DECEM 2012-2025",
xlab="Año",
ylab="Toneladas"
)
plot(
LICC,
main="Licencias de construcción LICC 2012-2025",
xlab="Año",
ylab="Área aprobada"
)
DECEM_YOY <- 100*(DECEM/lag(DECEM,-12)-1)
plot(
DECEM_YOY,
main="Crecimiento interanual de despachos DECEM",
ylab="Porcentaje"
)
monthplot(
DECEM,
main="Comportamiento mensual de los despachos de cemento"
)
descomposicion <- stl(
DECEM,
s.window="periodic"
)
plot(descomposicion)
La variable seleccionada para el pronóstico es DECEM porque representa la demanda efectiva del mercado.
train <- window(
DECEM,
end=c(2024,12)
)
test <- window(
DECEM,
start=c(2025,1)
)
modelo <- auto.arima(
train,
seasonal=TRUE,
stepwise=FALSE,
approximation=FALSE
)
modelo
## Series: train
## ARIMA(1,1,1)(1,0,0)[12]
##
## Coefficients:
## ar1 ma1 sar1
## 0.4859 -0.9439 0.2263
## s.e. 0.0903 0.0435 0.0796
##
## sigma^2 = 8.324e+09: log likelihood = -1989.53
## AIC=3987.07 AICc=3987.34 BIC=3999.24
checkresiduals(modelo)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(1,1,1)(1,0,0)[12]
## Q* = 10.755, df = 21, p-value = 0.9673
##
## Model df: 3. Total lags used: 24
prediccion <- forecast(
modelo,
h=12
)
plot(prediccion)
accuracy(
prediccion,
test
)
## ME RMSE MAE MPE MAPE MASE
## Training set 8375.07 90060.37 61598.39 -0.8299535 7.443890 0.776646
## Test set 41325.96 92623.51 81776.83 3.1853859 7.475947 1.031060
## ACF1 Theil's U
## Training set -0.01721159 NA
## Test set 0.12945726 0.8148546
modelo_final <- auto.arima(
DECEM,
seasonal=TRUE,
stepwise=FALSE,
approximation=FALSE
)
modelo_final
## Series: DECEM
## ARIMA(1,1,1)(1,0,0)[12]
##
## Coefficients:
## ar1 ma1 sar1
## 0.4784 -0.9467 0.2355
## s.e. 0.0856 0.0399 0.0772
##
## sigma^2 = 8.279e+09: log likelihood = -2143.21
## AIC=4294.42 AICc=4294.66 BIC=4306.89
pronostico_2026 <- forecast(
modelo_final,
h=3
)
pronostico_2026
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Jan 2026 1036864 920256.8 1153471 858528.9 1215199
## Feb 2026 1055883 923817.5 1187948 853906.4 1257859
## Mar 2026 1078856 942003.9 1215708 869558.8 1288153
plot(
pronostico_2026,
main="Pronóstico de despachos de cemento enero-marzo 2026"
)
El análisis permite transformar información histórica del sector construcción en señales útiles para Cementos Argos.
Los resultados del modelo permiten apoyar decisiones relacionadas con: