# install.packages(c("readxl", "tidyverse", "lubridate",
#                    "ggplot2", "knitr", "kableExtra"))

# Cargar librerías
library(readxl)
## Warning: package 'readxl' was built under R version 4.5.3
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.5.3
## Warning: package 'ggplot2' was built under R version 4.5.3
## Warning: package 'tibble' was built under R version 4.5.3
## Warning: package 'tidyr' was built under R version 4.5.3
## Warning: package 'readr' was built under R version 4.5.3
## Warning: package 'purrr' was built under R version 4.5.3
## Warning: package 'dplyr' was built under R version 4.5.3
## Warning: package 'stringr' was built under R version 4.5.3
## Warning: package 'forcats' was built under R version 4.5.3
## Warning: package 'lubridate' was built under R version 4.5.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.1     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.3     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(lubridate)
library(ggplot2)
library(knitr)
## Warning: package 'knitr' was built under R version 4.5.3
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.5.3
## 
## Adjuntando el paquete: 'kableExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     group_rows
base_original <- read_excel(
  "C:/Users/danie/Downloads/Base 4 Sectorial.xlsx",
  sheet = "SECTORIAL"
)
# Primeras seis observaciones
head(base_original)
## # 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>, …

##Reconocimiento de la estructura de los datos

# Dimensiones de la base de datos
dim(base_original)
## [1] 168  62
# Número de observaciones
nrow(base_original)
## [1] 168
# Número de variables
ncol(base_original)
## [1] 62
# Nombres de las variables
names(base_original)
##  [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"
# Estructura de las variables
str(base_original)
## tibble [168 × 62] (S3: tbl_df/tbl/data.frame)
##  $ FECHA          : POSIXct[1:168], format: "2012-01-01" "2012-02-01" ...
##  $ PNCEM          : num [1:168] 868474 865408 998847 852138 919675 ...
##  $ DECEM          : num [1:168] 823284 846615 950453 789542 904691 ...
##  $ CONCRETO       : num [1:168] 526136 584897 634905 550290 639649 ...
##  $ LICC           : num [1:168] 1498909 1728147 1425267 1388134 1960736 ...
##  $ POLLO          : num [1:168] 91722 94142 88748 92013 93279 ...
##  $ HUEVO          : num [1:168] 52929 52870 52979 52633 52466 ...
##  $ PNCAFE         : num [1:168] 535 571 576 580 689 714 668 565 519 653 ...
##  $ PICAFE         : num [1:168] 874863 826220 727565 703033 670335 ...
##  $ PECAFE         : num [1:168] 256 246 226 215 210 ...
##  $ XCAF           : num [1:168] 197296 186693 203636 121442 167644 ...
##  $ M              : num [1:168] 4187750 4291881 4632763 4100547 5088029 ...
##  $ X              : num [1:168] 4785773 4999318 5712355 5010929 5403375 ...
##  $ TRM            : num [1:168] 1848 1787 1768 1774 1796 ...
##  $ M_CEREAL       : num [1:168] 130489 170760 150306 112970 171029 ...
##  $ M_CERAMICO     : num [1:168] 22663 22218 17682 19527 21924 ...
##  $ M_FARM         : num [1:168] 134163 144190 158930 151310 182270 ...
##  $ X_COMB         : num [1:168] 3313842 3319381 3870611 3522192 3529123 ...
##  $ X_AZU          : num [1:168] 63274 63131 78704 59114 53263 ...
##  $ X_PREALIM      : num [1:168] 28018 30393 29172 31688 28145 ...
##  $ X_FARM         : num [1:168] 30866 31202 35074 31236 47115 ...
##  $ X_QUIM         : num [1:168] 25716 27502 30545 31428 28830 ...
##  $ X_PAPEL        : num [1:168] 38768 32520 37830 31124 32192 ...
##  $ X_CERAMICO     : num [1:168] 11392 15168 14770 14160 14491 ...
##  $ IPIR           : num [1:168] 84.2 88 94.1 82.6 94.3 ...
##  $ IPIR_PAPEL     : num [1:168] NA NA NA NA NA NA NA NA NA NA ...
##  $ IPIR_FARM      : num [1:168] NA NA NA NA NA NA NA NA NA NA ...
##  $ IPIR_PREALIM   : num [1:168] NA NA NA NA NA NA NA NA NA NA ...
##  $ MIN            : num [1:168] 69 67.8 73.3 67 71 ...
##  $ ICC            : num [1:168] 32.7 26.8 24.4 26.6 26.5 20.6 23.2 18.1 25 25.6 ...
##  $ VEH            : num [1:168] NA NA NA NA NA NA NA NA NA NA ...
##  $ CART           : num [1:168] 2.80e+14 2.81e+14 2.84e+14 2.87e+14 2.91e+14 ...
##  $ DAH            : num [1:168] 1.26e+14 1.30e+14 1.28e+14 1.25e+14 1.27e+14 ...
##  $ ENER           : num [1:168] 1595 1545 1719 1575 1687 ...
##  $ BRENT          : num [1:168] 111 120 125 120 111 ...
##  $ IPC            : num [1:168] 76.8 77.2 77.3 77.4 77.7 ...
##  $ TO             : num [1:168] 59.7 60.5 61.5 61.2 61.5 ...
##  $ TD             : num [1:168] 12.8 12.1 10.5 11.1 11 ...
##  $ ISE            : num [1:168] 81.7 84.5 87.8 84.1 87.9 ...
##  $ CAN            : num [1:168] 1685584 1973654 2083470 1406868 1233631 ...
##  $ AZUCAR         : num [1:168] 148483 192196 202408 134532 107659 ...
##  $ CEM_V          : num [1:168] 61149 66969 72052 63652 71515 ...
##  $ COR_V          : num [1:168] 110 113 121 112 127 ...
##  $ M_V            : num [1:168] 3.55e+08 5.56e+08 4.09e+08 3.45e+08 4.12e+08 ...
##  $ X_V            : num [1:168] 1.60e+08 1.80e+08 1.91e+08 1.61e+08 1.99e+08 ...
##  $ IPIR_V         : num [1:168] 80.7 89.7 97.1 82.7 90.8 ...
##  $ MIN_V          : num [1:168] NA NA NA NA NA NA NA NA NA NA ...
##  $ ICC_V          : num [1:168] 20.6 16.2 21.4 35.5 28 ...
##  $ VEH_V          : num [1:168] 2379 2654 3155 2319 2507 ...
##  $ PEAJE_V        : num [1:168] 220673 215773 228878 196841 226518 ...
##  $ ENER_V         : num [1:168] 200 201 221 203 221 ...
##  $ CART_V         : num [1:168] 2.60e+13 2.61e+13 2.65e+13 2.67e+13 2.70e+13 ...
##  $ POLLO_V        : num [1:168] 13518 13580 13502 14575 14565 ...
##  $ ENER_CALI      : num [1:168] 69379734 68346783 69585382 67028317 68422194 ...
##  $ LICC_CALI      : num [1:168] 71805 60566 97722 95605 54599 ...
##  $ VEH_CALI       : num [1:168] NA NA NA NA NA NA NA NA NA NA ...
##  $ X_CALI         : num [1:168] 2.78e+09 3.33e+09 3.67e+09 3.10e+09 2.93e+09 ...
##  $ OCUP_HOTEL_CALI: num [1:168] 41 48.2 52.8 46.2 51.7 ...
##  $ ICC_CALI       : num [1:168] 20.6 16.2 21.4 35.5 28 ...
##  $ PEAJE_CALI     : num [1:168] 27041 28333 29239 23982 27637 ...
##  $ DAH_CALI       : num [1:168] 4.07e+12 4.09e+12 3.94e+12 3.86e+12 3.99e+12 ...
##  $ IPIR_CALI      : num [1:168] 96.5 101.9 107.4 98.5 104.5 ...
# Primera y última fecha
min(base_original$FECHA, na.rm = TRUE)
## [1] "2012-01-01 UTC"
max(base_original$FECHA, na.rm = TRUE)
## [1] "2025-12-01 UTC"

##** Interpretación de los resultados** La base de datos está conformada por 168 observaciones y 62 variables, correspondientes a información económica sectorial recopilada con periodicidad mensual entre enero de 2012 y diciembre de 2025. La variable FECHA se encuentra en formato POSIXct, mientras que las demás variables son de tipo numérico. Esta estructura permite desarrollar un análisis de series de tiempo orientado a identificar relaciones entre indicadores económicos y evaluar su capacidad predictiva mediante modelos de regresión lineal.

##Revisión de calidad de los datos

Identificación de los datos faltantes

# Contar valores faltantes por variable

faltantes <- data.frame(
  Variable = names(base_original),
  Valores_faltantes = colSums(is.na(base_original))
)

# Mostrar únicamente variables con datos faltantes

faltantes <- faltantes %>%
  filter(Valores_faltantes > 0) %>%
  arrange(desc(Valores_faltantes))

# Presentar resultados

kable(
  faltantes,
  caption = "Valores faltantes por variable",
  col.names = c("Variable", "Cantidad de valores faltantes")
)
Valores faltantes por variable
Variable Cantidad de valores faltantes
IPIR_PAPEL IPIR_PAPEL 72
IPIR_FARM IPIR_FARM 72
IPIR_PREALIM IPIR_PREALIM 72
VEH VEH 24
MIN_V MIN_V 12
VEH_CALI VEH_CALI 12
ENER_V ENER_V 3
PEAJE_V PEAJE_V 1
LICC_CALI LICC_CALI 1

La revisión de valores faltantes permitió identificar nueve variables con información incompleta. Las mayores ausencias corresponden a IPIR_PAPEL, IPIR_FARM e IPIR_PREALIM, cada una con 72 registros faltantes, equivalentes al 42,86 % de las observaciones. En contraste, las variables seleccionadas para el análisis presentan una disponibilidad elevada: IPIR_V, CEM_V e ISE no registran valores faltantes, mientras que ENER_V presenta únicamente tres. Por esta razón, no se considera pertinente eliminar observaciones de manera generalizada. El tratamiento de los datos faltantes se realizará de acuerdo con las necesidades específicas de los modelos.

Registros duplicados

# Número de registros completamente duplicados
sum(duplicated(base_original))
## [1] 0
# Número de fechas duplicadas
sum(duplicated(base_original$FECHA))
## [1] 0
# Identificar fechas repetidas
base_original %>%
  count(FECHA) %>%
  filter(n > 1)
## # A tibble: 0 × 2
## # ℹ 2 variables: FECHA <dttm>, n <int>

Se realizó una verificación de registros duplicados mediante la función duplicated(). Los resultados muestran que no existen observaciones completamente duplicadas ni fechas repetidas. Por tanto, se confirma que cada periodo mensual cuenta con un único registro, lo que permite conservar la estructura cronológica de la base sin necesidad de eliminar observaciones por duplicidad.

Identificación de valores atípicos

# Seleccionar variables de interés

variables <- c("IPIR_V", "CEM_V", "ENER_V", "ISE")

# Transformar los datos a formato largo

base_larga <- base_original %>%
  select(all_of(variables)) %>%
  pivot_longer(
    cols = everything(),
    names_to = "Variable",
    values_to = "Valor"
  )

# Construir diagramas de caja

ggplot(base_larga, aes(x = Variable, y = Valor)) +
  geom_boxplot(fill = "lightblue", color = "black") +
  facet_wrap(~ Variable, scales = "free") +
  labs(
    title = "Identificación de posibles valores atípicos",
    x = "Variable",
    y = "Valor"
  ) +
  theme_minimal()
## Warning: Removed 3 rows containing non-finite outside the scale range
## (`stat_boxplot()`).

