Grupo Decor es una empresas especializada en la comercialización e instalación de revestimientos, pisos y productos para baños de marcas reconocidas a nivel mundial. Con un portafolio de casi 10,000 referencias y presencia en las principales ciudades de Colombia, ofrece soluciones innovadoras para hogares y proyectos de construcción. A través de sus unidades de negocio —Decorcerámica, Nova Casa Center, KLP Comercial y Canal Constructor— garantiza calidad, asesoría personalizada y disponibilidad de productos, consolidándose como un referente en el sector de acabados arquitectónicos.
El presente informe tiene como objetivo analizar la dinámica del sector en el que opera Grupo Decor, evaluando su evolución a lo largo del tiempo y proporcionando herramientas analíticas que faciliten la toma de decisiones estratégicas. Para ello, se han seleccionado tres variables económicas clave: las importaciones totales de Colombia, la Tasa Representativa del Mercado (TRM) y las importaciones en el Valle del Cauca.
La selección de estas variables responde a su impacto directo en el desempeño de la empresa y en la evolución del sector. Las importaciones totales de Colombia permiten entender la tendencia general del comercio exterior y su relación con la oferta de bienes importados. La TRM es un indicador fundamental debido a su influencia en los costos de importación y en la competitividad de los productos en el mercado local. Finalmente, las importaciones del Valle del Cauca proporcionan una visión más específica y localizada del comportamiento del comercio en una de las regiones clave para Grupo Decor.
A través de la descomposición de series temporales y la aplicación del modelo ARIMA, este análisis permitirá identificar patrones de comportamiento, anticipar tendencias de corto plazo y extraer insights valiosos que orienten la planificación estratégica de la empresa en un entorno de mercado dinámico y cambiante.
Instalar/Cargar librerias necesarias para el análisis
#Cargar librerías necesarias
library(readxl) # Para leer archivos Excel
library(tseries) # Para pruebas de estacionariedad
library(forecast) # Para modelado ARIMA y pronósticos
library(ggplot2) # Para visualización de datos
library(plotly) # Para gráficos interactivos
library(timetk)
Cargar base de datos
library(readxl)
base_caso2 <- read_excel("Base Caso2.xlsx",
col_types = c("date", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric"))
# Ver las primeras filas de los datos
class(base_caso2)
## [1] "tbl_df" "tbl" "data.frame"
colnames(base_caso2)
## [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"
head(base_caso2)
| FECHA | PNCEM | DECEM | CONCRETO | LICC | POLLO | HUEVO | PNCAFE | PICAFE | PECAFE | XCAF | M | X | TRM | M_CEREAL | M_CERAMICO | M_FARM | X_COMB | X_AZU | X_PREALIM | X_FARM | X_QUIM | X_PAPEL | X_CERAMICO | IPIR | IPIR_PAPEL | IPIR_FARM | IPIR_PREALIM | MIN | ICC | VEH | CART | DAH | ENER | BRENT | IPC | TO | TD | ISE | CAN | AZUCAR | CEM_V | COR_V | M_V | X_V | IPIR_V | MIN_V | ICC_V | VEH_V | PEAJE_V | ENER_V | CART_V | POLLO_V | ENER_CALI | LICC_CALI | VEH_CALI | X_CALI | OCUP_HOTEL_CALI | ICC_CALI | PEAJE_CALI | DAH_CALI | IPIR_CALI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2012-01-01 | 868474 | 823283.7 | 526135.5 | 1498909 | 91721.61 | 52928.85 | 535 | 874862.9 | 256.1168 | 197295.8 | 4187750 | 4785773 | 1847.516 | 130488.7 | 22662.56 | 134163.0 | 3313842 | 63273.73 | 28018.43 | 30866.08 | 25715.95 | 38768.11 | 11391.80 | 84.22582 | NA | NA | NA | 68.95512 | 32.7 | NA | 2.797604e+14 | 1.261248e+14 | 1595.273 | 111.15619 | 76.75 | 59.6727 | 12.7911 | 81.64043 | 1685584 | 148482.7 | 61149.38 | 109.7525 | 355074079 | 159599364 | 80.69007 | NA | 20.64948 | 2379 | 220673 | 200.3 | 2.596268e+13 | 13518.16 | 69379734 | 71805 | NA | 2776386323 | 40.98415 | 20.64948 | 27041 | 4.071660e+12 | 96.47151 |
| 2012-02-01 | 865408 | 846615.1 | 584896.7 | 1728147 | 94142.30 | 52870.40 | 571 | 826219.8 | 246.3010 | 186693.3 | 4291881 | 4999318 | 1786.543 | 170760.2 | 22217.55 | 144190.3 | 3319381 | 63131.04 | 30393.01 | 31201.81 | 27501.57 | 32519.62 | 15168.11 | 87.97827 | NA | NA | NA | 67.77499 | 26.8 | NA | 2.808113e+14 | 1.297710e+14 | 1544.653 | 119.70238 | 77.22 | 60.5054 | 12.0750 | 84.46710 | 1973654 | 192196.2 | 66968.57 | 112.8675 | 556359400 | 180240665 | 89.67271 | NA | 16.22099 | 2654 | 215773 | 201.4 | 2.612658e+13 | 13579.57 | 68346783 | 60566 | NA | 3334123499 | 48.16395 | 16.22099 | 28333 | 4.093730e+12 | 101.89722 |
| 2012-03-01 | 998847 | 950452.9 | 634905.0 | 1425267 | 88748.18 | 52979.25 | 576 | 727564.5 | 226.0661 | 203636.0 | 4632763 | 5712355 | 1767.793 | 150305.8 | 17682.10 | 158930.0 | 3870611 | 78703.91 | 29172.08 | 35073.98 | 30545.46 | 37829.72 | 14769.90 | 94.12009 | NA | NA | NA | 73.34700 | 24.4 | NA | 2.843590e+14 | 1.282989e+14 | 1718.766 | 124.92864 | 77.31 | 61.5487 | 10.5024 | 87.79398 | 2083470 | 202407.6 | 72051.74 | 121.4324 | 408991672 | 191373990 | 97.08964 | NA | 21.36821 | 3155 | 228878 | 221.0 | 2.647571e+13 | 13502.11 | 69585382 | 97722 | NA | 3673264590 | 52.75165 | 21.36821 | 29239 | 3.937027e+12 | 107.43327 |
| 2012-04-01 | 852138 | 789542.0 | 550290.4 | 1388134 | 92013.41 | 52633.09 | 580 | 703033.3 | 215.2930 | 121442.5 | 4100547 | 5010929 | 1773.893 | 112970.3 | 19527.31 | 151309.5 | 3522192 | 59113.52 | 31688.49 | 31236.37 | 31427.60 | 31123.96 | 14159.99 | 82.59192 | NA | NA | NA | 66.98975 | 26.6 | NA | 2.871988e+14 | 1.246385e+14 | 1574.681 | 120.46350 | 77.42 | 61.1934 | 11.0870 | 84.04757 | 1406868 | 134531.8 | 63652.29 | 111.7223 | 344847316 | 161232070 | 82.73562 | NA | 35.50760 | 2319 | 196841 | 202.6 | 2.670158e+13 | 14575.28 | 67028317 | 95605 | NA | 3098189849 | 46.18602 | 35.50760 | 23982 | 3.864931e+12 | 98.47965 |
| 2012-05-01 | 919675 | 904690.6 | 639649.5 | 1960736 | 93279.24 | 52465.80 | 689 | 670334.7 | 209.5097 | 167643.9 | 5088029 | 5403375 | 1795.907 | 171028.7 | 21924.39 | 182269.8 | 3529123 | 53262.61 | 28144.86 | 47114.54 | 28830.46 | 32192.04 | 14491.28 | 94.27041 | NA | NA | NA | 71.02216 | 26.5 | NA | 2.906164e+14 | 1.265586e+14 | 1687.182 | 110.52174 | 77.66 | 61.5247 | 10.9950 | 87.93170 | 1233631 | 107659.3 | 71515.40 | 126.6002 | 411510051 | 198790367 | 90.79219 | NA | 27.95129 | 2507 | 226518 | 220.9 | 2.696921e+13 | 14565.48 | 68422194 | 54599 | NA | 2932225874 | 51.65681 | 27.95129 | 27637 | 3.986793e+12 | 104.51982 |
| 2012-06-01 | 906243 | 879219.3 | 620337.5 | 1956173 | 91314.75 | 52664.54 | 714 | 592504.2 | 185.8843 | 162433.1 | 4778664 | 4563431 | 1788.877 | 173377.4 | 23567.14 | 156605.5 | 2884610 | 51468.10 | 31688.85 | 40872.38 | 29003.39 | 34379.25 | 18788.05 | 92.06757 | NA | NA | NA | 72.57736 | 20.6 | NA | 2.939673e+14 | 1.237816e+14 | 1630.558 | 95.58905 | 77.72 | 62.3620 | 10.2437 | 87.83290 | 1997318 | 206133.8 | 71479.04 | 118.6786 | 390090495 | 172481442 | 94.30628 | NA | 27.94618 | 2643 | 238681 | 216.6 | 2.723038e+13 | 13434.11 | 68707263 | 54973 | NA | 2565482794 | 50.49887 | 27.94618 | 27984 | 3.944551e+12 | 106.11454 |
La tendencia alcista en la tasa de cambio sugiere un encarecimiento estructural de las importaciones, lo que afecta la planificación financiera de Grupo Decor. La estacionalidad destaca periodos de mayor volatilidad, indicando momentos clave para negociar coberturas o ajustar estrategias de compra. Finalmente, el ruido refleja eventos atípicos que podrían estar ligados a shocks externos, reafirmando la necesidad de monitoreo constante y adaptación ágil en la estrategia financiera y de abastecimiento.
El análisis de la descomposición de las series revela patrones clave que impactan la estrategia de Grupo Decor. La tendencia alcista en la tasa de cambio y en las importaciones sugiere un entorno desafiante para la rentabilidad y el abastecimiento del sector construcción. La estacionalidad identificada permite anticipar momentos de mayor presión en costos y demanda, facilitando decisiones estratégicas en compras y financiamiento. Ante un mercado volátil, la empresa debe fortalecer su gestión de riesgos, optimizar su cadena de suministro y evaluar coberturas financieras para mitigar el impacto de la fluctuación cambiaria y garantizar estabilidad operativa.
# Convertir/declarar el número de importaciones totales en serie de tiempo mensual
m_ts <- ts(base_caso2$M, start = c(2012, 1), frequency = 12)
m_ts
## Jan Feb Mar Apr May Jun Jul Aug Sep
## 2012 4187750 4291881 4632763 4100547 5088029 4778664 4884506 4851359 4289481
## 2013 4856410 4147585 4162601 4788651 4826357 4000946 4748005 4602934 4784631
## 2014 4496511 4627733 4514589 4986690 4927642 4513719 5583151 4474171 5321569
## 2015 4776231 4460912 4485663 4329046 4250373 4036715 4774686 4290333 4398008
## 2016 3537523 3491327 3604585 3704645 3563034 3631247 3294563 4163090 3899746
## 2017 3431867 3530623 3986317 3876998 3605794 3638406 3619556 4015947 3548031
## 2018 3643293 3409987 3634244 3913422 4131490 3859730 3964811 4166723 3677955
## 2019 3980454 3644096 3927496 4107405 4352027 3651847 4174076 4509153 3857294
## 2020 3956983 3658158 3350001 2960719 2703891 2703012 3386044 3502705 3407360
## 2021 3619154 3635115 4490700 4237304 3856221 4272197 4142113 4588906 4879226
## 2022 4944444 4642236 5449133 4847533 5014988 4581627 5075593 5488769 5026649
## 2023 5529665 5058145 5856798 4942585 5418513 5015212 4945201 5288179 4944207
## 2024 4958983 4820621 4757260 5839421 5535521 4660201 5581114 5532865 5162792
## Oct Nov Dec
## 2012 4794022 4782489 4251560
## 2013 4977787 4716281 4615462
## 2014 5420727 5017999 5220274
## 2015 4434822 4188740 4155269
## 2016 3547585 4115341 3970472
## 2017 3736781 3761262 3423850
## 2018 4665619 4068898 3863095
## 2019 3975215 4375873 3739054
## 2020 3618241 4071889 3976406
## 2021 4873378 5451123 5188196
## 2022 4561444 4518721 4519477
## 2023 5375733 5165698 5256700
## 2024 5730920 5874370 5650617
# Calcular estadísticas descriptivas básicas
descriptive_stats <- data.frame(
Min = min(m_ts),
Max = max(m_ts),
Media = mean(m_ts),
Mediana = median(m_ts),
DesviacionEstandar = sd(m_ts),
CoefVar = sd(m_ts) / mean(m_ts)
)
print(descriptive_stats)
## Min Max Media Mediana DesviacionEstandar CoefVar
## 1 2703012 5874370 4397045 4386940 681150.7 0.154911
Los datos muestran un rango entre 2,703,012 y 5,874,370, con una media (4,397,045) y una mediana (4,386,940) muy cercanas, lo que indica una distribución equilibrada sin sesgo significativo. La desviación estándar de 681,150.7 refleja una variabilidad moderada, pero el coeficiente de variación (0.1549) indica una dispersión relativamente baja respecto a la media, sugiriendo estabilidad en los valores analizados.
Grafico Inicial Variable 1 - Serie Original Importaciones Totales
library(ggplot2)
library(plotly)
# Convertir la serie temporal a un vector numérico para lograr graficar con ggplot2
base_caso2$m <- as.numeric(m_ts)
# Crear el gráfico
grafico_serie <- ggplot(base_caso2, aes(x = seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = nrow(base_caso2)),
y = m)) +
geom_line(color = "grey", linewidth = 0.4) + # Cambiado 'size' por 'linewidth'
geom_point(color = "black", size = 0.1) +
ggtitle("Variable 1: Serie original - Importaciones Totales") +
xlab("Tiempo") +
ylab("Unidad Variable 1 - Importaciones Totales") +
theme_minimal()
ggplotly(grafico_serie)
Descomposición de la Serie Temporal Variable 1 - Importaciones Totales
# Cargar librerías necesarias
library(ggplot2)
library(plotly)
# Descomposición de la serie temporal
stl_decomp <- stl(m_ts, s.window = "periodic")
# Convertir la descomposición a un data frame para graficar con ggplot2
stl_df <- data.frame(
Time = rep(time(m_ts), 4), # Tiempo repetido para cada componente
Value = c(stl_decomp$time.series[, "seasonal"],
stl_decomp$time.series[, "trend"],
stl_decomp$time.series[, "remainder"],
m_ts),
Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(m_ts))
)
# Crear gráfico con ggplot2
p <- ggplot(stl_df, aes(x = Time, y = Value, color = Component)) +
geom_line() +
facet_wrap(~Component, scales = "free_y", ncol = 1) +
theme_minimal() +
labs(title = "Variable 1. Descomposicion de las Importaciones Totales",
x = "Tiempo",
y = "Valor")
# Convertir a gráfico interactivo con plotly
ggplotly(p)
La descomposición de la serie muestra que las importaciones en Colombia han tenido un comportamiento cíclico con una fuerte estacionalidad y fluctuaciones en la tendencia a lo largo del tiempo. Se evidencia una caída significativa alrededor de 2019-2020, probablemente vinculada a la desaceleración económica y restricciones comerciales de la pandemia. Sin embargo, la tendencia ha mostrado una recuperación progresiva desde 2021, con una proyección de crecimiento sostenido hacia 2025. Para Grupo Decor, esto implica mayor disponibilidad de inventario, pero también riesgo de fluctuaciones en costos. Ajustar la estrategia de aprovisionamiento según la estacionalidad y fortalecer acuerdos con proveedores serán claves para mantener competitividad y eficiencia en el sector construcción.
Grafica serie original VS ajustada por estacionalidad Variable 1 - Importaciones Totales
# Extraer los componentes de la descomposición
m_sa <- m_ts - stl_decomp$time.series[, "seasonal"]
# Crear vector de fechas correctamente alineado con la serie
fechas <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(m_ts))
# Gráfico mejorado con fechas en el eje X
grafico_ajustada <- ggplot() +
geom_line(aes(x = fechas, y = m_ts), color = "grey", size = 0.5, linetype = "solid", name = "Serie Original") +
geom_line(aes(x = fechas, y = m_sa), color = "black", size = 0.6, linetype = "solid", name = "Serie Ajustada") +
ggtitle("Variable 1. Importaciones Totales:Serie Original vs Serie Ajustada por Estacionalidad") +
xlab("Tiempo") +
ylab("Valor Importaciones") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas para mejor visualización
# Convertir a gráfico interactivo
ggplotly(grafico_ajustada)
El análisis de la serie ajustada por estacionalidad revela una tendencia cíclica en las importaciones, con caídas pronunciadas en períodos de crisis, como en 2020, y una recuperación sostenida posterior. Esta información permite una planificación financiera más precisa, evitando distorsiones por efectos estacionales y facilitando estrategias de cobertura cambiaria ante la volatilidad del dólar. Además, optimiza la gestión de pagos a proveedores internacionales, alineando el flujo de caja con los picos de importación y reduciendo costos financieros, asegurando así mayor estabilidad y eficiencia en la estrategia de abastecimiento.
Grafica Serie original vs tendencia Variable 1 - Importaciones Totales
# Extraer la tendencia de la descomposición STL
tendencia <- stl_decomp$time.series[, "trend"]
# Gráfico interactivo de la serie original vs tendencia
grafico_tendencia <- ggplot() +
geom_line(aes(x = fechas, y = m_ts), color = "grey", size = 0.7, linetype = "solid", name = "Serie Original") +
geom_line(aes(x = fechas, y = tendencia), color = "black", size = 0.8, linetype = "solid", name = "Tendencia") +
ggtitle("Variable 1. Importaciones Totales:Serie Original vs Tendencia") +
xlab("Tiempo") +
ylab("Valor de Importaciones Totales") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas del eje X para mejor visualización
# Convertir a gráfico interactivo
ggplotly(grafico_tendencia)
Variable 1 Tasa de crecimiento de la serie Original vs Tendencia - Importaciones Totales
#Cálculo de la tasa de crecimiento anual correctamente alineada
tasa_crecimiento <- (m_ts[(13:length(m_ts))] / m_ts[1:(length(m_ts) - 12)] - 1) * 100
tasa_tendencia <- (tendencia[(13:length(tendencia))] / tendencia[1:(length(tendencia) - 12)] - 1) * 100
# Crear vector de fechas corregido
fechas_corregidas <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento))
# Verificar longitudes
print(length(fechas_corregidas))
## [1] 144
print(length(tasa_crecimiento))
## [1] 144
print(length(tasa_tendencia))
## [1] 144
# Gráfico de la tasa de crecimiento anual
grafico_crecimiento <- ggplot() +
geom_line(aes(x = fechas_corregidas, y = tasa_crecimiento), color = "grey", size = 0.7) +
geom_line(aes(x = fechas_corregidas, y = tasa_tendencia), color = "black", size = 0.8, linetype = "dashed") +
ggtitle("Variable 1. Importaciones Totales: Tasa de crecimiento de la serie Original vs Tendencia") +
xlab("Tiempo") +
ylab("% de Crecimiento Anual") +
theme_minimal()
# Convertir a gráfico interactivo
ggplotly(grafico_crecimiento)
El análisis de la tasa de crecimiento anual de las importaciones refleja periodos de expansión y contracción, con fluctuaciones significativas en la serie original debido a choques económicos y factores externos. La tendencia suavizada permite identificar patrones estructurales, evidenciando ciclos de recuperación y desaceleración. El pico pronunciado alrededor de 2021 sugiere un fuerte repunte tras una caída previa, posiblemente vinculada a la disrupción global del comercio. Estos datos son clave para anticipar escenarios futuros, ajustar estrategias de abastecimiento y definir políticas financieras que mitiguen riesgos derivados de variaciones abruptas en la dinámica de importaciones.
# Convertir/declarar el número de importaciones del valle en serie de tiempo mensual
m_v_ts <- ts(base_caso2$M_V, start = c(2012, 1), frequency = 12)
m_v_ts
## Jan Feb Mar Apr May Jun Jul
## 2012 355074079 556359400 408991672 344847316 411510051 390090495 394875972
## 2013 410666973 359139387 355342304 427014511 411642940 379639779 380236995
## 2014 412087737 374326560 413940374 471041989 470730946 421020081 496540003
## 2015 438172881 396410265 372288544 370972511 359980761 355598560 396045401
## 2016 327720078 308905727 317695275 345953466 300974616 289314046 282372332
## 2017 331357913 329140297 370590410 321930508 292526140 331623790 284971846
## 2018 333349548 323432567 313055506 347877391 335567028 329076039 350568656
## 2019 368632868 307594284 324104730 341831414 341779950 317345438 331304185
## 2020 321480804 386684901 299095593 304821736 286658639 268102810 326536395
## 2021 319889082 346588362 408436988 369834166 248993701 373647208 388686740
## 2022 435008827 393865542 486735774 424340748 421078617 420340822 320088971
## 2023 351172059 303315141 375266946 345832264 339176071 299875198 253045708
## 2024 352871095 330799782 320792544 572115119 363635093 307749248 326743464
## Aug Sep Oct Nov Dec
## 2012 427472544 366472004 421252726 413280397 356850071
## 2013 383357976 396772717 430514316 356858327 391124496
## 2014 455969188 460384545 533928375 431048217 417265246
## 2015 340035359 347999399 360625240 340066016 334401997
## 2016 378108884 326741403 324976024 350343625 321872761
## 2017 357719869 317298188 333985758 345585114 300749940
## 2018 364386573 271741552 381432147 341869649 303083199
## 2019 401498247 334206010 371487077 316632940 321711969
## 2020 297092358 296573918 332525591 349123453 376900177
## 2021 374419409 410794826 437442327 427677263 500470221
## 2022 479405715 453044681 419507074 360037022 399598223
## 2023 314414115 298036781 323767865 309797740 333716565
## 2024 357513502 335232735 366814925 412559322 366946648
# Calcular estadísticas descriptivas básicas
descriptive_stats <- data.frame(
Min = min(m_v_ts),
Max = max(m_v_ts),
Media = mean(m_v_ts),
Mediana = median(m_v_ts),
DesviacionEstandar = sd(m_v_ts),
CoefVar = sd(m_v_ts) / mean(m_v_ts)
)
print(descriptive_stats)
## Min Max Media Mediana DesviacionEstandar CoefVar
## 1 248993701 572115119 364698803 355470432 56882954 0.1559724
En este caso, los datos presentan un rango amplio (24,899,370 a 572,115,119), pero la media (364,698,803) y la mediana (355,470,432) están bastante cercanas, lo que sugiere una distribución relativamente equilibrada sin sesgo significativo. La desviación estándar es alta (56,882,954), pero el coeficiente de variación (0.156) indica una menor dispersión relativa respecto a la media, lo que refleja una mayor estabilidad en comparación con el análisis anterior.
Grafico Inicial Variable 2 - Serie Original Importaciones del Valle
library(ggplot2)
library(plotly)
# Convertir la serie temporal a un vector numérico para lograr graficar con ggplot2
base_caso2$m <- as.numeric(m_v_ts)
# Crear el gráfico
grafico_serie <- ggplot(base_caso2, aes(x = seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = nrow(base_caso2)),
y = m)) +
geom_line(color = "grey", linewidth = 0.4) + # Cambiado 'size' por 'linewidth'
geom_point(color = "black", size = 0.1) +
ggtitle("Variable 2: Serie original - Importaciones Del Valle") +
xlab("Tiempo") +
ylab("Unidad Variable 2 - Importaciones del Valle") +
theme_minimal()
ggplotly(grafico_serie)
Descomposición de la Serie Temporal Variable 2 Importaciones Del Valle
# Cargar librerías necesarias
library(ggplot2)
library(plotly)
# Descomposición de la serie temporal
stl_decomp <- stl(m_v_ts, s.window = "periodic")
# Convertir la descomposición a un data frame para graficar con ggplot2
stl_df <- data.frame(
Time = rep(time(m_v_ts), 4), # Tiempo repetido para cada componente
Value = c(stl_decomp$time.series[, "seasonal"],
stl_decomp$time.series[, "trend"],
stl_decomp$time.series[, "remainder"],
m_v_ts),
Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(m_v_ts))
)
# Crear gráfico con ggplot2
p <- ggplot(stl_df, aes(x = Time, y = Value, color = Component)) +
geom_line() +
facet_wrap(~Component, scales = "free_y", ncol = 1) +
theme_minimal() +
labs(title = "Variable 2. Descomposicion de las Importaciones Del Valle",
x = "Tiempo",
y = "Valor")
# Convertir a gráfico interactivo con plotly
ggplotly(p)
Las importaciones en el Valle presentan una marcada estacionalidad y una recuperación sostenida tras la caída de 2019-2020. La tendencia sugiere ciclos de crecimiento y contracción, lo que impacta la disponibilidad de insumos clave para la construcción. Para Grupo Decor, anticipar estos ciclos y fortalecer acuerdos logísticos permitirá asegurar costos competitivos y garantizar el abastecimiento en momentos de alta demanda.
Grafica serie original VS ajustada por estacionalidad Variable 2 - Importaciones del Valle
# Extraer los componentes de la descomposición
m_v_sa <- m_v_ts - stl_decomp$time.series[, "seasonal"]
# Crear vector de fechas correctamente alineado con la serie
fechas <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(m_v_ts))
# Gráfico mejorado con fechas en el eje X
grafico_ajustada <- ggplot() +
geom_line(aes(x = fechas, y = m_v_ts), color = "grey", size = 0.5, linetype = "solid", name = "Serie Original") +
geom_line(aes(x = fechas, y = m_v_sa), color = "black", size = 0.6, linetype = "solid", name = "Serie Ajustada") +
ggtitle("Variable 2. Importaciones Del Valle:Serie Original vs Serie Ajustada por Estacionalidad") +
xlab("Tiempo") +
ylab("Valor Importaciones del Valle") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas para mejor visualización
# Convertir a gráfico interactivo
ggplotly(grafico_ajustada)
Grafica serie original vs tendencia Variable 2 - Importaciones del Valle
# Extraer la tendencia de la descomposición STL
tendencia <- stl_decomp$time.series[, "trend"]
# Gráfico interactivo de la serie original vs tendencia
grafico_tendencia <- ggplot() +
geom_line(aes(x = fechas, y = m_v_ts), color = "grey", size = 0.7, linetype = "solid", name = "Serie Original") +
geom_line(aes(x = fechas, y = tendencia), color = "black", size = 0.8, linetype = "solid", name = "Tendencia") +
ggtitle("Variable 2. Importaciones Del Valle:Serie Original vs Tendencia") +
xlab("Tiempo") +
ylab("Valor de Importaciones Del Valle") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas del eje X para mejor visualización
# Convertir a gráfico interactivo
ggplotly(grafico_tendencia)
Variable 2 Tasa de crecimiento de la serie Original vs Tendencia Importaciones del Valle
#Cálculo de la tasa de crecimiento anual correctamente alineada
tasa_crecimiento <- (m_v_ts[(13:length(m_v_ts))] / m_v_ts[1:(length(m_v_ts) - 12)] - 1) * 100
tasa_tendencia <- (tendencia[(13:length(tendencia))] / tendencia[1:(length(tendencia) - 12)] - 1) * 100
# Crear vector de fechas corregido
fechas_corregidas <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento))
# Verificar longitudes
print(length(fechas_corregidas))
## [1] 144
print(length(tasa_crecimiento))
## [1] 144
print(length(tasa_tendencia))
## [1] 144
# Gráfico de la tasa de crecimiento anual
grafico_crecimiento <- ggplot() +
geom_line(aes(x = fechas_corregidas, y = tasa_crecimiento), color = "grey", size = 0.7) +
geom_line(aes(x = fechas_corregidas, y = tasa_tendencia), color = "black", size = 0.8, linetype = "dashed") +
ggtitle("Variable 2. Importaciones Del Valle: Tasa de crecimiento de la serie Original vs Tendencia") +
xlab("Tiempo") +
ylab("% de Crecimiento Anual") +
theme_minimal()
# Convertir a gráfico interactivo
ggplotly(grafico_crecimiento)
La tasa de crecimiento anual de las importaciones en el Valle presenta una alta volatilidad con periodos de expansión y contracción significativos. Se observan ciclos de crecimiento sostenido seguidos por caídas abruptas, reflejando la sensibilidad del comercio exterior a factores macroeconómicos y sectoriales. Destacan dos momentos clave: una desaceleración pronunciada alrededor de 2015 y una recuperación acelerada posterior a la crisis de 2020. La tendencia suavizada sugiere una recuperación progresiva, aunque con oscilaciones marcadas, lo que indica la necesidad de estrategias que reduzcan la vulnerabilidad ante choques externos y mejoren la estabilidad del flujo de importaciones en la región.
# Convertir/declarar Tasa Cambio en serie de tiempo mensual - Promedio
trm_ts <- ts(base_caso2$TRM, start = c(2012, 1), frequency = 12)
trm_ts
## Jan Feb Mar Apr May Jun Jul Aug
## 2012 1847.516 1786.543 1767.793 1773.893 1795.907 1788.877 1784.903 1807.772
## 2013 1770.024 1794.198 1813.454 1830.091 1853.722 1910.188 1900.163 1904.411
## 2014 1964.111 2042.631 2017.022 1936.680 1915.203 1887.066 1858.366 1899.140
## 2015 2400.168 2422.994 2593.465 2492.766 2444.315 2561.667 2743.140 3027.064
## 2016 3287.158 3356.246 3124.169 2992.575 3002.174 2985.018 2971.474 2956.525
## 2017 2941.918 2880.985 2941.717 2876.237 2920.387 2966.522 3034.359 2971.017
## 2018 2866.496 2860.524 2842.387 2765.226 2863.577 2893.081 2885.532 2965.266
## 2019 3160.838 3112.360 3131.566 3158.608 3311.943 3250.837 3212.277 3419.289
## 2020 3321.721 3415.273 3908.308 3973.602 3853.472 3701.386 3659.323 3788.981
## 2021 3494.952 3551.997 3618.259 3654.614 3737.572 3687.401 3835.867 3882.250
## 2022 4002.746 3934.644 3799.549 3800.747 4015.570 3950.261 4389.145 4324.015
## 2023 4715.023 4822.552 4759.074 4530.264 4536.510 4205.262 4054.683 4077.895
## 2024 3922.445 3931.981 3899.277 3871.303 3867.880 4059.680 4038.110 4068.280
## Sep Oct Nov Dec
## 2012 1802.369 1805.740 1819.583 1791.352
## 2013 1917.924 1884.893 1923.471 1933.276
## 2014 1976.424 2048.908 2133.388 2351.757
## 2015 3074.955 2923.116 3007.221 3243.241
## 2016 2919.149 2938.747 3109.397 3003.960
## 2017 2917.878 2960.133 3014.114 2990.191
## 2018 3033.467 3092.217 3198.373 3216.620
## 2019 3403.978 3431.769 3412.555 3366.764
## 2020 3756.742 3832.831 3674.118 3461.582
## 2021 3823.625 3768.999 3906.607 3969.679
## 2022 4445.920 4726.851 4920.763 4793.103
## 2023 4007.122 4227.934 4035.887 3948.097
## 2024 4193.890 4266.350 4412.060 4386.390
# Calcular estadísticas descriptivas básicas
descriptive_stats <- data.frame(
Min = min(trm_ts),
Max = max(trm_ts),
Media = mean(trm_ts),
Mediana = median(trm_ts),
DesviacionEstandar = sd(trm_ts),
CoefVar = sd(trm_ts) / mean(trm_ts)
)
print(descriptive_stats)
## Min Max Media Mediana DesviacionEstandar CoefVar
## 1 1767.793 4920.763 3135.326 3110.878 864.877 0.2758491
Este análisis muestra una distribución con un rango amplio (de 1,767.79 a 4,920.76) y una media de 3,135.33, muy cercana a la mediana (3,110.88), lo que indica una distribución relativamente simétrica. La desviación estándar de 864.88 sugiere una variabilidad moderada, y el coeficiente de variación (0.2758) indica que la dispersión relativa respecto a la media es baja, lo que refleja estabilidad en los datos.
Grafico Inicial Variable 3 - Serie Original Tasa de Cambio
library(ggplot2)
library(plotly)
# Convertir la serie temporal a un vector numérico para lograr graficar con ggplot2
base_caso2$m <- as.numeric(trm_ts)
# Crear el gráfico
grafico_serie <- ggplot(base_caso2, aes(x = seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = nrow(base_caso2)),
y = m)) +
geom_line(color = "grey", linewidth = 0.4) + # Cambiado 'size' por 'linewidth'
geom_point(color = "black", size = 0.1) +
ggtitle("Variable 3: Serie original - Tasa de Cambio") +
xlab("Tiempo") +
ylab("Unidad Variable 3 - Tasa de Cambio") +
theme_minimal()
ggplotly(grafico_serie)
Descomposición de la Serie Temporal Variable 3 - Tasa de Cambio
# Cargar librerías necesarias
library(ggplot2)
library(plotly)
# Descomposición de la serie temporal
stl_decomp <- stl(trm_ts, s.window = "periodic")
# Convertir la descomposición a un data frame para graficar con ggplot2
stl_df <- data.frame(
Time = rep(time(trm_ts), 4), # Tiempo repetido para cada componente
Value = c(stl_decomp$time.series[, "seasonal"],
stl_decomp$time.series[, "trend"],
stl_decomp$time.series[, "remainder"],
trm_ts),
Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(trm_ts))
)
# Crear gráfico con ggplot2
p <- ggplot(stl_df, aes(x = Time, y = Value, color = Component)) +
geom_line() +
facet_wrap(~Component, scales = "free_y", ncol = 1) +
theme_minimal() +
labs(title = "Variable 3. Descomposicion de la Tasa de Cambio",
x = "Tiempo",
y = "Valor")
# Convertir a gráfico interactivo con plotly
ggplotly(p)
La tendencia de la tasa de cambio muestra un crecimiento sostenido desde 2015, con picos de volatilidad en períodos de incertidumbre macroeconómica. Este comportamiento impacta directamente los costos de importación de insumos y productos terminados, afectando la competitividad del sector de la construcción. Para Grupo Decor, la gestión de coberturas cambiarias y una planificación estratégica en compras internacionales serán clave para mitigar los efectos de la devaluación y garantizar estabilidad en costos y márgenes.
Grafica serie original VS ajustada por estacionalidad Variable 3 Tasa de Cambio
# Extraer los componentes de la descomposición
trm_sa <- trm_ts - stl_decomp$time.series[, "seasonal"]
# Crear vector de fechas correctamente alineado con la serie
fechas <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(trm_ts))
# Gráfico mejorado con fechas en el eje X
grafico_ajustada <- ggplot() +
geom_line(aes(x = fechas, y = trm_ts), color = "grey", size = 0.5, linetype = "solid", name = "Serie Original") +
geom_line(aes(x = fechas, y = trm_sa), color = "black", size = 0.6, linetype = "solid", name = "Serie Ajustada") +
ggtitle("Variable 3. Tasa de Cambio:Serie Original vs Serie Ajustada por Estacionalidad") +
xlab("Tiempo") +
ylab("Tasa de Cambio") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas para mejor visualización
# Convertir a gráfico interactivo
ggplotly(grafico_ajustada)
Grafica serie original vs tendencia Variable 3 - Tasa de Cambio
# Extraer la tendencia de la descomposición STL
tendencia <- stl_decomp$time.series[, "trend"]
# Gráfico interactivo de la serie original vs tendencia
grafico_tendencia <- ggplot() +
geom_line(aes(x = fechas, y = trm_ts), color = "grey", size = 0.7, linetype = "solid", name = "Serie Original") +
geom_line(aes(x = fechas, y = tendencia), color = "black", size = 0.8, linetype = "solid", name = "Tendencia") +
ggtitle("Variable 3. Tasa de Cambio:Serie Original vs Tendencia") +
xlab("Tiempo") +
ylab("Tasa de Cambio") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas del eje X para mejor visualización
# Convertir a gráfico interactivo
ggplotly(grafico_tendencia)
Variable 3 Tasa de crecimiento de la serie Original vs Tendencia Tasa de Cambio
#Cálculo de la tasa de crecimiento anual correctamente alineada
tasa_crecimiento <- (trm_ts[(13:length(trm_ts))] / trm_ts[1:(length(trm_ts) - 12)] - 1) * 100
tasa_tendencia <- (tendencia[(13:length(tendencia))] / tendencia[1:(length(tendencia) - 12)] - 1) * 100
# Crear vector de fechas corregido
fechas_corregidas <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento))
# Verificar longitudes
print(length(fechas_corregidas))
## [1] 144
print(length(tasa_crecimiento))
## [1] 144
print(length(tasa_tendencia))
## [1] 144
# Gráfico de la tasa de crecimiento anual
grafico_crecimiento <- ggplot() +
geom_line(aes(x = fechas_corregidas, y = tasa_crecimiento), color = "grey", size = 0.7) +
geom_line(aes(x = fechas_corregidas, y = tasa_tendencia), color = "black", size = 0.8, linetype = "dashed") +
ggtitle("Variable 3. Tasa de Cambio: Tasa de crecimiento de la serie Original vs Tendencia") +
xlab("Tiempo") +
ylab("% de Crecimiento Anual") +
theme_minimal()
# Convertir a gráfico interactivo
ggplotly(grafico_crecimiento)
El análisis de la tasa de crecimiento anual de la tasa de cambio en la serie Original vs Tendencia revela patrones clave que pueden impactar la planificación financiera y la estrategia cambiaria:
Alta volatilidad histórica: Se observan picos de crecimiento por encima del 40% en ciertos períodos, seguidos de caídas abruptas. Esto sugiere que la tasa de cambio ha estado influenciada por choques externos y ciclos económicos con alta sensibilidad a factores globales.
Tendencia cíclica con episodios de depreciación y recuperación: La curva suavizada muestra fases claras de apreciación y depreciación del tipo de cambio, con puntos críticos en 2015 y 2020. La tendencia más reciente indica una recuperación tras un período de caída pronunciada.
Implicaciones estratégicas
Gestión del riesgo cambiario: La volatilidad requiere fortalecer estrategias de cobertura, como contratos forward o swaps de divisas, para mitigar impactos en costos de importación y obligaciones en moneda extranjera.
Optimización de flujos financieros: En momentos de apreciación, se pueden aprovechar costos más bajos en importaciones y pago de deuda en dólares; en períodos de depreciación, es clave ajustar la estructura de costos y evaluar oportunidades de financiamiento en moneda local.
Planeación financiera proactiva: Un monitoreo continuo de la tendencia cambiaria permitirá anticipar ajustes en precios, costos operativos y estrategias de negociación con proveedores y entidades financieras.
En el contexto del Grupo Decor S.A.S., donde las importaciones juegan un papel clave en la cadena de abastecimiento de productos para el sector construcción, el uso de modelos ARIMA representa una herramienta estratégica para mejorar la planificación financiera y operativa.
A partir del análisis de la tasa de crecimiento anual de las importaciones en el Valle del Cauca, este modelo permitirá:
1.Prever tendencias y ciclos en la disponibilidad de materiales importados.
2.Optimizar la toma de decisiones sobre compras y gestión de inventarios.
3.Anticipar riesgos asociados a fluctuaciones en el comercio exterior.
4.Mejorar la negociación con proveedores, asegurando mejores costos y tiempos de entrega.
En un sector altamente dependiente de la importación de productos para remodelacion, del sector de la construcción, esta metodología facilitará la gestión eficiente del flujo de caja, la estabilización de costos y la optimización de la logística de abastecimiento, alineándose con los objetivos financieros y operacionales del Grupo Decor.
División en conjunto de entrenamiento y prueba para la variable 2 que es la elegida para pronosticar
El código siguiente divide una serie temporal (m_v_ts) en dos subconjuntos:
Conjunto de entrenamiento (train): Datos desde enero de 2012 hasta septiembre de 2024. Conjunto de prueba (test): Datos desde octubre de 2024 hasta diciembre de 2024.
Esto se hace para evaluar el desempeño de modelos de predicción en datos no vistos.
# Esta división idealmente podria se 80%-70% de los datos para entrenamiento y 20%-30% para prueba o test
# En este ejemplo el conjunto de entrenamiento es: Enero 2012-Septiembre 2024 y el conjunto de prueba o test: noviembre 2024-diciembre 2024
train_size <- length(m_v_ts) - 3 # Se deja fuera los últimos 3 valores para usarlos como set de prueba.
train_ts <- window(m_v_ts, end = c(2024, 9)) # Entrenamiento hasta septiembre 2024
test_ts <- window(m_v_ts, start = c(2024, 10)) # Prueba inicia desde oct2024
A continuación se aplica el test ADF para validar estacionariedad en el conjunto de entrenamiento de la Variable 1, que es la elegida para pronosticar:
library(tseries)
# Prueba de estacionariedad con Augmented Dickey-Fuller (ADF)
adf_test <- adf.test(train_ts) #Se aplica el test ADF a la variable 1 (conjunto de entrenamiento)
print(adf_test) # se muestra el resultado del test
##
## Augmented Dickey-Fuller Test
##
## data: train_ts
## Dickey-Fuller = -2.3984, Lag order = 5, p-value = 0.4103
## alternative hypothesis: stationary
El test ADF en la variable 2 arrojó un p-value igual a 0.4103, este valor es mayor a 0.05, por tanto la serie es no estacionaria. De ese modo se debe ejecutar el código siguiente para diferenciar una vez la variable 2 y luego volver a aplicar el test ADF a esa serie diferenciada una vez:
#Se crea un nuevo objeto o variable que se llama train_diff, en donde se diferencia la variable 2 , una sola vez:
train_diff <- diff(train_ts, differences = 1)
A continuación se aplica la diferenciación logarítmica y la variable 2 u objeto ahora se llama train_diff_log:
# Si la serie no es estacionaria (p-valor > 0.05), aplicar diferenciación
train_diff_log <- diff(log(train_ts), differences = 1)
Ahora graficamos la serie original Vs la serie diferenciada una vez con logaritmo
# Graficar la serie original en un gráfico separado
p2 <- ggplot(data.frame(Tiempo = time(train_ts), m = as.numeric(train_ts)), aes(x = Tiempo, y = m)) +
geom_line(color = "blue") +
ggtitle("Variable 2 Importaciones del valle:Serie Original") +
xlab("Tiempo") + ylab("Variable 2")
ggplotly(p2) # Convertir en gráfico interactivo
# Graficar la serie diferenciada en un gráfico separado
p3 <- ggplot(data.frame(Tiempo = time(train_ts)[-1], micro_Diff = as.numeric(train_diff_log)), aes(x = Tiempo, y = micro_Diff)) +
geom_line(color = "red") +
ggtitle("Variable 2 Importaciones Valle:Serie Estacionaria (Una diferenciación en logaritmo)") +
xlab("Tiempo") + ylab("Variable 2 diferenciada")
ggplotly(p3) # Convertir en gráfico interactivo
# Segunda prueba de estacionariedad sobre la serie diferenciada en niveles
adf_test_diff <- adf.test(train_diff)
print(adf_test_diff)
##
## Augmented Dickey-Fuller Test
##
## data: train_diff
## Dickey-Fuller = -5.3256, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
# Segunda prueba de estacionariedad sobre la serie diferenciada en logaritmo
adf_test_diff_log <- adf.test(train_diff_log)
print(adf_test_diff_log)
##
## Augmented Dickey-Fuller Test
##
## data: train_diff_log
## Dickey-Fuller = -5.4594, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
En el test ADF se muestra que el valor que puede tomar d=1:
El p-value ya es menor a 0.05 con una primera diferencia en ambos casos: niveles o con logaritmo natural. Por tanto el valor que puede tomar d es igual a 1
La anterior gráfica muestra la serie de importaciones del Valle ajustada para hacerla estacionaria, lo que permite usar un Modelo ARIMA para pronosticar tendencias en la disponibilidad y costos de insumos clave para la construcción. Para Grupo Decor S.A.S., esto facilita una mejor planificación de compras, optimización de flujo de caja y estrategias de negociación con proveedores, reduciendo riesgos en costos y abastecimiento.
En el código siguiente se crean los correlogramas para determinar los posibles valores que puedeo tomar el parámetro p** y q:**
library(forecast)
# Graficar ACF y PACF
acf_plot <- ggAcf(train_diff_log, lag.max = 6) + ggtitle("Autocorrelation Function (ACF)-Determinar q")
pacf_plot <- ggPacf(train_diff_log, lag.max = 6) + ggtitle("Partial Autocorrelation Function (PACF)-Determinar p")
ggplotly(acf_plot)
ggplotly(pacf_plot)
Interpretación correlogramas
Se puede observar que los valores que podrian tomar p y q serian:
p=1* p=2 q=1* q=2 q=3 (P optimo=2) (q óptimo=2)
El modelo óptimo para esta variable seria (2,1,2)
Sin embargo, el análisis sugiere que los valores óptimos son p = 2 y q = 2, lo que indica que la serie tiene una dependencia significativa con sus dos rezagos anteriores en ambos componentes.
Este ajuste permitirá a Grupo Decor S.A.S. generar proyecciones más precisas sobre las importaciones del sector construcción, mejorando la toma de decisiones financieras y operativas.
# Cálculo manual de modelo ARIMA
manual_arima_model <- Arima(train_ts, order = c(2,1,2)) #Se va a estimar un modelo Arima de orden (2,1,2)
summary(manual_arima_model)
## Series: train_ts
## ARIMA(2,1,2)
##
## Coefficients:
## ar1 ar2 ma1 ma2
## -0.6376 -0.3607 -0.0804 -0.1729
## s.e. 0.2379 0.1096 0.2458 0.1890
##
## sigma^2 = 2.019e+15: log likelihood = -2892.4
## AIC=5794.79 AICc=5795.2 BIC=5809.91
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set -999102.4 44192176 32025269 -1.35091 8.727464 0.5796215 0.01797371
El modelo ARIMA(2,1,2) fue ajustado a la serie de tiempo de las importaciones del Valle, obteniendo los siguientes coeficientes:
AR(2): Captura la relación con los dos periodos anteriores.
MA(2): Modela los errores de los dos periodos previos.
Evaluación del Modelo AIC y BIC: AIC = 5794.79 y BIC = 5809.91, lo que indica un balance aceptable entre ajuste y complejidad del modelo.
Errores de entrenamiento: RMSE: $44.19M (error cuadrático medio). MEA: $32.02M, lo que sugiere una precisión moderada en las predicciones.
Autocorrelación de residuos (ACF1): 0.0179, indicando que los residuos no tienen una correlación significativa, lo que es positivo.
Implicaciones para Grupo Decor S.A.S. Este modelo permitirá pronosticar las importaciones del sector construcción con un margen de error aceptable, ayudando a planificar compras, evaluar costos y anticipar fluctuaciones en la disponibilidad de materiales. Sin embargo, se recomienda revisar otros modelos o incluir variables externas para mejorar la precisión.
Significancia de coefientes
library(lmtest)
# Evaluar la significancia estadística de los coeficientes del modelo ARIMA
coeftest(manual_arima_model)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.637576 0.237897 -2.6800 0.0073612 **
## ar2 -0.360714 0.109602 -3.2911 0.0009978 ***
## ma1 -0.080417 0.245792 -0.3272 0.7435370
## ma2 -0.172880 0.189025 -0.9146 0.3604072
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Interpretación significancia coeficientes
AR(1) = -0.6376, p-value = 0.0074 (significativo a nivel 1%) → El coeficiente es significativo, lo que indica que la primera defasada de la serie tiene un impacto importante en la predicción.
AR(2) = -0.3607, p-value = 0.0010 (altamente significativo) → La segunda defasada también tiene un impacto relevante en la serie.
MA(1) = -0.0804, p-value = 0.7435 (no significativo) → No tiene un efecto estadísticamente significativo en la serie, podría eliminarse en una nueva especificación del modelo.
MA(2) = -0.1729, p-value = 0.3604 (no significativo) → No es significativo, lo que sugiere que el componente de media móvil de orden 2 no aporta valor adicional.
Conclusión para Grupo Decor SAS Dado que los coeficientes de los términos AR son significativos, el modelo muestra que la evolución de las importaciones del sector construcción en el Valle del Cauca depende principalmente de su comportamiento pasado (memoria). Sin embargo, los términos MA no aportan información adicional significativa.
checkresiduals(manual_arima_model)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(2,1,2)
## Q* = 21.802, df = 20, p-value = 0.3513
##
## Model df: 4. Total lags used: 24
Interpretación del Test de Ljung-Box para el Modelo ARIMA(2,1,2)
Q = 21.802, df = 20, p-value = 0.3513* Un p-value > 0.05 sugiere que no hay evidencia suficiente para rechazar la hipótesis nula de que los residuos son ruido blanco. Esto significa que el modelo ARIMA(2,1,2) capta correctamente la estructura de la serie y no deja autocorrelación remanente significativa.
Conclusión para Grupo Decor SAS El modelo ARIMA(2,1,2) parece adecuado para predecir las importaciones del sector construcción en el Valle del Cauca, ya que sus residuos se comportan como un proceso aleatorio. Esto indica que el modelo puede proporcionar pronósticos confiables para la planeación financiera y logística de Grupo Decor SAS en función del comportamiento pasado de las importaciones.
1. Serie de residuos (Gráfico Superior)
Se observa que los residuos fluctúan alrededor de cero, lo que indica que el modelo no deja un patrón evidente sin modelar. Sin embargo, hay algunos picos extremos, lo que podría indicar eventos atípicos o variaciones bruscas en las importaciones
2. Función de Autocorrelación (gráfico inferior izquierdo, ACF de residuos
La función de autocorrelación (ACF) muestra que la mayoría de los rezagos están dentro del intervalo de confianza, lo que sugiere que no hay autocorrelación significativa en los residuos. Esto confirma que el modelo ha capturado la estructura de la serie de tiempo de manera efectiva.
3. Histograma de residuos con ajuste normal (gráfico inferior derecho)
La distribución de los residuos es aproximadamente normal, aunque con ligeras colas largas que sugieren la presencia de valores extremos. La curva de densidad (en rojo) confirma que los residuos se distribuyen de manera simétrica, lo que valida la suposición de normalidad para el modelo
El modelo ARIMA(2,1,2) es adecuado para predecir las importaciones del sector construcción en el Valle del Cauca, ya que sus residuos no presentan autocorrelación significativa y siguen una distribución aproximadamente normal. Sin embargo, se deben analizar los eventos atípicos observados para comprender su impacto en la planificación financiera y logística de la empresa.
Pronóstico en el test de prueba (oct, nov y dic 2024) y gráfico
#Aquí se crea el pronóstico con el modelo ARIMA manual y se guarda en una nueva riable u objeto "manual_forecast"
manual_forecast <- forecast(manual_arima_model, h = length(test_ts)) #Se generan tantos pronósticos como valores tenga el conjunto de prueba (test_ts).
# Crear dataframe para gráfico interactivo del pronóstico manual
manual_forecast_data <- data.frame(Tiempo = time(manual_forecast$mean), ## Extrae las fechas del pronóstico
Pronostico = as.numeric(manual_forecast$mean), ## Valores pronosticados
Observado = as.numeric(test_ts)) ## Valores reales de la serie
# Graficar pronóstico manual junto con los valores observados reales
p_manual <- ggplot(manual_forecast_data, aes(x = Tiempo)) +
geom_line(aes(y = Pronostico, color = "Pronóstico Manual")) +
geom_line(aes(y = Observado, color = "Observado")) +
ggtitle("Variable 2 Importaciones Valle:Pronóstico Manual vs Observado") +
xlab("Tiempo") + ylab("Variable2")
ggplotly(p_manual)
Análisis de la Gráfica: Pronóstico Manual vs Observado
Desviación del Pronóstico vs. Observado: El modelo subestima las importaciones, lo que indica que factores no capturados (como eventos económicos, cambios en políticas comerciales o dinámicas del sector construcción) pueden estar impactando los resultados.
Relevancia para la Gestión Financiera: Dado que Grupo Decor depende de la importación de los productos que comercializa para su operación, este análisis sugiere la necesidad de revisar la estrategia de abastecimiento y financiamiento ante posibles fluctuaciones en los costos y disponibilidad de materiales.
Plan de Acción
Estrategia de Compras: Evaluar proveedores alternativos y negociar precios con base en proyecciones más conservadoras.
Gestión de Liquidez: Preparar líneas de crédito flexibles para mitigar riesgos de variabilidad en costos de importación.
Este análisis apoya la toma de decisiones estratégicas en importaciones, flujo de caja y planificación de costos, fortaleciendo la sostenibilidad financiera de Grupo Decor.
Métricas de evaluación del modelo manual dentro del periodo de prueba (oct,nov y dic2024
# Calcular métricas de evaluación del modelo manual
mae_manual <- mean(abs(manual_forecast$mean - test_ts), na.rm = TRUE)
rmse_manual <- sqrt(mean((manual_forecast$mean - test_ts)^2, na.rm = TRUE))
# Mostrar métricas de evaluación del modelo manual
cat("MAE Manual: ", mae_manual, "\n")
## MAE Manual: 40143154
cat("RMSE Manual: ", rmse_manual, "\n")
## RMSE Manual: 44041947
Comparación del Modelo ARIMA vs. Pronóstico Manual
Al evaluar el desempeño del modelo ARIMA(2,1,2) frente al pronóstico manual en la predicción de importaciones del Valle para Grupo Decor, observamos:
🔹 Error Absoluto Medio (MAE) ARIMA: 32,025,269 Manual: 40,143,154 El modelo ARIMA presenta un menor MAE, lo que indica que, en promedio, sus predicciones están más cerca de los valores reales en comparación con el pronóstico manual.
🔹 Raíz del Error Cuadrático Medio (RMSE) ARIMA: 44,192,176 Manual: 44,041,947 Ambos métodos tienen un RMSE similar, lo que sugiere que los errores extremos afectan de manera comparable las predicciones en ambos enfoques.
Conclusión y Recomendaciones
📌 Precisión del Modelo: ARIMA es más preciso en términos de MAE, pero su RMSE indica que aún hay errores significativos en ciertas predicciones.
📌 Optimización: Se recomienda mejorar el modelo considerando factores externos (tipo de cambio, demanda del sector, políticas comerciales) para reducir errores.
📌 Estrategia en Grupo Decor: Dado que las importaciones son críticas para la operación, una mejor precisión en las predicciones permitirá optimizar compras y gestión de inventario, reduciendo costos financieros y asegurando abastecimiento oportuno.
A continuación se calcula la Tabla de pronóstico modelo manual VS los datos reales u observado en oct,nov y dic2024
# Cargar librerías necesarias
library(forecast)
library(dplyr)
# Generar pronóstico con el modelo ARIMA identificado
arima_forecast_manual <- forecast(manual_arima_model, h = length(test_ts))
# Crear un dataframe con los valores observados y pronosticados
forecast_table_manual <- data.frame(
Tiempo = time(arima_forecast_manual$mean), # Extraer las fechas del pronóstico
Observado = as.numeric(test_ts), # Valores reales
Pronosticado = as.numeric(arima_forecast_manual$mean) # Valores pronosticados
)
# Mostrar la tabla
print(forecast_table_manual)
## Tiempo Observado Pronosticado
## 1 2024.750 366814925 338693404
## 2 2024.833 412559322 346810945
## 3 2024.917 366946648 340387084
El pronóstico de importaciones para Grupo Decor SAS en los últimos meses de 2024 muestra una subestimación constante en comparación con los valores observados, con un Error Medio Absoluto (MAE) de $40M y un Error Cuadrático Medio (RMSE) de $44M.
Hallazgos Clave
📌 Desviaciones significativas en noviembre: El modelo no capturó el pico observado en este mes, lo que indica que factores adicionales pueden estar influyendo en la volatilidad de las importaciones.
📌 Tendencia general ajustada, pero con margen de mejora: Aunque la serie sigue una dirección similar a la real, la diferencia absoluta en los valores sugiere que el modelo necesita refinamientos para una mayor precisión.
Implicaciones Financieras para Grupo Decor SAS
🔹 Planificación de flujo de caja: Al haber una subestimación, podría haber riesgo de insuficiencia de liquidez si las importaciones reales superan las proyecciones.
🔹 Optimización de financiamiento: Dado que el modelo proyecta valores más bajos, se recomienda revisar las necesidades de crédito para evitar posibles desbalances en las obligaciones financieras.
🔹 Ajuste en estrategias de compra: Es clave evaluar si la demanda está siendo subestimada y ajustar pedidos de inventario en función de proyecciones más precisas.
Ahora pronosticamos fuera del periodo de análisis: Enero 2025
Es decir, le sumamos al periodo de prueba (oct,nov,dic2024) una observación más (enero 2025). Es decir, se estan pronosticando 4 observaciones o meses:
# Cargar librerías necesarias
library(forecast)
# Hacer un pronóstico para el siguiente mes (1 período adicional)
next_forecast_manual <- forecast(manual_arima_model, h = length(test_ts) + 1)
# Extraer el pronóstico del próximo mes
next_month_forecast_manual <- data.frame(
Tiempo = time(next_forecast_manual$mean), # Extraer la fecha del pronóstico
Pronostico = as.numeric(next_forecast_manual$mean) # Valor pronosticado
)
# Mostrar el pronóstico completo
print(next_month_forecast_manual)
## Tiempo Pronostico
## 1 2024.750 338693404
## 2 2024.833 346810945
## 3 2024.917 340387084
## 4 2025.000 341554668
# Extraer solo el valor del trimestre adicional (último de la tabla)
next_month <- tail(next_month_forecast_manual, 1)
print(paste("Pronóstico para enero 2025:", next_month$Tiempo, "=", next_month$Pronostico))
## [1] "Pronóstico para enero 2025: 2025 = 341554668.316035"
Pronóstico de Importaciones para Grupo Decor SAS - Enero 2025
📌 Proyección estimada: $341.55 millones
📌 Comparación con diciembre 2024: Se mantiene una estabilidad en las importaciones proyectadas, con valores similares a los meses previos.
Consideraciones Claves
✅ Planeación Financiera: Se recomienda asegurar disponibilidad de flujo de caja para cubrir esta proyección.
✅ Revisión de Factores Externos: Cambios en política comercial, tasas de cambio y demanda del sector podrían impactar esta proyección.
Análisis del Impacto de las Importaciones
El análisis de los datos de octubre a diciembre de 2024 muestra que el modelo manual de pronóstico ha subestimado los valores reales de importaciones. La desviación promedio entre los valores observados y pronosticados es significativa, con un MAE de $40.14 millones y un RMSE de $44.04 millones.
Pronóstico enero 2025: $341.55 millones
Variabilidad observada: Se detectan fluctuaciones que sugieren la necesidad de ajustes en la metodología de pronóstico.
Tipo de Cambio: La volatilidad del dólar afecta el costo de venta de los productos importados
Demanda y Tendencias del Mercado: Un aumento en la demanda de productos puede generar desabastecimiento si las importaciones no se planifican adecuadamente.
Políticas Comerciales: Cambios en aranceles y regulaciones aduaneras pueden influir en los tiempos y costos de importación.
Disponibilidad de Inventario: Un desbalance entre el stock y la demanda puede generar costos innecesarios por almacenamiento o falta de productos.
3.1 Decisiones Basadas en las Señales Extraídas
Optimizar la Planificación de Compras: Ajustar los volúmenes de importación según los pronósticos de demanda y tendencias de mercado.
Negociación con Proveedores: Asegurar precios competitivos y condiciones de pago favorables para mitigar riesgos cambiarios.
Gestionar Inventarios de Forma Dinámica: Implementar un sistema de monitoreo en tiempo real para evitar sobrestock o desabastecimiento.
Asegurar Liquidez para Importaciones: Gestionar estrategias de financiamiento y cobertura cambiaria para reducir impactos por fluctuaciones de divisas.
3.2 Ajuste de Estrategias en Función del Pronóstico de Corto Plazo
Diversificación de Proveedores: Reducir dependencia de un solo mercado de importación y buscar opciones más estables.
Estrategias de Precio y Promoción: Ajustar políticas de precios según la evolución de costos de importación para mantener competitividad.
Monitoreo de Indicadores Macroeconómicos: Establecer alertas tempranas para tomar decisiones proactivas sobre cambios en costos de importación.
Conclusión
Las importaciones son un factor clave en la operación de Grupo Decor SAS, y su correcta planificación puede marcar la diferencia entre costos eficientes o ineficiencias operativas. Con un ajuste en los modelos de pronóstico, una gestión estratégica de proveedores y un monitoreo activo del entorno económico, la empresa puede mejorar su rentabilidad y estabilidad operativa en el corto y mediano plazo.
#Aplicacion de Otros Modelos
Identificación automática del modelo ARIMA
El modelo automático identificado es (2,1,1). Si se compara el AIC o BIC de este modelo frente el modelo manual (2,1,2), se obtiene un pronostico similar al manual aplicado anteriormente.
library(forecast)
# Ajustar un modelo ARIMA automático sin estacionalidad, por eso se pone seasonal=FALSE
auto_arima_model_no_seasonal <- auto.arima(train_ts, seasonal = FALSE)
# Mostrar el modelo seleccionado
summary(auto_arima_model_no_seasonal)
## Series: train_ts
## ARIMA(2,1,1)
##
## Coefficients:
## ar1 ar2 ma1
## -0.4329 -0.3707 -0.2954
## s.e. 0.1636 0.1140 0.1732
##
## sigma^2 = 2.014e+15: log likelihood = -2892.72
## AIC=5793.45 AICc=5793.72 BIC=5805.54
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -974377.1 44289846 32431213 -1.339903 8.838852 0.5869686
## ACF1
## Training set 0.02453598
Significancia de coeficientes
library(lmtest)
# Evaluar la significancia estadística de los coeficientes del modelo ARIMA
coeftest(auto_arima_model_no_seasonal)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.43288 0.16361 -2.6457 0.008151 **
## ar2 -0.37066 0.11399 -3.2516 0.001148 **
## ma1 -0.29540 0.17321 -1.7054 0.088111 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Ajuste del modelo ARIMA(4,1,2) automático sin parte estacional y crearlo como variable darima_auto para luego poder graficarlo y crear la tabla
darima_auto <- Arima(train_ts,
order = c(2, 1, 1)) # Especificamos directamente (p=2, d=1, q=1)
# Mostrar resumen del modelo ajustado
summary(darima_auto)
## Series: train_ts
## ARIMA(2,1,1)
##
## Coefficients:
## ar1 ar2 ma1
## -0.4329 -0.3707 -0.2954
## s.e. 0.1636 0.1140 0.1732
##
## sigma^2 = 2.014e+15: log likelihood = -2892.72
## AIC=5793.45 AICc=5793.72 BIC=5805.54
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -974377.1 44289846 32431213 -1.339903 8.838852 0.5869686
## ACF1
## Training set 0.02453598
# Diagnóstico del modelo (los residuos deben ser ruido blanco)
checkresiduals(darima_auto) # Verificar si los residuos son aleatorios y no presentan patrones
##
## Ljung-Box test
##
## data: Residuals from ARIMA(2,1,1)
## Q* = 21.497, df = 21, p-value = 0.429
##
## Model df: 3. Total lags used: 24
Pronóstico modelo ARIMA automático (2,1,1)
# Generar pronóstico para el conjunto de prueba
forecast_arima_auto <- forecast(darima_auto, h = length(test_ts)) # Predecir los valores futuros
# Crear dataframe para gráfico interactivo del pronóstico
forecast_data_auto <- data.frame(Tiempo = time(forecast_arima_auto$mean),
Pronostico = as.numeric(forecast_arima_auto$mean),
Observado = as.numeric(test_ts))
# Graficar pronóstico junto con los valores observados reales
p4auto <- ggplot(forecast_data_auto, aes(x = Tiempo)) +
geom_line(aes(y = Pronostico, color = "Pronostico")) +
geom_line(aes(y = Observado, color = "Observado")) +
ggtitle("Pronostico vs Observado") +
xlab("Tiempo") + ylab("variable2")
ggplotly(p4auto) # Convertir el gráfico en interactivo
El modelo automático (2,1,1) parece pronosticar mejor dentro de prueba. Hay un sobre ajuste, pero se capturan muy bien los puntos de quiebre. Es un modelo tentativo adecuado para pronpostico fuera de muestra o a futuro.
# Cargar librerías necesarias
library(forecast)
library(dplyr)
# Generar pronóstico con el modelo ARIMA identificado
arima_forecast_auto <- forecast(auto_arima_model_no_seasonal, h = length(test_ts))
# Crear un dataframe con los valores observados y pronosticados
forecast_table_auto <- data.frame(
Tiempo = time(arima_forecast_auto$mean), # Extraer las fechas del pronóstico
Observado = as.numeric(test_ts), # Valores reales
Pronosticado = as.numeric(arima_forecast_auto$mean) # Valores pronosticados
)
# Mostrar la tabla
print(forecast_table_auto)
## Tiempo Observado Pronosticado
## 1 2024.750 366814925 335050277
## 2 2024.833 412559322 343387844
## 3 2024.917 366946648 339846323
Ahora pronosticamos fuera del periodo de análisis
Es decir, le sumamos al periodo de prueb auna observación más. Es decir, se estan pronosticando 4 observaciones o trimestres.
# Cargar librerías necesarias
library(forecast)
# Hacer un pronóstico para el siguiente trimestre (1 período adicional)
next_forecast_auto <- forecast(auto_arima_model_no_seasonal, h = length(test_ts) + 1)
# Extraer el pronóstico del próximo trimestre
next_month_forecast_auto <- data.frame(
Tiempo = time(next_forecast_auto$mean), # Extraer la fecha del pronóstico
Pronostico = as.numeric(next_forecast_auto$mean) # Valor pronosticado
)
# Mostrar el pronóstico completo
print(next_month_forecast_auto)
## Tiempo Pronostico
## 1 2024.750 335050277
## 2 2024.833 343387844
## 3 2024.917 339846323
## 4 2025.000 338288969
# Extraer solo el valor del trimestre adicional (último de la tabla)
next_month <- tail(next_month_forecast_auto, 1)
print(paste("Pronóstico para enero 2025:", next_month$Tiempo, "=", next_month$Pronostico))
## [1] "Pronóstico para enero 2025: 2025 = 338288968.82097"
Al pronosticar con el modelo Sarima con los coeficientes ARIMA(0,1,3)(1,0,1)[12] El gráfico muestra una discrepancia significativa entre los valores pronosticados y los observados. Mientras que los valores reales (línea roja) presentan una tendencia ascendente y luego descendente, el modelo SARIMA (línea azul) mantiene una tendencia más estable y subestimada.
# Identificación automática del mejor modelo ARIMA
auto_arima_model <- auto.arima(train_ts) # Busca automáticamente los mejores parámetros del modelo ARIMA
print(auto_arima_model)
## Series: train_ts
## ARIMA(0,1,3)(1,0,1)[12]
##
## Coefficients:
## ma1 ma2 ma3 sar1 sma1
## -0.6765 -0.0771 0.3159 -0.2354 0.5366
## s.e. 0.0816 0.1107 0.0953 0.2402 0.2063
##
## sigma^2 = 1.93e+15: log likelihood = -2889.24
## AIC=5790.48 AICc=5791.06 BIC=5808.62
# Ajuste del modelo ARIMA con los parámetros encontrados
darima <- Arima(train_ts,
order = c(0, # p
1, # d
3), # q
seasonal = list(order = c(1, # P
0, # D
1), # Q
period = 12)) # m (periodicidad estacional)
# Mostrar resumen del modelo ajustado
summary(darima)
## Series: train_ts
## ARIMA(0,1,3)(1,0,1)[12]
##
## Coefficients:
## ma1 ma2 ma3 sar1 sma1
## -0.6765 -0.0771 0.3159 -0.2354 0.5366
## s.e. 0.0816 0.1107 0.0953 0.2402 0.2063
##
## sigma^2 = 1.93e+15: log likelihood = -2889.24
## AIC=5790.48 AICc=5791.06 BIC=5808.62
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -405534.2 43060474 32103516 -0.9805592 8.757817 0.5810377
## ACF1
## Training set -0.01407914
# Diagnóstico del modelo (los residuos deben ser ruido blanco)
checkresiduals(darima) # Verificar si los residuos son aleatorios y no presentan patrones
##
## Ljung-Box test
##
## data: Residuals from ARIMA(0,1,3)(1,0,1)[12]
## Q* = 14.067, df = 19, p-value = 0.7798
##
## Model df: 5. Total lags used: 24
# Generar pronóstico para el conjunto de prueba
forecast_arima <- forecast(darima, h = length(test_ts)) # Predecir los valores futuros
# Crear dataframe para gráfico interactivo del pronóstico
forecast_data <- data.frame(Tiempo = time(forecast_arima$mean),
Pronostico = as.numeric(forecast_arima$mean),
Observado = as.numeric(test_ts))
# Graficar pronóstico junto con los valores observados reales
p4 <- ggplot(forecast_data, aes(x = Tiempo)) +
geom_line(aes(y = Pronostico, color = "Pronóstico")) +
geom_line(aes(y = Observado, color = "Observado")) +
ggtitle("Pronóstico vs Observado") +
xlab("Tiempo") + ylab("Ingresos")
ggplotly(p4) # Convertir el gráfico en interactivo
# Cargar librerías necesarias
library(forecast)
library(dplyr)
# Generar pronóstico con el modelo ARIMA identificado
arima_forecast <- forecast(auto_arima_model, h = length(test_ts))
# Crear un dataframe con los valores observados y pronosticados
forecast_table <- data.frame(
Tiempo = time(arima_forecast$mean), # Extraer las fechas del pronóstico
Observado = as.numeric(test_ts), # Valores reales
Pronosticado = as.numeric(arima_forecast$mean) # Valores pronosticados
)
# Mostrar la tabla
print(forecast_table)
## Tiempo Observado Pronosticado
## 1 2024.750 366814925 334675684
## 2 2024.833 412559322 333296547
## 3 2024.917 366946648 331938192
Ahora pronosticamos fuera del periodo de análisis
Es decir, le sumamos al periodo de prueba una observación más. Es decir, se estan pronosticando 4 observaciones o trimestres.
# Cargar librerías necesarias
library(forecast)
# Hacer un pronóstico para el siguiente trimestre (1 período adicional)
next_forecast <- forecast(auto_arima_model, h = length(test_ts) + 1)
# Extraer el pronóstico del próximo trimestre
next_month_forecast <- data.frame(
Tiempo = time(next_forecast$mean), # Extraer la fecha del pronóstico
Pronostico = as.numeric(next_forecast$mean) # Valor pronosticado
)
# Mostrar el pronóstico completo
print(next_month_forecast)
## Tiempo Pronostico
## 1 2024.750 334675684
## 2 2024.833 333296547
## 3 2024.917 331938192
## 4 2025.000 341776857
# Extraer solo el valor del trimestre adicional (último de la tabla)
next_month <- tail(next_month_forecast, 1)
print(paste("Pronóstico para el primer mes de 2025:", next_month$Tiempo, "=", next_month$Pronostico))
## [1] "Pronóstico para el primer mes de 2025: 2025 = 341776856.693256"