Interpretación:El análisis de los diagramas de caja permitió identificar posibles valores atípicos en tres de las cuatro variables seleccionadas. En primer lugar, los despachos de cemento del Valle del Cauca (CEM_V) presentan varias observaciones que se alejan de la distribución central, principalmente en el extremo inferior, aunque también se identifica un valor elevado. Este comportamiento evidencia fluctuaciones importantes en los niveles mensuales de despachos. En segundo lugar, el consumo de energía (ENER_V) registra observaciones extremas tanto por debajo como por encima de su distribución habitual, lo que sugiere la presencia de periodos con niveles de consumo considerablemente diferentes. Por su parte, el índice de producción industrial del Valle del Cauca (IPIR_V) presenta una observación inferior que se distancia notablemente del resto de los registros. Finalmente, el Índice de Seguimiento a la Economía (ISE) no muestra observaciones que superen los límites establecidos por el diagrama de caja.

La presencia de estos valores extremos requiere especial atención, debido a que pueden influir en la estimación de los coeficientes de regresión y afectar la capacidad predictiva de los modelos. No obstante, su identificación mediante diagramas de caja no implica necesariamente que correspondan a errores en los datos. En el contexto de los indicadores económicos, estas observaciones podrían reflejar variaciones reales de la actividad productiva y sectorial. Por esta razón, se conservarán inicialmente y se realizará una revisión individual de los registros identificados, considerando su fecha y magnitud, antes de tomar cualquier decisión sobre su tratamiento.

Identificación de los meses correspondientes a los valores atípicos

# Identificación de valores atípicos mediante IQR

variables <- c("CEM_V", "ENER_V", "IPIR_V", "ISE")

# Organizar los datos

base_larga <- base_original %>%
  select(FECHA, all_of(variables)) %>%
  pivot_longer(
    cols = all_of(variables),
    names_to = "Variable",
    values_to = "Valor"
  )

# Calcular límites y detectar valores atípicos

valores_atipicos <- base_larga %>%
  group_by(Variable) %>%
  mutate(
    Q1 = quantile(Valor, 0.25, na.rm = TRUE),
    Q3 = quantile(Valor, 0.75, na.rm = TRUE),
    IQR = Q3 - Q1,
    Limite_inferior = Q1 - 1.5 * IQR,
    Limite_superior = Q3 + 1.5 * IQR
  ) %>%
  filter(
    !is.na(Valor),
    Valor < Limite_inferior |
      Valor > Limite_superior
  ) %>%
  select(
    FECHA, Variable, Valor,
    Limite_inferior, Limite_superior
  ) %>%
  arrange(Variable, FECHA)

# Presentar resultados

kable(
  valores_atipicos,
  digits = 2,
  caption = "Identificación de valores atípicos por variable"
)
Identificación de valores atípicos por variable
FECHA Variable Valor Limite_inferior Limite_superior
2020-03-01 CEM_V 53449.33 54871.77 116783.31
2020-04-01 CEM_V 21510.91 54871.77 116783.31
2021-05-01 CEM_V 11484.85 54871.77 116783.31
2022-09-01 CEM_V 119923.12 54871.77 116783.31
2012-01-01 ENER_V 200.30 201.07 257.49
2020-04-01 ENER_V 175.93 201.07 257.49
2021-05-01 ENER_V 149.23 201.07 257.49
2022-05-01 ENER_V 259.42 201.07 257.49
2021-05-01 IPIR_V 37.79 72.92 129.85

La identificación de valores atípicos mediante el criterio del rango intercuartílico (IQR) permitió detectar nueve observaciones potencialmente extremas en las variables seleccionadas. Los despachos de cemento del Valle del Cauca (CEM_V) registran cuatro casos, correspondientes a marzo y abril de 2020, mayo de 2021 y septiembre de 2022. Se destacan los valores inferiores observados durante 2020 y 2021, así como un valor superior en septiembre de 2022.

Por su parte, el consumo de energía (ENER_V) presenta cuatro observaciones atípicas: enero de 2012, abril de 2020, mayo de 2021 y mayo de 2022. Cabe señalar que el registro de enero de 2012 se encuentra ligeramente por debajo del límite inferior establecido, mientras que los demás casos muestran desviaciones más pronunciadas. Finalmente, el índice de producción industrial del Valle del Cauca (IPIR_V) presenta una observación inferior en mayo de 2021, con un valor de 37,79 frente a un límite inferior de 72,92. El ISE, por su parte, no presenta observaciones que superen los límites definidos por este criterio.

La coincidencia de observaciones extremas en mayo de 2021 para las tres variables sectoriales evidencia la necesidad de examinar conjuntamente el comportamiento de estos indicadores durante dicho periodo. Sin embargo, la identificación estadística no permite establecer por sí sola las causas de estas variaciones. En consecuencia, se conservarán inicialmente las observaciones identificadas, ya que podrían representar fluctuaciones reales de la actividad económica y su eliminación podría generar una pérdida de información relevante para el análisis predictivo.

##Exploración y regresión lineal simple Estadísticas descriptivas

# Selección de variables para el análisis

variables <- c("IPIR_V", "CEM_V", "ENER_V", "ISE")

# Calcular estadísticas descriptivas

estadisticas <- base_original %>%
  select(all_of(variables)) %>%
  summarise(
    across(
      everything(),
      list(
        Media = ~ mean(.x, na.rm = TRUE),
        Mediana = ~ median(.x, na.rm = TRUE),
        Desviacion = ~ sd(.x, na.rm = TRUE),
        Minimo = ~ min(.x, na.rm = TRUE),
        Maximo = ~ max(.x, na.rm = TRUE)
      )
    )
  ) %>%
  pivot_longer(
    cols = everything(),
    names_to = c("Variable", "Estadistico"),
    names_pattern = "(.+)_(Media|Mediana|Desviacion|Minimo|Maximo)",
    values_to = "Valor"
  ) %>%
  pivot_wider(
    names_from = Estadistico,
    values_from = Valor
  )
## Warning: Values from `Valor` are not uniquely identified; output will contain list-cols.
## • Use `values_fn = list` to suppress this warning.
## • Use `values_fn = {summary_fun}` to summarise duplicates.
## • Use the following dplyr code to identify duplicates.
##   {data} |>
##   dplyr::summarise(n = dplyr::n(), .by = c(Variable, Estadistico)) |>
##   dplyr::filter(n > 1L)
# Presentar resultados

kable(
  estadisticas,
  digits = 2,
  caption = "Estadísticas descriptivas de las variables seleccionadas"
)
Estadísticas descriptivas de las variables seleccionadas
Variable Media Desviacion Minimo Maximo
IPIR_V 101.3478, 101.5317 11.40938 37.78728 126.9396
CEM_V 84963.07, 85022.56 13814.19 11484.85 119923.1
ENER_V 229.3886, 230.2200 12.90907 149.2307 259.42
ISE 107.2151, 104.8898 12.66603 81.68037 141.2443

Las estadísticas descriptivas permiten identificar diferencias en el comportamiento de los indicadores seleccionados durante el periodo de estudio. En el caso del índice de producción industrial del Valle del Cauca (IPIR_V), se obtiene una media de 101,35 y una mediana de 101,53, lo que evidencia una proximidad entre ambas medidas de centralidad. Por su parte, los despachos de cemento (CEM_V) presentan un promedio de 84.963,07 y una mediana de 85.022,56, mientras que el consumo de energía (ENER_V) registra una media de 229,39 y una mediana de 230,22.

En cuanto al Índice de Seguimiento a la Economía (ISE), su media alcanza 107,22 y su mediana 104,89, lo que sugiere una distribución con cierta asimetría. Respecto a la dispersión, las desviaciones estándar muestran variaciones en los niveles de cada indicador, aunque su comparación directa debe realizarse con precaución debido a las diferencias de escala y unidades de medida.

En términos generales, los resultados evidencian que los indicadores presentan comportamientos y niveles de variabilidad diferenciados. Asimismo, los valores mínimos y máximos permiten reconocer fluctuaciones importantes durante el periodo analizado, lo que refuerza la necesidad de examinar su evolución temporal antes de establecer relaciones estadísticas y proponer los modelos de regresión.

Evolución temporal de las variables

# Evolución temporal de los indicadores seleccionados

base_graficos <- base_original %>%
  select(FECHA, IPIR_V, CEM_V, ENER_V, ISE) %>%
  pivot_longer(
    cols = -FECHA,
    names_to = "Variable",
    values_to = "Valor"
  )

# Construcción de gráficos de evolución temporal

ggplot(
  base_graficos,
  aes(x = FECHA, y = Valor)
) +
  geom_line(color = "steelblue", linewidth = 0.7) +
  facet_wrap(
    ~ Variable,
    scales = "free_y",
    ncol = 2
  ) +
  labs(
    title = "Evolución temporal de los indicadores económicos",
    subtitle = "Valle del Cauca y actividad económica nacional (2012-2025)",
    x = "Periodo",
    y = "Valor del indicador"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(
      face = "bold",
      size = 13
    ),
    strip.text = element_text(
      face = "bold"
    )
  )

El análisis de la evolución temporal evidencia comportamientos diferenciados entre los indicadores económicos seleccionados. Los despachos de cemento (CEM_V) y el índice de producción industrial (IPIR_V) presentan fluctuaciones importantes a lo largo del periodo, con caídas pronunciadas durante 2020 y 2021, seguidas de procesos de recuperación. Por su parte, el consumo de energía (ENER_V) muestra un comportamiento relativamente estable, aunque registra variaciones significativas en determinados meses. En contraste, el Índice de Seguimiento a la Economía (ISE) presenta una trayectoria general creciente, acompañada de fluctuaciones recurrentes y una caída destacada durante 2020.

En términos generales, las series muestran posibles patrones temporales y variaciones que deben considerarse en la construcción de los modelos de regresión. En particular, las tendencias y fluctuaciones observadas sugieren que las relaciones entre los indicadores podrían estar condicionadas por factores temporales comunes. Por esta razón, será necesario evaluar la correlación entre las variables y considerar la estructura temporal de los datos al desarrollar los ejercicios predictivos. No obstante, la gráfica por sí sola no permite establecer las causas de los cambios observados ni confirmar formalmente la existencia de estacionalidad.

análisis de relaciones entre variables

# Seleccionar las variables del análisis

base_cor <- base_original %>%
  select(IPIR_V, CEM_V, ENER_V, ISE)

# Calcular matriz de correlaciones

matriz_cor <- cor(
  base_cor,
  use = "complete.obs",
  method = "pearson"
)

# Presentar resultados

round(matriz_cor, 3)
##        IPIR_V CEM_V ENER_V   ISE
## IPIR_V  1.000 0.854  0.724 0.708
## CEM_V   0.854 1.000  0.755 0.606
## ENER_V  0.724 0.755  1.000 0.376
## ISE     0.708 0.606  0.376 1.000

La matriz de correlaciones de Pearson evidencia asociaciones positivas entre las variables seleccionadas. La relación más elevada se presenta entre el índice de producción industrial del Valle del Cauca (IPIR_V) y los despachos de cemento (CEM_V), con un coeficiente de 0,854, lo que representa una correlación positiva muy fuerte. Por su parte, el consumo de energía (ENER_V) registra una correlación de 0,724 con la producción industrial, mientras que el Índice de Seguimiento a la Economía (ISE) presenta un coeficiente de 0,708. Ambas relaciones se clasifican como fuertes y positivas.

En cuanto a las relaciones entre las variables explicativas, se observa una correlación de 0,755 entre los despachos de cemento y el consumo de energía, así como una correlación de 0,606 entre los despachos de cemento y el ISE. Finalmente, la relación entre el consumo de energía y el ISE es moderada, con un coeficiente de 0,376.

Estos resultados sugieren que los tres indicadores seleccionados presentan asociaciones relevantes con la producción industrial y, por tanto, constituyen candidatos para los modelos de regresión lineal simple. No obstante, las correlaciones identificadas no permiten establecer relaciones causales. Además, debido a la naturaleza temporal de los datos, las tendencias compartidas entre las series podrían incrementar artificialmente los coeficientes de correlación, por lo que estos resultados deben interpretarse como evidencia exploratoria y complementarse con la evaluación de las relaciones temporales.

Visualización de las correlaciones

# Cargar libreria para graficos de correlacion
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.5.3
## corrplot 0.95 loaded
# Gráfico de correlaciones

corrplot(
  matriz_cor,
  method = "color",
  type = "upper",
  addCoef.col = "black",
  tl.col = "black",
  tl.srt = 45,
  number.cex = 0.8,
  title = "Matriz de correlaciones entre indicadores",
  mar = c(0, 0, 2, 0)
)

La representación gráfica de la matriz de correlaciones permite visualizar la intensidad y dirección de las asociaciones entre los indicadores seleccionados. Se observa que todas las relaciones son positivas, aunque presentan diferentes magnitudes. La correlación más elevada corresponde a los despachos de cemento y la producción industrial del Valle del Cauca (0,85), seguida de la relación entre los despachos de cemento y el consumo de energía (0,76). Asimismo, la producción industrial presenta correlaciones positivas fuertes con el consumo energético (0,72) y el Índice de Seguimiento a la Economía (0,71).

En conjunto, estos resultados respaldan la pertinencia inicial de considerar los tres indicadores como posibles variables explicativas de la producción industrial. Sin embargo, la asociación relativamente elevada entre algunos predictores también advierte sobre la necesidad de evaluar la multicolinealidad en los modelos de regresión múltiple.

##Exploración y regresión lineal simple

Construcción de los diagramas de dispersión

# Gráfico 1: IPIR_V y CEM_V

ggplot(base_original, aes(x = CEM_V, y = IPIR_V)) +
  geom_point(color = "steelblue", alpha = 0.7) +
  geom_smooth(method = "lm", se = TRUE, color = "red") +
  labs(
    title = "Producción industrial y despachos de cemento",
    x = "Despachos de cemento",
    y = "Índice de producción industrial"
  ) +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

# Gráfico 2: IPIR_V y ENER_V

ggplot(base_original, aes(x = ENER_V, y = IPIR_V)) +
  geom_point(color = "steelblue", alpha = 0.7) +
  geom_smooth(method = "lm", se = TRUE, color = "red") +
  labs(
    title = "Producción industrial y consumo de energía",
    x = "Consumo de energía",
    y = "Índice de producción industrial"
  ) +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 3 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 3 rows containing missing values or values outside the scale range
## (`geom_point()`).

# Gráfico 3: IPIR_V e ISE

ggplot(base_original, aes(x = ISE, y = IPIR_V)) +
  geom_point(color = "steelblue", alpha = 0.7) +
  geom_smooth(method = "lm", se = TRUE, color = "red") +
  labs(
    title = "Producción industrial e Índice de Seguimiento a la Economía",
    x = "Índice de Seguimiento a la Economía",
    y = "Índice de producción industrial"
  ) +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

El análisis de los diagramas de dispersión permite examinar la relación entre el índice de producción industrial del Valle del Cauca (IPIR_V), definido como variable dependiente, y los tres indicadores seleccionados como posibles variables explicativas. En términos generales, los resultados muestran asociaciones positivas entre la producción industrial y cada uno de los predictores, lo que indica que los mayores valores de estos indicadores tienden a coincidir con niveles más elevados de producción industrial durante el periodo analizado.

En primer lugar, la relación entre los despachos de cemento (CEM_V) y la producción industrial presenta el patrón lineal positivo más marcado. La mayoría de las observaciones se concentra alrededor de la línea de tendencia, lo que evidencia una asociación relativamente estrecha entre ambas variables. Este comportamiento coincide con el coeficiente de correlación de Pearson de 0,854, el más elevado entre los indicadores analizados. La relación observada sugiere que los periodos con mayores niveles de despachos de cemento tienden a coincidir con mayores niveles de producción industrial. Sin embargo, también se identifican algunas observaciones alejadas del grupo principal, particularmente en los niveles inferiores de ambas variables, que podrían ejercer influencia sobre la estimación de la relación lineal.

En segundo lugar, el consumo de energía (ENER_V) presenta una asociación positiva con el índice de producción industrial, respaldada por un coeficiente de correlación de 0,724. No obstante, la dispersión de los puntos alrededor de la línea de tendencia es mayor que en el caso de los despachos de cemento. Esto indica que, aunque ambas variables presentan movimientos conjuntos, existe una mayor variabilidad en los niveles de producción industrial para determinados valores de consumo energético. Asimismo, se observan algunas observaciones extremas que podrían afectar el ajuste del modelo. En este gráfico, el programa excluye tres registros debido a la presencia de valores faltantes en el consumo de energía, por lo que la relación se representa únicamente con las observaciones disponibles.

Finalmente, la relación entre el Índice de Seguimiento a la Economía (ISE) y la producción industrial también presenta una tendencia positiva, con un coeficiente de correlación de 0,708. Sin embargo, la distribución de las observaciones evidencia una dispersión considerable alrededor de la línea de regresión, lo que sugiere que el comportamiento del ISE no permite representar completamente las variaciones de la producción industrial. Adicionalmente, se identifica una observación con un nivel particularmente bajo de producción industrial respecto a su valor del ISE, correspondiente a un registro previamente identificado como atípico. Esta observación podría influir en la estimación de la pendiente y en el ajuste general del modelo.

Al comparar los tres gráficos, se identifica que los despachos de cemento presentan la asociación lineal más fuerte con la producción industrial, seguidos por el consumo de energía y el Índice de Seguimiento a la Economía. Esta jerarquía coincide con los resultados de la matriz de correlaciones y proporciona un primer criterio para seleccionar los predictores que serán evaluados en los modelos de regresión lineal simple.

Sin embargo, es necesario considerar que estas relaciones corresponden a asociaciones contemporáneas y no demuestran causalidad entre los indicadores. Además, debido a que las variables corresponden a series económicas mensuales, las tendencias temporales y los movimientos compartidos pueden contribuir a generar correlaciones elevadas. Por consiguiente, los resultados gráficos constituyen evidencia exploratoria para orientar la modelación, pero no son suficientes para determinar cuál predictor tendrá la mayor capacidad de pronóstico. Esta evaluación deberá realizarse mediante la estimación de los modelos y su posterior comparación con procedimientos de validación y medidas de error predictivo.

##Estimación de los modelos de regresión lineal simple Preparación de los datos para la modelación

# Preparación de la base para los modelos predictivos

base_modelos <- base_original %>%
  arrange(FECHA) %>%
  mutate(
    FECHA_objetivo = lead(FECHA),
    IPIR_V_obj = lead(IPIR_V)
  ) %>%
  filter(
    !is.na(IPIR_V_obj),
    complete.cases(CEM_V, ENER_V, ISE)
  )

# Dimensiones de la nueva base

dim(base_modelos)
## [1] 164  64
# Primeras observaciones

head(
  base_modelos %>%
    select(
      FECHA,
      FECHA_objetivo,
      IPIR_V_obj,
      CEM_V,
      ENER_V,
      ISE
    )
)
## # A tibble: 6 × 6
##   FECHA               FECHA_objetivo      IPIR_V_obj  CEM_V ENER_V   ISE
##   <dttm>              <dttm>                   <dbl>  <dbl>  <dbl> <dbl>
## 1 2012-01-01 00:00:00 2012-02-01 00:00:00       89.7 61149.   200.  81.7
## 2 2012-02-01 00:00:00 2012-03-01 00:00:00       97.1 66969.   201.  84.5
## 3 2012-03-01 00:00:00 2012-04-01 00:00:00       82.7 72052.   221   87.8
## 4 2012-04-01 00:00:00 2012-05-01 00:00:00       90.8 63652.   203.  84.1
## 5 2012-05-01 00:00:00 2012-06-01 00:00:00       94.3 71515.   221.  87.9
## 6 2012-06-01 00:00:00 2012-07-01 00:00:00       99.5 71479.   217.  87.8
# Verificar valores faltantes

colSums(
  is.na(
    base_modelos %>%
      select(IPIR_V_obj, CEM_V, ENER_V, ISE)
  )
)
## IPIR_V_obj      CEM_V     ENER_V        ISE 
##          0          0          0          0

Verificación de la base preparada

# Dimensiones de la base preparada
dim(base_modelos)
## [1] 164  64
# Verificar valores faltantes
colSums(
  is.na(
    base_modelos %>%
      select(IPIR_V_obj, CEM_V, ENER_V, ISE)
  )
)
## IPIR_V_obj      CEM_V     ENER_V        ISE 
##          0          0          0          0

Una vez realizado el desplazamiento temporal de la variable dependiente y la selección de observaciones completas, se obtuvo una base de modelación conformada por 164 observaciones y 64 variables. La verificación de los datos confirmó que las variables utilizadas en los modelos no presentan valores faltantes. De esta manera, se dispone de una muestra común para estimar y comparar las tres regresiones lineales simples, garantizando que las diferencias en sus resultados no se deban a cambios en el número de observaciones utilizadas.

##Estimación de los tres modelos de regresión simple

# MODELO 1: Producción industrial según despachos de cemento

modelo_simple_1 <- lm(
  IPIR_V_obj ~ CEM_V,
  data = base_modelos
)

summary(modelo_simple_1)
## 
## Call:
## lm(formula = IPIR_V_obj ~ CEM_V, data = base_modelos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -61.351  -4.954   0.078   4.995  36.109 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 5.865e+01  4.334e+00   13.53   <2e-16 ***
## CEM_V       5.049e-04  5.028e-05   10.04   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 8.951 on 162 degrees of freedom
## Multiple R-squared:  0.3837, Adjusted R-squared:  0.3799 
## F-statistic: 100.8 on 1 and 162 DF,  p-value: < 2.2e-16
# MODELO 2: Producción industrial según consumo de energía

modelo_simple_2 <- lm(
  IPIR_V_obj ~ ENER_V,
  data = base_modelos
)

summary(modelo_simple_2)
## 
## Call:
## lm(formula = IPIR_V_obj ~ ENER_V, data = base_modelos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -60.312  -5.392   0.463   6.115  26.843 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  21.8273    14.5682   1.498    0.136    
## ENER_V        0.3477     0.0634   5.484 1.57e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 10.47 on 162 degrees of freedom
## Multiple R-squared:  0.1566, Adjusted R-squared:  0.1514 
## F-statistic: 30.08 on 1 and 162 DF,  p-value: 1.566e-07
# MODELO 3: Producción industrial según el ISE

modelo_simple_3 <- lm(
  IPIR_V_obj ~ ISE,
  data = base_modelos
)

summary(modelo_simple_3)
## 
## Call:
## lm(formula = IPIR_V_obj ~ ISE, data = base_modelos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -62.361  -4.473   0.892   5.184  18.805 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 46.14709    6.34577   7.272 1.43e-11 ***
## ISE          0.51789    0.05887   8.797 1.99e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9.379 on 162 degrees of freedom
## Multiple R-squared:  0.3233, Adjusted R-squared:  0.3191 
## F-statistic: 77.39 on 1 and 162 DF,  p-value: 1.992e-15

Comparación e interpretación de los modelos de regresión lineal simple

La estimación de los tres modelos de regresión lineal simple evidencia asociaciones positivas y estadísticamente significativas entre los indicadores económicos seleccionados y el índice de producción industrial del Valle del Cauca del mes siguiente. En los tres casos, los coeficientes de las variables explicativas presentan signos positivos y niveles de significancia inferiores al 1 %, lo que permite rechazar la hipótesis nula de que sus respectivas pendientes sean iguales a cero, bajo los supuestos de cada modelo.

Al comparar su capacidad explicativa, se identifica que el modelo basado en los despachos de cemento (CEM_V) presenta el mayor R², con un valor de 0,3837. Esto significa que el 38,37 % de la variabilidad observada en la producción industrial del periodo siguiente es explicada por esta variable. Adicionalmente, registra el menor error estándar residual (8,951), lo que indica una menor dispersión de los errores de estimación respecto a los otros modelos.

En segundo lugar, el modelo que incorpora el Índice de Seguimiento a la Economía (ISE) obtiene un R² de 0,3233, por lo que explica el 32,33 % de la variabilidad de la variable dependiente. Su error estándar residual es de 9,379, lo que evidencia un ajuste inferior al del modelo basado en los despachos de cemento, aunque superior al obtenido con el consumo de energía.

Por último, el modelo que utiliza el consumo de energía (ENER_V) presenta un R² de 0,1566 y un error estándar residual de 10,47. Estos resultados indican que, de manera individual, esta variable tiene una capacidad explicativa más limitada sobre el comportamiento de la producción industrial del mes siguiente.

En consecuencia, considerando los indicadores de ajuste dentro de la muestra, el modelo basado en los despachos de cemento presenta el mejor desempeño relativo entre las tres especificaciones simples. Sin embargo, esta comparación no permite concluir todavía que sea el modelo con mayor precisión predictiva. Para establecerlo, será necesario evaluar su desempeño mediante validación cruzada temporal y el error absoluto medio (MAE), comparándolo también con un modelo de referencia que utilice la mediana del conjunto de entrenamiento.

validación cruzada y comparación mediante MAE

# Parámetros de validación temporal

n_inicial <- 104
horizonte <- 12
n_particiones <- 5
# Crear lista para almacenar las predicciones de referencia

resultados_mediana <- list()

# Recorrer las cinco particiones

for (i in 1:n_particiones) {

  # Definir observaciones de entrenamiento

  fin_entrenamiento <- n_inicial + (i - 1) * horizonte

  entrenamiento <- base_modelos[1:fin_entrenamiento, ]

  # Definir observaciones de prueba

  inicio_prueba <- fin_entrenamiento + 1
  fin_prueba <- fin_entrenamiento + horizonte

  prueba <- base_modelos[inicio_prueba:fin_prueba, ]

  # Calcular mediana del entrenamiento

  mediana_entrenamiento <- median(
    entrenamiento$IPIR_V_obj
  )

  # Generar predicciones

  predicciones <- data.frame(
    Particion = i,
    Real = prueba$IPIR_V_obj,
    Pred_Mediana = mediana_entrenamiento
  )

  # Guardar resultados

  resultados_mediana[[i]] <- predicciones
}

# Unir resultados

resultados_mediana <- bind_rows(resultados_mediana)

# Visualizar resultados

head(resultados_mediana)
##   Particion      Real Pred_Mediana
## 1         1  95.76380     97.64498
## 2         1 102.15021     97.64498
## 3         1 107.37552     97.64498
## 4         1  98.54686     97.64498
## 5         1  37.78728     97.64498
## 6         1 100.55712     97.64498

Calcular el MAE del modelo de referencia

# Calcular el MAE del modelo de referencia

mae_mediana <- mean(
  abs(
    resultados_mediana$Real -
    resultados_mediana$Pred_Mediana
  )
)

# Mostrar resultado

mae_mediana
## [1] 12.8493

Comparación de los modelos mediante MAE

n_inicial <- 104
horizonte <- 12
n_particiones <- 5
# ============================================================
# VALIDACION TEMPORAL Y COMPARACION MEDIANTE MAE
# ============================================================

# 1. Definir parametros

n_inicial <- 104
horizonte <- 12
n_particiones <- 5

# 2. Crear lista de resultados

resultados_cv <- list()

# 3. Ejecutar validacion temporal

for (i in 1:n_particiones) {

  fin_entrenamiento <- n_inicial + (i - 1) * horizonte

  inicio_prueba <- fin_entrenamiento + 1
  fin_prueba <- fin_entrenamiento + horizonte

  entrenamiento <- base_modelos[1:fin_entrenamiento, ]
  prueba <- base_modelos[inicio_prueba:fin_prueba, ]

  # Modelo 1: CEM_V
  modelo1 <- lm(IPIR_V_obj ~ CEM_V, data = entrenamiento)
  pred1 <- predict(modelo1, newdata = prueba)

  # Modelo 2: ENER_V
  modelo2 <- lm(IPIR_V_obj ~ ENER_V, data = entrenamiento)
  pred2 <- predict(modelo2, newdata = prueba)

  # Modelo 3: ISE
  modelo3 <- lm(IPIR_V_obj ~ ISE, data = entrenamiento)
  pred3 <- predict(modelo3, newdata = prueba)

  # Guardar predicciones
  resultados_cv[[i]] <- data.frame(
    Particion = i,
    Real = prueba$IPIR_V_obj,
    Pred_CEM = as.numeric(pred1),
    Pred_ENER = as.numeric(pred2),
    Pred_ISE = as.numeric(pred3)
  )
}

# 4. Unificar resultados

resultados_cv <- bind_rows(resultados_cv)

# 5. Calcular MAE de cada modelo

comparacion_mae <- data.frame(
  Modelo = c(
    "Regresion simple: CEM_V",
    "Regresion simple: ENER_V",
    "Regresion simple: ISE",
    "Modelo de referencia: Mediana"
  ),

  MAE = c(
    mean(abs(resultados_cv$Real - resultados_cv$Pred_CEM)),
    mean(abs(resultados_cv$Real - resultados_cv$Pred_ENER)),
    mean(abs(resultados_cv$Real - resultados_cv$Pred_ISE)),
    mae_mediana
  )
)

# 6. Ordenar resultados

comparacion_mae <- comparacion_mae %>%
  arrange(MAE)

# 7. Presentar tabla

knitr::kable(
  comparacion_mae,
  digits = 4,
  caption = "Comparacion del desempeno predictivo mediante MAE"
)
Comparacion del desempeno predictivo mediante MAE
Modelo MAE
Regresion simple: ISE 8.7526
Regresion simple: CEM_V 9.5151
Regresion simple: ENER_V 11.9962
Modelo de referencia: Mediana 12.8493
# 8. Verificar numero de predicciones

nrow(resultados_cv)
## [1] 60
# Mostrar comparación de los modelos

print(comparacion_mae)
##                          Modelo       MAE
## 1         Regresion simple: ISE  8.752556
## 2       Regresion simple: CEM_V  9.515121
## 3      Regresion simple: ENER_V 11.996199
## 4 Modelo de referencia: Mediana 12.849301
# Ordenar de menor a mayor error

comparacion_mae %>%
  arrange(MAE)
##                          Modelo       MAE
## 1         Regresion simple: ISE  8.752556
## 2       Regresion simple: CEM_V  9.515121
## 3      Regresion simple: ENER_V 11.996199
## 4 Modelo de referencia: Mediana 12.849301

Comparación de la mejora frente al modelo de referencia

La evaluación del desempeño predictivo mediante validación temporal permitió comparar los tres modelos de regresión lineal simple con un modelo de referencia basado en la mediana de la variable dependiente del conjunto de entrenamiento. Para ello, se utilizaron cinco particiones temporales, cada una con 12 observaciones de evaluación, manteniendo el orden cronológico de la información y utilizando las mismas particiones para todos los modelos.

Los resultados muestran que el modelo basado en el Índice de Seguimiento a la Economía (ISE) presenta el menor error absoluto medio (MAE), con un valor de 8,7526. Esto significa que sus predicciones se alejan, en promedio, aproximadamente 8,75 puntos de los valores reales de producción industrial. En segundo lugar, se encuentra el modelo basado en los despachos de cemento (CEM_V), con un MAE de 9,5151, mientras que el modelo que utiliza el consumo de energía (ENER_V) registra un error de 11,9962.

Por su parte, el modelo de referencia basado en la mediana obtiene un MAE de 12,8493, superior al registrado por las tres regresiones. Al comparar los resultados, se evidencia que el modelo con el ISE reduce el error de predicción en aproximadamente un 31,88 % respecto a la referencia, seguido del modelo con despachos de cemento, cuya reducción alcanza el 25,95 %. El modelo con consumo de energía presenta una mejora más limitada, equivalente al 6,64 %.

Un resultado relevante es que el modelo basado en el ISE presenta el mejor desempeño predictivo, a pesar de que el modelo con despachos de cemento había obtenido un mayor coeficiente de determinación en la estimación inicial. Esta diferencia demuestra que un mayor ajuste dentro de la muestra no garantiza necesariamente una mayor precisión en las predicciones realizadas sobre observaciones posteriores.

En consecuencia, para los modelos de regresión lineal simple, el ISE constituye el predictor individual más conveniente según los resultados de la validación temporal. No obstante, esta selección es preliminar y deberá contrastarse con los modelos de regresión múltiple, con el propósito de determinar si la incorporación conjunta de indicadores económicos permite mejorar la capacidad predictiva.

##Regresión lineal múltiple

Selección y preparación de las variables

# Crear variable categórica del mes objetivo

base_modelos <- base_modelos %>%
  mutate(
    MES = factor(
      month(FECHA_objetivo),
      levels = 1:12,
      labels = month.abb
    )
  )

# Verificar la nueva variable

head(
  base_modelos %>%
    select(FECHA, FECHA_objetivo, IPIR_V_obj, MES)
)
## # A tibble: 6 × 4
##   FECHA               FECHA_objetivo      IPIR_V_obj MES  
##   <dttm>              <dttm>                   <dbl> <fct>
## 1 2012-01-01 00:00:00 2012-02-01 00:00:00       89.7 Feb  
## 2 2012-02-01 00:00:00 2012-03-01 00:00:00       97.1 Mar  
## 3 2012-03-01 00:00:00 2012-04-01 00:00:00       82.7 Apr  
## 4 2012-04-01 00:00:00 2012-05-01 00:00:00       90.8 May  
## 5 2012-05-01 00:00:00 2012-06-01 00:00:00       94.3 Jun  
## 6 2012-06-01 00:00:00 2012-07-01 00:00:00       99.5 Jul
# Frecuencia de observaciones por mes

table(base_modelos$MES)
## 
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
##  12  13  14  14  14  14  14  14  14  13  14  14

La variable categórica mensual se construyó a partir de la fecha correspondiente al periodo objetivo de predicción. La distribución de frecuencias evidencia que los doce meses del año están representados en la muestra, con un total de 164 observaciones. Las frecuencias oscilan entre 12 y 14 registros por mes, lo que refleja una distribución relativamente equilibrada. Esta variable permitirá incorporar posibles diferencias sistemáticas asociadas a la estacionalidad mensual en uno de los modelos de regresión múltiple. Se estableció enero como categoría de referencia para interpretar los coeficientes de los demás meses.

Estimación de los modelos de regresión múltiple

# Modelo múltiple 1: indicadores económicos

modelo_multiple_1 <- lm(
  IPIR_V_obj ~ CEM_V + ENER_V + ISE,
  data = base_modelos
)

# Resultados del modelo

summary(modelo_multiple_1)
## 
## Call:
## lm(formula = IPIR_V_obj ~ CEM_V + ENER_V + ISE, data = base_modelos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -62.011  -4.358   1.012   5.134  23.971 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6.067e+01  1.537e+01   3.947 0.000118 ***
## CEM_V        4.323e-04  8.745e-05   4.943 1.92e-06 ***
## ENER_V      -1.020e-01  8.002e-02  -1.275 0.204074    
## ISE          2.574e-01  6.969e-02   3.694 0.000303 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 8.56 on 160 degrees of freedom
## Multiple R-squared:  0.4432, Adjusted R-squared:  0.4328 
## F-statistic: 42.46 on 3 and 160 DF,  p-value: < 2.2e-16
# Modelo múltiple 2: indicadores y variable mensual

modelo_multiple_2 <- lm(
  IPIR_V_obj ~ CEM_V + ENER_V + ISE + MES,
  data = base_modelos
)

# Resultados del modelo

summary(modelo_multiple_2)
## 
## Call:
## lm(formula = IPIR_V_obj ~ CEM_V + ENER_V + ISE + MES, data = base_modelos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -57.061  -2.650  -0.029   3.072  14.389 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  4.188e+01  1.368e+01   3.062 0.002611 ** 
## CEM_V        2.489e-04  7.477e-05   3.329 0.001099 ** 
## ENER_V      -1.282e-01  7.099e-02  -1.806 0.072967 .  
## ISE          4.896e-01  6.056e-02   8.085 1.98e-13 ***
## MESFeb       1.715e+01  2.890e+00   5.935 1.98e-08 ***
## MESMar       1.809e+01  2.818e+00   6.418 1.73e-09 ***
## MESApr       1.019e+01  2.848e+00   3.578 0.000468 ***
## MESMay       1.008e+01  2.787e+00   3.615 0.000410 ***
## MESJun       1.574e+01  2.773e+00   5.678 6.93e-08 ***
## MESJul       2.035e+01  2.764e+00   7.364 1.12e-11 ***
## MESAug       2.115e+01  2.845e+00   7.434 7.66e-12 ***
## MESSep       2.234e+01  2.897e+00   7.711 1.64e-12 ***
## MESOct       2.208e+01  2.890e+00   7.640 2.44e-12 ***
## MESNov       1.667e+01  2.871e+00   5.806 3.73e-08 ***
## MESDec       1.091e+01  2.715e+00   4.019 9.23e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.669 on 149 degrees of freedom
## Multiple R-squared:  0.6853, Adjusted R-squared:  0.6558 
## F-statistic: 23.18 on 14 and 149 DF,  p-value: < 2.2e-16

Comparación inicial de los modelos

# Comparación de los modelos múltiples

comparacion_modelos <- data.frame(
  Modelo = c(
    "Modelo múltiple 1",
    "Modelo múltiple 2"
  ),
  R2 = c(
    summary(modelo_multiple_1)$r.squared,
    summary(modelo_multiple_2)$r.squared
  ),
  R2_ajustado = c(
    summary(modelo_multiple_1)$adj.r.squared,
    summary(modelo_multiple_2)$adj.r.squared
  ),
  AIC = c(
    AIC(modelo_multiple_1),
    AIC(modelo_multiple_2)
  )
)

kable(
  comparacion_modelos,
  digits = 4,
  caption = "Comparación de los modelos de regresión múltiple"
)
Comparación de los modelos de regresión múltiple
Modelo R2 R2_ajustado AIC
Modelo múltiple 1 0.4432 0.4328 1175.624
Modelo múltiple 2 0.6853 0.6558 1104.047

Comparación de los modelos de regresión lineal múltiple

La comparación de los dos modelos de regresión lineal múltiple permite evaluar la contribución de la variable categórica mensual a la explicación del comportamiento de la producción industrial del Valle del Cauca. El primer modelo, que incorpora los despachos de cemento (CEM_V), el consumo de energía (ENER_V) y el Índice de Seguimiento a la Economía (ISE), presenta un coeficiente de determinación (R²) de 0,4432 y un R² ajustado de 0,4328. Estos resultados indican que los tres indicadores económicos explican conjuntamente el 44,32 % de la variabilidad de la producción industrial del periodo siguiente.

Por su parte, el segundo modelo incorpora adicionalmente la variable categórica mensual (MES), con enero como categoría de referencia. Esta especificación alcanza un R² de 0,6853 y un R² ajustado de 0,6558, lo que representa un incremento importante en la capacidad explicativa respecto al primer modelo. En términos generales, estos resultados sugieren que existen diferencias sistemáticas asociadas al mes del año que contribuyen a explicar el comportamiento de la producción industrial.

Adicionalmente, el criterio de información de Akaike (AIC) disminuye de 1175,624 en el primer modelo a 1104,047 en el segundo. Esta reducción indica que la incorporación de la variable mensual mejora el equilibrio entre ajuste estadístico y complejidad del modelo.

En consecuencia, los resultados preliminares favorecen la segunda especificación, debido a su mayor R² ajustado y menor AIC. No obstante, esta comparación debe complementarse con el análisis de significancia individual y global, así como con la evaluación de los supuestos del modelo y su desempeño predictivo fuera de la muestra de estimación.

Análisis de significancia estadística

# Resultados completos del modelo múltiple 1

summary(modelo_multiple_1)
## 
## Call:
## lm(formula = IPIR_V_obj ~ CEM_V + ENER_V + ISE, data = base_modelos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -62.011  -4.358   1.012   5.134  23.971 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6.067e+01  1.537e+01   3.947 0.000118 ***
## CEM_V        4.323e-04  8.745e-05   4.943 1.92e-06 ***
## ENER_V      -1.020e-01  8.002e-02  -1.275 0.204074    
## ISE          2.574e-01  6.969e-02   3.694 0.000303 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 8.56 on 160 degrees of freedom
## Multiple R-squared:  0.4432, Adjusted R-squared:  0.4328 
## F-statistic: 42.46 on 3 and 160 DF,  p-value: < 2.2e-16
# Resultados completos del modelo múltiple 2

summary(modelo_multiple_2)
## 
## Call:
## lm(formula = IPIR_V_obj ~ CEM_V + ENER_V + ISE + MES, data = base_modelos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -57.061  -2.650  -0.029   3.072  14.389 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  4.188e+01  1.368e+01   3.062 0.002611 ** 
## CEM_V        2.489e-04  7.477e-05   3.329 0.001099 ** 
## ENER_V      -1.282e-01  7.099e-02  -1.806 0.072967 .  
## ISE          4.896e-01  6.056e-02   8.085 1.98e-13 ***
## MESFeb       1.715e+01  2.890e+00   5.935 1.98e-08 ***
## MESMar       1.809e+01  2.818e+00   6.418 1.73e-09 ***
## MESApr       1.019e+01  2.848e+00   3.578 0.000468 ***
## MESMay       1.008e+01  2.787e+00   3.615 0.000410 ***
## MESJun       1.574e+01  2.773e+00   5.678 6.93e-08 ***
## MESJul       2.035e+01  2.764e+00   7.364 1.12e-11 ***
## MESAug       2.115e+01  2.845e+00   7.434 7.66e-12 ***
## MESSep       2.234e+01  2.897e+00   7.711 1.64e-12 ***
## MESOct       2.208e+01  2.890e+00   7.640 2.44e-12 ***
## MESNov       1.667e+01  2.871e+00   5.806 3.73e-08 ***
## MESDec       1.091e+01  2.715e+00   4.019 9.23e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.669 on 149 degrees of freedom
## Multiple R-squared:  0.6853, Adjusted R-squared:  0.6558 
## F-statistic: 23.18 on 14 and 149 DF,  p-value: < 2.2e-16

Análisis de significancia estadística de los modelos múltiples

El análisis de los resultados de las regresiones múltiples permite identificar la contribución individual de los indicadores económicos y de la variable categórica mensual a la explicación de la producción industrial del Valle del Cauca del periodo siguiente.

En el primer modelo, que incorpora los despachos de cemento (CEM_V), el consumo de energía (ENER_V) y el Índice de Seguimiento a la Economía (ISE), se observa que los coeficientes de los despachos de cemento y del ISE son positivos y estadísticamente significativos, con valores p de 0,000192 y 0,000303, respectivamente. Por su parte, el consumo de energía presenta un coeficiente negativo de -0,1020, pero no resulta estadísticamente significativo, dado que su valor p es de 0,204074. Esto indica que, al controlar simultáneamente los otros indicadores, no existe evidencia estadística suficiente para establecer una asociación lineal parcial entre el consumo energético y la producción industrial del periodo siguiente. A pesar de ello, la prueba F evidencia que el modelo es globalmente significativo, con un valor p inferior a 2,2 × 10⁻¹⁶.

En el segundo modelo se incorpora la variable categórica mensual, tomando enero como categoría de referencia. Los resultados muestran que los despachos de cemento y el ISE conservan sus asociaciones positivas y significativas, con coeficientes de 0,0002489 y 0,4896, respectivamente. El consumo de energía mantiene un coeficiente negativo de -0,1282, pero su valor p de 0,071 indica que no alcanza significancia estadística al 5 %.

En cuanto a la variable mensual, las once categorías presentan coeficientes positivos y estadísticamente significativos respecto a enero. Las diferencias estimadas oscilan entre 10,08 puntos para mayo y 22,34 puntos para septiembre. Este resultado evidencia la existencia de diferencias sistemáticas entre los meses del año, una vez controlados los indicadores económicos incluidos en el modelo. Por consiguiente, la incorporación de esta variable permite capturar patrones temporales que no quedan completamente explicados por los predictores cuantitativos.

Finalmente, el segundo modelo también resulta globalmente significativo, con un estadístico F de 23,18 y un valor p inferior a 2,2 × 10⁻¹⁶. En conjunto, los resultados respaldan la inclusión de la variable mensual como un elemento relevante para explicar la variabilidad de la producción industrial. No obstante, la significancia estadística de los coeficientes no implica por sí misma causalidad ni garantiza una mayor capacidad predictiva fuera de la muestra de estimación.

selección del modelo mediante AIC

# Selección paso a paso mediante AIC

modelo_step <- step(
  modelo_multiple_2,
  direction = "both",
  trace = 1
)
## Start:  AIC=636.64
## IPIR_V_obj ~ CEM_V + ENER_V + ISE + MES
## 
##          Df Sum of Sq     RSS    AIC
## <none>                 6626.7 636.64
## - ENER_V  1     145.0  6771.7 638.19
## - CEM_V   1     492.8  7119.5 646.40
## - ISE     1    2907.2  9533.9 694.29
## - MES    11    5098.0 11724.7 708.21
# Mostrar modelo seleccionado

summary(modelo_step)
## 
## Call:
## lm(formula = IPIR_V_obj ~ CEM_V + ENER_V + ISE + MES, data = base_modelos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -57.061  -2.650  -0.029   3.072  14.389 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  4.188e+01  1.368e+01   3.062 0.002611 ** 
## CEM_V        2.489e-04  7.477e-05   3.329 0.001099 ** 
## ENER_V      -1.282e-01  7.099e-02  -1.806 0.072967 .  
## ISE          4.896e-01  6.056e-02   8.085 1.98e-13 ***
## MESFeb       1.715e+01  2.890e+00   5.935 1.98e-08 ***
## MESMar       1.809e+01  2.818e+00   6.418 1.73e-09 ***
## MESApr       1.019e+01  2.848e+00   3.578 0.000468 ***
## MESMay       1.008e+01  2.787e+00   3.615 0.000410 ***
## MESJun       1.574e+01  2.773e+00   5.678 6.93e-08 ***
## MESJul       2.035e+01  2.764e+00   7.364 1.12e-11 ***
## MESAug       2.115e+01  2.845e+00   7.434 7.66e-12 ***
## MESSep       2.234e+01  2.897e+00   7.711 1.64e-12 ***
## MESOct       2.208e+01  2.890e+00   7.640 2.44e-12 ***
## MESNov       1.667e+01  2.871e+00   5.806 3.73e-08 ***
## MESDec       1.091e+01  2.715e+00   4.019 9.23e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.669 on 149 degrees of freedom
## Multiple R-squared:  0.6853, Adjusted R-squared:  0.6558 
## F-statistic: 23.18 on 14 and 149 DF,  p-value: < 2.2e-16
# Consultar AIC del modelo seleccionado

AIC(modelo_step)
## [1] 1104.047
# Evaluacion de multicolinealidad mediante VIF

library(car)
## Warning: package 'car' was built under R version 4.5.3
## Cargando paquete requerido: carData
## Warning: package 'carData' was built under R version 4.5.3
## 
## Adjuntando el paquete: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:purrr':
## 
##     some
vif(modelo_multiple_2)
##            GVIF Df GVIF^(1/(2*Df))
## CEM_V  3.984033  1        1.996004
## ENER_V 3.091365  1        1.758228
## ISE    2.093015  1        1.446726
## MES    1.970464 11        1.031311
# Comparar AIC de los modelos múltiples

AIC(modelo_multiple_1, modelo_multiple_2)
##                   df      AIC
## modelo_multiple_1  5 1175.625
## modelo_multiple_2 16 1104.047

La comparación de los modelos de regresión múltiple mediante el criterio de información (AIC) permite identificar cuál presenta un mejor equilibrio entre capacidad de ajuste y complejidad. Los resultados muestran que el primer modelo obtiene un AIC de 1175,625, mientras que el segundo registra un valor de 1104,047.

La diferencia de 71,578 puntos evidencia una ventaja considerable del segundo modelo, que incorpora los tres indicadores económicos y la variable categórica mensual. Esto sugiere que la inclusión de información asociada al mes del año mejora el ajuste estadístico lo suficiente para compensar la incorporación de parámetros adicionales.

En consecuencia, de acuerdo con el criterio AIC, el modelo múltiple 2 constituye la especificación preferible entre las dos alternativas evaluadas. Sin embargo, esta selección se limita al ajuste dentro de la muestra y debe complementarse con el análisis de los residuos y la evaluación del desempeño predictivo mediante validación temporal.

Gráficos de diagnóstico

# Diagnóstico gráfico del modelo múltiple 2

par(mfrow = c(2, 2))

plot(modelo_multiple_2)

par(mfrow = c(1, 1))

Diagnóstico gráfico de los residuos del modelo múltiple 2

El diagnóstico gráfico del segundo modelo de regresión múltiple permite identificar algunos aspectos relacionados con el comportamiento de los residuos y el cumplimiento de los supuestos del modelo lineal.

En primer lugar, el gráfico de residuos frente a valores ajustados muestra que la mayoría de las observaciones se concentra alrededor de cero. Sin embargo, se identifica una observación con un residuo considerablemente negativo, correspondiente al registro 109, lo que evidencia una diferencia importante entre el valor observado y el estimado por el modelo.

En segundo lugar, el gráfico Q-Q presenta desviaciones respecto a la línea de referencia, especialmente en la cola inferior de la distribución. Este comportamiento sugiere posibles problemas de normalidad en los residuos, asociados principalmente a la presencia de observaciones extremas.

Por su parte, el gráfico Scale-Location muestra una dispersión relativamente concentrada para la mayoría de los registros, aunque se identifican algunas observaciones con valores elevados. Si bien no se evidencia un patrón creciente pronunciado, no es posible confirmar visualmente el cumplimiento del supuesto de homocedasticidad.

Finalmente, el gráfico de residuos frente a leverage permite identificar observaciones que podrían tener una influencia importante en la estimación del modelo. En particular, los registros 109 y 110 presentan características que justifican una revisión individual, debido a su comportamiento residual y a su posición dentro del espacio de predictores, respectivamente.

En términos generales, los gráficos sugieren que el modelo presenta algunas desviaciones respecto a los supuestos clásicos de regresión lineal, especialmente en lo relacionado con la normalidad de los residuos y la posible presencia de observaciones influyentes. Por esta razón, es necesario complementar el diagnóstico visual con pruebas estadísticas y medidas de influencia antes de establecer conclusiones definitivas sobre la validez de la especificación.

Pruebas estadísticas complementarias

# Prueba de Shapiro-Wilk

shapiro.test(residuals(modelo_multiple_2))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo_multiple_2)
## W = 0.71987, p-value = 2.527e-16
# Instalar si es necesario
# install.packages("lmtest")

library(lmtest)
## Warning: package 'lmtest' was built under R version 4.5.3
## Cargando paquete requerido: zoo
## Warning: package 'zoo' was built under R version 4.5.3
## 
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
# Prueba de Breusch-Pagan

bptest(modelo_multiple_2)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo_multiple_2
## BP = 12.873, df = 14, p-value = 0.5365
# Prueba de Durbin-Watson

dwtest(modelo_multiple_2)
## 
##  Durbin-Watson test
## 
## data:  modelo_multiple_2
## DW = 1.8008, p-value = 0.09172
## alternative hypothesis: true autocorrelation is greater than 0

Resultados de las pruebas estadísticas de diagnóstico

Las pruebas estadísticas aplicadas a los residuos del segundo modelo de regresión múltiple permiten complementar el diagnóstico gráfico y evaluar algunos de los supuestos de la regresión lineal.

En primer lugar, la prueba de Shapiro-Wilk arroja un estadístico W de 0,71987 y un valor p de 2,527 × 10⁻¹⁶. Dado que este resultado es inferior al nivel de significancia del 5 %, se rechaza la hipótesis nula de normalidad. Por consiguiente, existe evidencia estadística de que los residuos no siguen una distribución normal, resultado que coincide con las desviaciones identificadas en el gráfico Q-Q y la presencia de observaciones extremas.

En segundo lugar, la prueba de Breusch-Pagan presenta un estadístico de 12,873 y un valor p de 0,5365. Al ser superior al nivel de significancia establecido, no se rechaza la hipótesis nula de homocedasticidad. Por tanto, no se encuentra evidencia estadística suficiente para afirmar que la varianza de los errores sea diferente entre las observaciones.

Finalmente, la prueba de Durbin-Watson registra un estadístico de 1,8008 y un valor p de 0,09172, bajo la alternativa de autocorrelación positiva. Este resultado no permite rechazar la hipótesis nula al 5 %, aunque sí proporciona evidencia débil de autocorrelación positiva al considerar un nivel de significancia del 10 %.

En conjunto, los resultados indican que el modelo presenta principalmente dificultades relacionadas con la normalidad de los residuos, mientras que las pruebas de heterocedasticidad y autocorrelación no muestran evidencia suficiente de incumplimiento al nivel convencional del 5 %. Estas limitaciones deben considerarse al interpretar la inferencia estadística del modelo, sin asumir que necesariamente invalidan su capacidad predictiva.

Identificación de observaciones influyentes

# Calcular distancias de Cook

distancia_cook <- cooks.distance(
  modelo_multiple_2
)

# Establecer umbral de referencia

umbral_cook <- 4 / nobs(modelo_multiple_2)

# Identificar observaciones que superan el umbral

observaciones_influyentes <- which(
  distancia_cook > umbral_cook
)

# Mostrar observaciones identificadas

observaciones_influyentes
##  97 109 110 119 
##  97 109 110 119
# Mostrar sus distancias de Cook

distancia_cook[observaciones_influyentes]
##         97        109        110        119 
## 0.04702841 0.41741208 0.19602414 0.03026601
# Mostrar el umbral utilizado

umbral_cook
## [1] 0.02439024

La evaluación de las observaciones potencialmente influyentes se realizó mediante la distancia de Cook, utilizando como criterio de referencia el umbral de 4/n, donde n corresponde al número de observaciones del modelo. Para las 164 observaciones analizadas, se obtuvo un umbral de 0,02439.

Los resultados permitieron identificar cuatro observaciones que superan este valor: los registros 97, 109, 110 y 119, cuyas distancias de Cook son 0,04703, 0,41741, 0,19602 y 0,03027, respectivamente. Entre ellas, la observación 109 presenta la mayor distancia, seguida de la observación 110, lo que indica que ambas podrían ejercer una influencia importante sobre los coeficientes estimados.

Estos resultados son consistentes con el diagnóstico gráfico de residuos, en el cual se habían identificado observaciones con valores extremos y niveles de leverage relativamente elevados. En particular, la observación 109 también presenta un residuo considerablemente negativo.

En consecuencia, se considera necesario revisar individualmente los registros identificados para determinar si corresponden a errores de información o a fluctuaciones reales de la actividad económica. No se procederá a eliminarlos automáticamente, dado que su exclusión podría alterar la representatividad de la muestra y modificar las conclusiones del análisis.

observaciones identificadas

# Revisar observaciones potencialmente influyentes

base_modelos %>%
  mutate(
    Distancia_Cook = distancia_cook
  ) %>%
  slice(c(97, 109, 110, 119)) %>%
  select(
    FECHA,
    FECHA_objetivo,
    IPIR_V_obj,
    CEM_V,
    ENER_V,
    ISE,
    MES,
    Distancia_Cook
  ) %>%
  kable(
    digits = 4,
    caption = "Observaciones potencialmente influyentes"
  )
Observaciones potencialmente influyentes
FECHA FECHA_objetivo IPIR_V_obj CEM_V ENER_V ISE MES Distancia_Cook
2020-04-01 2020-05-01 85.1076 21510.91 175.9330 83.1110 May 0.0470
2021-04-01 2021-05-01 37.7873 80196.45 219.3673 104.2704 May 0.4174
2021-05-01 2021-06-01 100.5571 11484.85 149.2307 101.6831 Jun 0.1960
2022-02-01 2022-03-01 122.5829 96066.29 235.3400 111.2795 Mar 0.0303

La identificación de observaciones influyentes mediante la distancia de Cook permitió detectar cuatro registros que superan el umbral de referencia de 0,02439. Estos corresponden a los periodos objetivo de mayo de 2020, mayo de 2021, junio de 2021 y marzo de 2022.

Entre ellos, destaca la observación correspondiente a mayo de 2021, que presenta una distancia de Cook de 0,4174 y un valor de producción industrial de 37,7873, considerablemente inferior al comportamiento general de la serie. Asimismo, la observación de junio de 2021 registra una distancia de 0,1960, asociada con valores particularmente bajos de despachos de cemento y consumo de energía.

Por otra parte, las observaciones correspondientes a mayo de 2020 y marzo de 2022 presentan distancias de Cook de 0,0470 y 0,0303, respectivamente. Aunque su influencia es menor, también superan el umbral establecido y podrían modificar parcialmente las estimaciones del modelo.

En conjunto, los resultados muestran que determinadas observaciones asociadas con fluctuaciones importantes de la actividad económica tienen una influencia considerable sobre la estimación de los coeficientes. Sin embargo, no se dispone de evidencia suficiente para clasificarlas como errores de registro. Por esta razón, se conservarán en la muestra principal y se tendrán en cuenta como una limitación del modelo, evitando eliminar información que podría representar variaciones económicas reales.

Validación temporal de los modelos de regresión múltiple

# VALIDACION TEMPORAL DE LOS MODELOS MULTIPLES

# Definir parametros

n_inicial <- 104
horizonte <- 12
n_particiones <- 5

# Crear lista de resultados

resultados_multiples <- list()

# Ejecutar validacion temporal

for (i in 1:n_particiones) {

  # Definir entrenamiento y prueba

  fin_entrenamiento <- n_inicial + (i - 1) * horizonte

  inicio_prueba <- fin_entrenamiento + 1
  fin_prueba <- fin_entrenamiento + horizonte

  entrenamiento <- base_modelos[1:fin_entrenamiento, ]

  prueba <- base_modelos[inicio_prueba:fin_prueba, ]

  # Modelo multiple 1

  modelo1 <- lm(
    IPIR_V_obj ~ CEM_V + ENER_V + ISE,
    data = entrenamiento
  )

  pred1 <- predict(modelo1, newdata = prueba)

  # Modelo multiple 2

  modelo2 <- lm(
    IPIR_V_obj ~ CEM_V + ENER_V + ISE + MES,
    data = entrenamiento
  )

  pred2 <- predict(modelo2, newdata = prueba)

  # Modelo de referencia: mediana

  pred_mediana <- median(
    entrenamiento$IPIR_V_obj
  )

  # Guardar resultados

  resultados_multiples[[i]] <- data.frame(
    Particion = i,
    Real = prueba$IPIR_V_obj,
    Pred_Multiple_1 = as.numeric(pred1),
    Pred_Multiple_2 = as.numeric(pred2),
    Pred_Mediana = pred_mediana
  )
}

# Unificar resultados

resultados_multiples <- bind_rows(
  resultados_multiples
)

# Verificar observaciones evaluadas

nrow(resultados_multiples)
## [1] 60
# Visualizar primeras observaciones

head(resultados_multiples)
##   Particion      Real Pred_Multiple_1 Pred_Multiple_2 Pred_Mediana
## 1         1  95.76380        96.17032        90.32750     97.64498
## 2         1 102.15021        99.54922        98.62898     97.64498
## 3         1 107.37552        99.17328       100.90312     97.64498
## 4         1  98.54686       101.65118        96.64273     97.64498
## 5         1  37.78728        96.49333        96.99860     97.64498
## 6         1 100.55712        66.64817        97.17640     97.64498

Calcular el MAE de los modelos múltiples

# Calcular MAE de los modelos multiples

comparacion_mae_multiple <- data.frame(

  Modelo = c(
    "Modelo multiple 1",
    "Modelo multiple 2",
    "Modelo de referencia: Mediana"
  ),

  MAE = c(

    mean(abs(
      resultados_multiples$Real -
      resultados_multiples$Pred_Multiple_1
    )),

    mean(abs(
      resultados_multiples$Real -
      resultados_multiples$Pred_Multiple_2
    )),

    mean(abs(
      resultados_multiples$Real -
      resultados_multiples$Pred_Mediana
    ))
  )
)

# Ordenar de menor a mayor MAE

comparacion_mae_multiple <- comparacion_mae_multiple %>%
  arrange(MAE)

# Mostrar resultados

knitr::kable(
  comparacion_mae_multiple,
  digits = 4,
  caption = "Comparacion del desempeno predictivo de los modelos multiples"
)
Comparacion del desempeno predictivo de los modelos multiples
Modelo MAE
Modelo multiple 2 7.1264
Modelo multiple 1 8.5918
Modelo de referencia: Mediana 12.8493

La evaluación mediante validación temporal permitió comparar el desempeño predictivo de los modelos de regresión simple y múltiple, utilizando cinco particiones de entrenamiento y evaluación, con un total de 60 observaciones destinadas a la validación.

Los resultados muestran que el modelo múltiple 2, que incorpora los despachos de cemento (CEM_V), el consumo de energía (ENER_V), el Índice de Seguimiento a la Economía (ISE) y la variable categórica mensual (MES), presenta el menor error absoluto medio, con un MAE de 7,1264. Esto significa que sus predicciones se alejan, en promedio, aproximadamente 7,13 puntos de los valores reales de producción industrial.

Por su parte, el modelo múltiple 1, que incluye únicamente los tres indicadores económicos, registra un MAE de 8,5918. Aunque presenta un desempeño favorable, su error es superior al del segundo modelo, lo que sugiere que incorporar información sobre el mes del año contribuye a mejorar la precisión de las predicciones.

Al comparar los resultados con los modelos simples, se observa que el modelo basado exclusivamente en el ISE presenta un MAE de 8,7526, mientras que el modelo múltiple 2 consigue reducir este error aproximadamente un 18,58 %. Asimismo, frente al modelo de referencia basado en la mediana, cuyo MAE es de 12,8493, la segunda especificación múltiple logra una reducción del error cercana al 44,54 %.

En consecuencia, la validación temporal proporciona evidencia favorable a la segunda especificación múltiple, dado que presenta el menor error de predicción entre todas las alternativas evaluadas. Estos resultados sugieren que la combinación de indicadores económicos y el control de las diferencias mensuales permite representar de manera más precisa el comportamiento de la producción industrial del Valle del Cauca.

Por tanto, el modelo múltiple 2 se identifica como la mejor alternativa predictiva entre las especificaciones analizadas, aunque sus resultados deben interpretarse considerando las limitaciones identificadas en el diagnóstico de residuos, particularmente la falta de normalidad y la posible presencia de observaciones influyentes.

Visualización comparativa de los resultados

# Unificar resultados de modelos simples y multiples

comparacion_final <- bind_rows(
  comparacion_mae,
  comparacion_mae_multiple
) %>%
  distinct(Modelo, .keep_all = TRUE) %>%
  arrange(MAE)

# Mostrar tabla consolidada

kable(
  comparacion_final,
  digits = 4,
  caption = "Comparacion general del desempeno predictivo"
)
Comparacion general del desempeno predictivo
Modelo MAE
Modelo multiple 2 7.1264
Modelo multiple 1 8.5918
Regresion simple: ISE 8.7526
Regresion simple: CEM_V 9.5151
Regresion simple: ENER_V 11.9962
Modelo de referencia: Mediana 12.8493
ggplot(
  comparacion_final,
  aes(
    x = reorder(Modelo, MAE),
    y = MAE
  )
) +
  geom_col(fill = "steelblue", width = 0.7) +
  geom_text(
    aes(label = round(MAE, 4)),
    hjust = -0.2,
    size = 3.5
  ) +
  coord_flip() +
  labs(
    title = "Comparación del desempeño predictivo",
    subtitle = "Validación temporal mediante MAE",
    x = "Modelo",
    y = "Error absoluto medio (MAE)"
  ) +
  expand_limits(y = max(comparacion_final$MAE) * 1.12) +
  theme_minimal()

Análisis gráfico del desempeño predictivo

El gráfico comparativo del error absoluto medio (MAE) permite visualizar las diferencias en el desempeño predictivo de los modelos estimados. Se observa que el modelo de referencia basado en la mediana presenta el mayor error, seguido de la regresión simple con consumo de energía (ENER_V) y la regresión simple con despachos de cemento (CEM_V).

Por su parte, el modelo simple basado en el ISE y el modelo múltiple 1 presentan errores inferiores, aunque todavía superiores al registrado por el modelo múltiple 2. Este último obtiene el menor MAE, con un valor de 7,1264, lo que evidencia una mayor precisión promedio en sus predicciones.

En consecuencia, la representación gráfica respalda los resultados de la validación temporal y permite identificar al modelo múltiple 2, que incorpora los indicadores económicos y la variable categórica mensual, como la mejor alternativa predictiva entre las especificaciones evaluadas.

Estimación del modelo logarítmico

# Verificar valores positivos

min(base_modelos$IPIR_V_obj, na.rm = TRUE)
## [1] 37.78728
# Estimar modelo logaritmico

modelo_log <- lm(
  log(IPIR_V_obj) ~ CEM_V + ENER_V + ISE + MES,
  data = base_modelos
)

# Resultados del modelo

summary(modelo_log)
## 
## Call:
## lm(formula = log(IPIR_V_obj) ~ CEM_V + ENER_V + ISE + MES, data = base_modelos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.89068 -0.02698  0.00111  0.03226  0.13424 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  4.012e+00  1.801e-01  22.275  < 2e-16 ***
## CEM_V        2.349e-06  9.844e-07   2.386  0.01828 *  
## ENER_V      -1.166e-03  9.347e-04  -1.248  0.21410    
## ISE          4.825e-03  7.973e-04   6.052 1.11e-08 ***
## MESFeb       1.717e-01  3.805e-02   4.513 1.29e-05 ***
## MESMar       1.815e-01  3.710e-02   4.891 2.57e-06 ***
## MESApr       9.926e-02  3.750e-02   2.647  0.00899 ** 
## MESMay       7.515e-02  3.670e-02   2.048  0.04233 *  
## MESJun       1.592e-01  3.650e-02   4.362 2.39e-05 ***
## MESJul       2.042e-01  3.639e-02   5.613 9.43e-08 ***
## MESAug       2.110e-01  3.746e-02   5.633 8.59e-08 ***
## MESSep       2.221e-01  3.815e-02   5.822 3.45e-08 ***
## MESOct       2.192e-01  3.804e-02   5.760 4.65e-08 ***
## MESNov       1.665e-01  3.779e-02   4.405 2.01e-05 ***
## MESDec       1.113e-01  3.575e-02   3.114  0.00221 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.0878 on 149 degrees of freedom
## Multiple R-squared:  0.5618, Adjusted R-squared:  0.5206 
## F-statistic: 13.64 on 14 and 149 DF,  p-value: < 2.2e-16
# VALIDACION TEMPORAL DEL MODELO LOGARITMICO

resultados_log <- list()

for (i in 1:n_particiones) {

  fin_entrenamiento <- n_inicial +
    (i - 1) * horizonte

  inicio_prueba <- fin_entrenamiento + 1
  fin_prueba <- fin_entrenamiento + horizonte

  entrenamiento <- base_modelos[1:fin_entrenamiento, ]

  prueba <- base_modelos[inicio_prueba:fin_prueba, ]

  # Modelo original

  modelo_original <- lm(
    IPIR_V_obj ~ CEM_V + ENER_V + ISE + MES,
    data = entrenamiento
  )

  pred_original <- predict(
    modelo_original,
    newdata = prueba
  )

  # Modelo logaritmico

  modelo_log_cv <- lm(
    log(IPIR_V_obj) ~ CEM_V + ENER_V + ISE + MES,
    data = entrenamiento
  )

  pred_log <- predict(
    modelo_log_cv,
    newdata = prueba
  )

  # Correccion de retransmision de Duan

  factor_duan <- mean(
    exp(residuals(modelo_log_cv))
  )

  # Regresar a escala original

  pred_log_original <- exp(pred_log) * factor_duan

  resultados_log[[i]] <- data.frame(
    Particion = i,
    Real = prueba$IPIR_V_obj,
    Pred_Original = as.numeric(pred_original),
    Pred_Log = as.numeric(pred_log_original)
  )
}

# Unificar resultados

resultados_log <- bind_rows(resultados_log)

# Comparar MAE

comparacion_transformaciones <- data.frame(
  Modelo = c(
    "Modelo original",
    "Modelo logaritmico"
  ),
  MAE = c(
    mean(abs(resultados_log$Real -
             resultados_log$Pred_Original)),
    mean(abs(resultados_log$Real -
             resultados_log$Pred_Log))
  )
)

kable(
  comparacion_transformaciones,
  digits = 4,
  caption = "Comparacion del MAE de las transformaciones"
)
Comparacion del MAE de las transformaciones
Modelo MAE
Modelo original 7.1264
Modelo logaritmico 7.5542

Comparación del modelo original y el modelo logarítmico

La evaluación de la transformación logarítmica se realizó mediante validación temporal, utilizando las mismas particiones de entrenamiento y evaluación del modelo original. Para garantizar la comparabilidad, las predicciones del modelo transformado fueron expresadas nuevamente en las unidades originales de la producción industrial mediante un factor de corrección de retransfomación.

Los resultados muestran que el modelo original presenta un MAE de 7,1264, mientras que el modelo logarítmico registra un valor de 7,5542. Esto representa un incremento aproximado del 6 % en el error de predicción después de aplicar la transformación.

En consecuencia, la transformación logarítmica no proporciona una mejora en la capacidad predictiva del modelo. Por esta razón, se considera más conveniente conservar la especificación original, que presenta un menor error absoluto medio y una mayor precisión en la predicción de la producción industrial del periodo siguiente.

Este resultado muestra que una transformación de las variables no garantiza necesariamente un mejor desempeño predictivo. La selección debe fundamentarse en la evaluación empírica y en la coherencia de los resultados obtenidos.

Selección definitiva del modelo

# Identificar los modelos existentes

ls(pattern = "^modelo")
##  [1] "modelo_log"        "modelo_log_cv"     "modelo_multiple_1"
##  [4] "modelo_multiple_2" "modelo_original"   "modelo_simple_1"  
##  [7] "modelo_simple_2"   "modelo_simple_3"   "modelo_step"      
## [10] "modelo1"           "modelo2"           "modelo3"
# Identificar las formulas de los modelos simples

formula(modelo1)
## IPIR_V_obj ~ CEM_V + ENER_V + ISE
formula(modelo2)
## IPIR_V_obj ~ CEM_V + ENER_V + ISE + MES
formula(modelo3)
## IPIR_V_obj ~ ISE
# Seleccion definitiva del modelo

seleccion_final <- data.frame(

  Modelo = c(
    "Regresion simple: CEM_V",
    "Regresion simple: ENER_V",
    "Regresion simple: ISE",
    "Modelo multiple 1",
    "Modelo multiple 2",
    "Modelo multiple 2 logaritmico"
  ),

  R2_ajustado = c(
    NA,
    NA,
    summary(modelo3)$adj.r.squared,
    summary(modelo_multiple_1)$adj.r.squared,
    summary(modelo_multiple_2)$adj.r.squared,
    summary(modelo_log)$adj.r.squared
  ),

  MAE = c(
    9.5151,
    11.9962,
    8.7526,
    8.5918,
    7.1264,
    7.5542
  )
)

# Ordenar por desempeno predictivo

seleccion_final <- seleccion_final %>%
  arrange(MAE)

# Presentar resultados

kable(
  seleccion_final,
  digits = 4,
  caption = "Seleccion definitiva del modelo predictivo"
)
Seleccion definitiva del modelo predictivo
Modelo R2_ajustado MAE
Modelo multiple 2 0.6558 7.1264
Modelo multiple 2 logaritmico 0.5206 7.5542
Modelo multiple 1 0.4328 8.5918
Regresion simple: ISE 0.3194 8.7526
Regresion simple: CEM_V NA 9.5151
Regresion simple: ENER_V NA 11.9962

Selección definitiva del modelo predictivo

La comparación de las especificaciones estimadas permite identificar diferencias en su capacidad explicativa y predictiva. Los resultados muestran que el modelo múltiple 2 presenta el mayor coeficiente de determinación ajustado, con un valor de 0,6558, lo que indica que explica aproximadamente el 65,58 % de la variabilidad de la producción industrial, considerando el número de predictores incluidos.

Asimismo, registra el menor error absoluto medio (MAE), con un valor de 7,1264, superando tanto al modelo múltiple 1 como a las regresiones simples y al modelo con transformación logarítmica.

Por su parte, el modelo múltiple 1 obtiene un R² ajustado de 0,4328 y un MAE de 8,5918, mientras que el modelo logarítmico presenta un R² ajustado de 0,5206 y un MAE de 7,5542. Aunque este último mejora el ajuste respecto al modelo múltiple 1, no supera la precisión predictiva del modelo múltiple 2.

En consecuencia, se selecciona el modelo múltiple 2 como la especificación más adecuada entre las alternativas evaluadas. Esta elección se fundamenta en su mayor capacidad explicativa y su menor error de predicción durante la validación temporal.

Escenarios hipotéticos

# Rangos de las variables explicativas

summary(
  base_modelos %>%
    select(CEM_V, ENER_V, ISE)
)
##      CEM_V            ENER_V           ISE        
##  Min.   : 11485   Min.   :149.2   Min.   : 81.68  
##  1st Qu.: 78089   1st Qu.:223.6   1st Qu.: 98.49  
##  Median : 85090   Median :230.2   Median :104.89  
##  Mean   : 85070   Mean   :229.4   Mean   :107.07  
##  3rd Qu.: 93758   3rd Qu.:236.4   3rd Qu.:118.56  
##  Max.   :119923   Max.   :259.4   Max.   :138.81
# Distribucion de los meses

table(base_modelos$MES)
## 
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
##  12  13  14  14  14  14  14  14  14  13  14  14

Construcción de escenarios hipotéticos

Con el propósito de evaluar la aplicación práctica del modelo seleccionado, se construyen dos escenarios hipotéticos para estimar el comportamiento de la producción industrial del Valle del Cauca. Los escenarios se definen a partir de los cuartiles de las variables explicativas observadas en la base de datos, utilizando el primer cuartil para representar condiciones de actividad económica relativamente bajas y el tercer cuartil para representar condiciones relativamente altas.

Para facilitar la comparación, ambos escenarios mantienen constante el mes de junio, de manera que las diferencias en las predicciones estén asociadas principalmente con los valores de los indicadores económicos. Para cada escenario se calculará la producción industrial estimada y su correspondiente intervalo de predicción del 95 %.

Construcción de los escenarios en R

# Construccion de escenarios hipoteticos

# Obtener primer y tercer cuartil

q1_cem <- quantile(base_modelos$CEM_V, 0.25)
q3_cem <- quantile(base_modelos$CEM_V, 0.75)

q1_ener <- quantile(base_modelos$ENER_V, 0.25)
q3_ener <- quantile(base_modelos$ENER_V, 0.75)

q1_ise <- quantile(base_modelos$ISE, 0.25)
q3_ise <- quantile(base_modelos$ISE, 0.75)

# Crear escenarios

escenarios <- data.frame(

  CEM_V = c(
    as.numeric(q1_cem),
    as.numeric(q3_cem)
  ),

  ENER_V = c(
    as.numeric(q1_ener),
    as.numeric(q3_ener)
  ),

  ISE = c(
    as.numeric(q1_ise),
    as.numeric(q3_ise)
  ),

  MES = factor(
    c("Jun", "Jun"),
    levels = levels(base_modelos$MES)
  )
)

# Identificar escenarios

escenarios$Escenario <- c(
  "Actividad moderada-baja",
  "Actividad moderada-alta"
)

# Mostrar escenarios

kable(
  escenarios,
  digits = 2,
  caption = "Valores de los escenarios hipoteticos"
)
Valores de los escenarios hipoteticos
CEM_V ENER_V ISE MES Escenario
78088.60 223.58 98.49 Jun Actividad moderada-baja
93757.94 236.42 118.56 Jun Actividad moderada-alta

Estimación de las predicciones y sus intervalos

# Predicciones e intervalos del 95 %

predicciones_escenarios <- predict(
  modelo_multiple_2,
  newdata = escenarios,
  interval = "prediction",
  level = 0.95
)

# Unir predicciones con escenarios

resultados_escenarios <- cbind(
  escenarios,
  as.data.frame(predicciones_escenarios)
)

# Seleccionar resultados

resultados_escenarios <- resultados_escenarios %>%
  select(
    Escenario,
    CEM_V,
    ENER_V,
    ISE,
    MES,
    fit,
    lwr,
    upr
  )

# Presentar resultados

kable(
  resultados_escenarios,
  digits = 4,
  col.names = c(
    "Escenario",
    "Cemento",
    "Energia",
    "ISE",
    "Mes",
    "Prediccion",
    "Limite inferior",
    "Limite superior"
  ),
  caption = "Predicciones e intervalos del 95 %"
)
Predicciones e intervalos del 95 %
Escenario Cemento Energia ISE Mes Prediccion Limite inferior Limite superior
Actividad moderada-baja 78088.60 223.5775 98.4927 Jun 96.6202 82.9488 110.2915
Actividad moderada-alta 93757.94 236.4190 118.5605 Jun 108.6995 94.9900 122.4089

Interpretación de los escenarios hipotéticos

Los resultados de los escenarios hipotéticos permiten analizar cómo cambia la producción industrial estimada ante diferentes condiciones de los indicadores económicos. En el escenario de actividad moderada-baja, construido a partir del primer cuartil de las variables explicativas, el modelo estima una producción industrial de 96,6202 puntos, con un intervalo de predicción del 95 % comprendido entre 82,9488 y 110,2915.

Por su parte, en el escenario de actividad moderada-alta, definido mediante el tercer cuartil de los indicadores, la producción industrial estimada alcanza 108,6995 puntos, con un intervalo de predicción entre 94,9900 y 122,4089.

La diferencia entre ambas estimaciones es de aproximadamente 12,08 puntos, lo que sugiere una asociación positiva entre mayores niveles de los indicadores económicos considerados y la producción industrial estimada. No obstante, los intervalos de predicción presentan una zona de superposición, por lo que no es posible establecer que los resultados de ambos escenarios sean estadísticamente diferentes.

En términos generales, los escenarios ilustran la utilidad del modelo para construir estimaciones condicionadas a diferentes contextos económicos. Sin embargo, deben interpretarse como ejercicios hipotéticos y no como pronósticos ciertos ni como evidencia de relaciones causales entre los indicadores y la producción industrial.

##Conclusiones generales

El desarrollo del Caso 2 permitió analizar el comportamiento de la producción industrial del Valle del Cauca mediante indicadores económicos relacionados con los despachos de cemento, el consumo de energía y el Índice de Seguimiento a la Economía (ISE). A partir de la exploración de la base de datos, se identificaron patrones de comportamiento, asociaciones entre las variables y observaciones atípicas que fueron consideradas durante la construcción y evaluación de los modelos econométricos.

En una primera etapa, las regresiones lineales simples permitieron identificar relaciones positivas entre la producción industrial y los indicadores económicos analizados. Posteriormente, la estimación de modelos de regresión múltiple permitió evaluar conjuntamente estas variables e incorporar el componente estacional mediante la variable categórica mensual. Los resultados mostraron que el segundo modelo múltiple presentó el mayor coeficiente de determinación ajustado (0,6558), lo que indica que explica aproximadamente el 65,58 % de la variabilidad de la producción industrial dentro de la muestra utilizada para su estimación.

La selección del modelo mediante el criterio de información de Akaike (AIC) respaldó la conservación de los indicadores económicos y la variable mensual, dado que el procedimiento paso a paso no encontró una especificación alternativa con un menor AIC. Asimismo, la evaluación del factor de inflación de la varianza (VIF) no evidenció problemas importantes de multicolinealidad entre las variables explicativas, por lo que no se identificaron razones estadísticas para excluirlas por este motivo.

En cuanto al diagnóstico de los residuos, se encontraron algunas limitaciones relacionadas con el cumplimiento de los supuestos clásicos de regresión. La prueba de Shapiro-Wilk evidenció desviaciones respecto a la normalidad, mientras que la prueba de Breusch-Pagan no identificó evidencia suficiente de heterocedasticidad. Por su parte, la prueba de Durbin-Watson no permitió rechazar la hipótesis de ausencia de autocorrelación positiva al nivel de significancia del 5 %. Adicionalmente, se identificaron cuatro observaciones potencialmente influyentes mediante la distancia de Cook, especialmente los registros correspondientes a mayo y junio de 2021. Estos resultados indican que la interpretación de los coeficientes y de la inferencia estadística debe realizarse con precaución.

La comparación del desempeño predictivo mediante validación temporal permitió identificar al modelo múltiple 2 como la mejor alternativa entre las especificaciones evaluadas. Este modelo obtuvo un error absoluto medio (MAE) de 7,1264, inferior al registrado por el modelo múltiple 1 (8,5918), la mejor regresión simple basada en el ISE (8,7526) y el modelo de referencia basado en la mediana (12,8493). Asimismo, la transformación logarítmica no produjo una mejora predictiva, dado que presentó un MAE de 7,5542. Por esta razón, se conservó la especificación original.

La construcción de escenarios hipotéticos permitió ilustrar la aplicación práctica del modelo seleccionado. Bajo condiciones de actividad económica moderada-baja, la producción industrial estimada fue de 96,6202 puntos, mientras que bajo condiciones moderadas-altas alcanzó 108,6995 puntos. Aunque estos resultados sugieren una asociación positiva entre los niveles de los indicadores económicos y la producción industrial estimada, los intervalos de predicción del 95 % presentan una zona de superposición, por lo que las diferencias deben interpretarse con cautela.

En términos generales, el modelo seleccionado constituye una herramienta de apoyo para el análisis y seguimiento de la actividad industrial del Valle del Cauca, ya que permite relacionar diferentes indicadores económicos, incorporar patrones mensuales y generar estimaciones bajo escenarios alternativos. Sus resultados podrían ser utilizados como insumo para ejercicios de monitoreo económico y planeación sectorial. Sin embargo, no deben interpretarse como relaciones causales ni como predicciones exactas.

Finalmente, se reconoce que la capacidad explicativa y predictiva del modelo está condicionada por las características de la información disponible, la presencia de observaciones influyentes, las desviaciones de normalidad de los residuos y la incertidumbre propia de las estimaciones. Por tanto, se recomienda actualizar periódicamente la información, ampliar el conjunto de variables explicativas y continuar evaluando el desempeño del modelo mediante validaciones temporales, con el propósito de mejorar su capacidad de adaptación ante cambios en las condiciones económicas.