Instalar/Cargar librerias necesarias para el análisis

#Cargar librerías necesarias
library(readxl)  # Para leer archivos Excel
library(tseries)  # Para pruebas de estacionariedad
library(forecast)  # Para modelado ARIMA y pronósticos
library(ggplot2)  # Para visualización de datos
library(plotly)  # Para gráficos interactivos
library(timetk)   #timetk simplifica y acelera el análisis exploratorio, visualización, y preparación de datos temporales para modelado. Es ideal para quienes trabajan con series temporales en un flujo de trabajo "tidy" y buscan integrar análisis visuales, detección de patrones y forecasting en un solo paquete.

Cargar base de datos

library(readxl)
data_col <-  read_excel("Base_Caso2.xlsx", 
    col_types = c("date", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric"))

PASO INDISPENSABLE: Declarar la (s) variable (s) como serie (s) temporal (es):

Variable 1

# Convertir/declarar variable 1=ENER en serie de tiempo mensual
variable1_ts <- ts(data_col$ENER, start = c(2012, 1), frequency = 12)

Variable 2

# Convertir/declarar el ISE en serie de tiempo  mensual
variable2_ts <- ts(data_col$ISE, start = c(2012, 1), frequency = 12)

Variable 3

# Convertir/declarar las exportaciones de combustibles en serie de tiempo mensual
variable3_ts <- ts(data_col$X_COMB, start = c(2012, 1), frequency = 12)

Extracción de señales

Gráfico inicial de la variable 1 en niveles -Original

library(ggplot2)
library(plotly)

# Convertir la serie temporal a un vector numérico para lograr graficar con ggplot2
data_col$variable1 <- as.numeric(variable1_ts)

# Crear el gráfico
grafico_serie <- ggplot(data_col, aes(x = seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = nrow(data_col)), 
                                      y = variable1)) +
  geom_line(color = "grey", linewidth = 0.4) +  # Cambiado 'size' por 'linewidth'
  geom_point(color = "black", size = 0.1) +
  ggtitle("Variable 1: Serie original") +
  xlab("Tiempo") +
  ylab("Unidad Variable 1") +
  theme_minimal()

ggplotly(grafico_serie)

Extracción señales variable 1 La energía eléctrica en Colombia (GWh) presenta una tendencia positiva entre enero de 2012 y diciembre de 2024, con un valor promedio de 1.843,7 GWh mensuales. La serie muestra oscilaciones recurrentes que sugieren la presencia de un componente estacional fuerte, posiblemente asociado a los meses de menor actividad industrial y a los ciclos del fenómeno El Niño, que afecta la generación hídrica del país. El hecho más llamativo de la serie es la caída pronunciada registrada en abril de 2020, donde el consumo se desplomó un 28,8%** frente a diciembre de 2019 (de 1.926 a 1.371 GWh), consecuencia directa del confinamiento obligatorio por la pandemia del COVID-19. Tras ese mínimo histórico, la serie se recuperó con rapidez y alcanzó su valor máximo en agosto de 2023, con 2.219,7 GWh, reflejando tanto la reactivación económica como el crecimiento estructural de la demanda energética nacional.**

# Cargar librerías necesarias
library(ggplot2)
library(plotly)

# Descomposición de la serie temporal
stl_decomp_var1 <- stl(variable1_ts, s.window = "periodic")

# Convertir la descomposición a un data frame para graficar con ggplot2
stl_df_var1 <- data.frame(
  Time = rep(time(variable1_ts), 4),  # Tiempo repetido para cada componente (son 4 componentes)
  Value = c(stl_decomp_var1$time.series[, "seasonal"], 
            stl_decomp_var1$time.series[, "trend"], 
            stl_decomp_var1$time.series[, "remainder"], 
            variable1_ts),
  Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(variable1_ts))
)

# Crear gráfico con ggplot2
p <- ggplot(stl_df_var1, aes(x = Time, y = Value, color = Component)) +
  geom_line() +
  facet_wrap(~Component, scales = "free_y", ncol = 1) + 
  theme_minimal() +
  labs(title = "Descomposición temporal de la variable 1",
       x = "Tiempo",
       y = "Valor")

# Convertir a gráfico interactivo con plotly
ggplotly(p)

Extracción señales variable 2 La descomposición STL de la energía eléctrica permite identificar con claridad los tres componentes que explican el comportamiento de la serie. El componente estacional** es el más regular de los tres: muestra un patrón que se repite cada año con picos y valles en los mismos meses, lo que indica que el consumo eléctrico tiene un ritmo anual estable vinculado a los ciclos de actividad industrial y comercial. La tendencia confirma el crecimiento estructural de la demanda: es creciente durante todo el período, con la única interrupción notable en 2020 (pandemia), seguida de una recuperación acelerada que retoma la trayectoria previa. El residuo se mantiene contenido en la mayor parte del período, lo que indica que el modelo captura bien la estructura de la serie; sin embargo, se observa un pico negativo marcado en abril de 2020 que corresponde al choque de la pandemia, un evento atípico que por su magnitud no puede ser absorbido completamente por el componente sistemático del modelo.**

# Cargar librerías necesarias
library(ggplot2)
library(plotly)

# Descomposición de la serie temporal
stl_decomp_var2 <- stl(variable2_ts, s.window = "periodic")

# Convertir la descomposición a un data frame para graficar con ggplot2
stl_df_var2 <- data.frame(
  Time = rep(time(variable2_ts), 4),  # Tiempo repetido para cada componente
  Value = c(stl_decomp_var2$time.series[, "seasonal"], 
            stl_decomp_var2$time.series[, "trend"], 
            stl_decomp_var2$time.series[, "remainder"], 
            variable2_ts),
  Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(variable2_ts))
)

# Crear gráfico con ggplot2
p <- ggplot(stl_df_var2, aes(x = Time, y = Value, color = Component)) +
  geom_line() +
  facet_wrap(~Component, scales = "free_y", ncol = 1) + 
  theme_minimal() +
  labs(title = "Descomposición temporal de la variable 2",
       x = "Tiempo",
       y = "Valor")

# Convertir a gráfico interactivo con plotly
ggplotly(p)

Extracción señales variable 3 La descomposición del Índice de Seguimiento a la Economía (ISE) revela una estructura bien definida. El componente estacional** muestra variaciones regulares a lo largo del año asociadas a los ciclos de gasto público, temporadas comerciales y dinámicas sectoriales; su magnitud es moderada en comparación con la tendencia, lo que indica que la estacionalidad no domina el comportamiento del ISE. La tendencia es el componente más informativo: refleja el crecimiento sostenido de la economía colombiana desde 2012, la caída histórica de –19,5% registrada en abril de 2020 (de 103,2 a 83,1 puntos) y la posterior recuperación que llevó el índice a su valor máximo de 137,9 puntos en diciembre de 2024. El residuo presenta su pico más alto en 2020, evidenciando que el impacto de la pandemia fue un choque sin precedentes que superó lo capturado por los patrones sistemáticos del modelo. En los años posteriores el residuo se estabiliza, señal de que la economía retomó una trayectoria más predecible.**

# Cargar librerías necesarias
library(ggplot2)
library(plotly)

# Descomposición de la serie temporal
stl_decomp_var3 <- stl(variable3_ts, s.window = "periodic")

# Convertir la descomposición a un data frame para graficar con ggplot2
stl_df_var3 <- data.frame(
  Time = rep(time(variable3_ts), 4),  # Tiempo repetido para cada componente
  Value = c(stl_decomp_var3$time.series[, "seasonal"], 
            stl_decomp_var3$time.series[, "trend"], 
            stl_decomp_var3$time.series[, "remainder"], 
            variable3_ts),
  Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(variable3_ts))
)

# Crear gráfico con ggplot2
p <- ggplot(stl_df_var3, aes(x = Time, y = Value, color = Component)) +
  geom_line() +
  facet_wrap(~Component, scales = "free_y", ncol = 1) + 
  theme_minimal() +
  labs(title = "Descomposición temporal de la variable 3",
       x = "Tiempo",
       y = "Valor")

# Convertir a gráfico interactivo con plotly
ggplotly(p)

Después de la descomposición temporal de cada variable, se extrae la variable ajustada por estacionalidad para graficarla junto con la serie original: Las exportaciones colombianas de combustibles (USD) presentan la descomposición más compleja de las tres variables. El componente estacional** es de menor magnitud relativa, lo que indica que las exportaciones de petróleo no siguen ciclos domésticos fuertes sino que responden principalmente a factores externos. La tendencia cuenta una historia estructural relevante: la serie alcanzó su máximo en los primeros meses del período analizado (marzo de 2012, con USD 3.870 millones), momento en que los precios internacionales del crudo estaban en niveles altos; a partir de 2014–2015 la tendencia cae de manera sostenida en línea con el desplome del precio del petróleo a nivel global y la reducción de la producción nacional. El residuo es considerablemente mayor que en las otras dos variables, lo que refleja la alta exposición de las exportaciones de combustibles a shocks externos impredecibles: cambios abruptos en el precio del Brent, decisiones de la OPEP y choques de demanda como el de abril de 2020, cuando las exportaciones tocaron su mínimo histórico de USD 701.774 (una caída del –81,9% frente al máximo).**

Se crea la variable1 ajustada por estacionalidad

# Extraer los componentes de la descomposición
variable1_sa <- variable1_ts - stl_decomp_var1$time.series[, "seasonal"]

Se crea la variable2 ajustada por estacionalidad

# Extraer los componentes de la descomposición
variable2_sa <- variable2_ts - stl_decomp_var2$time.series[, "seasonal"]

Se crea la variable3 ajustada por estacionalidad

# Extraer los componentes de la descomposición
variable3_sa <- variable3_ts - stl_decomp_var3$time.series[, "seasonal"]

Ahora si se puede graficar las series originales versus la ajustada por estacionalidad

Gráfico serie original VS ajustada Variable 1

# Crear vector de fechas correctamente alineado con la serie
fechas_var1 <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable1_ts))

# Gráfico mejorado con fechas en el eje X
grafico_ajustada_var1 <- ggplot() +
  geom_line(aes(x = fechas_var1, y = variable1_ts), color = "grey", size = 0.5, linetype = "solid", name = "Serie Original") +
  geom_line(aes(x = fechas_var1, y = variable1_sa), color = "black", size = 0.6, linetype = "solid", name = "Serie Ajustada") +
  ggtitle("Variable 1:Serie Original vs Serie Ajustada por Estacionalidad") +
  xlab("Tiempo") +
  ylab("Unidad de medida variable 1") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas para mejor visualización

# Convertir a gráfico interactivo
ggplotly(grafico_ajustada_var1)

Gráfico serie original VS ajustada Variable 2 Al eliminar el componente estacional de la energía eléctrica, la serie ajustada (línea negra) revela con mayor nitidez la tendencia subyacente de largo plazo. Las dos curvas siguen trayectorias muy similares, pero la ajustada elimina las oscilaciones regulares de corto plazo que aparecen en la original (línea gris), permitiendo que los cambios estructurales sean más visibles. La diferencia entre ambas es más pronunciada en los meses donde la estacionalidad es más intensa, confirmando que el componente estacional tiene una magnitud significativa en esta variable. La caída de 2020 es visible en ambas series, pero en la ajustada se puede apreciar con mayor claridad que el shock fue transitorio y que la tendencia de fondo nunca cambió de dirección. Este tipo de análisis es el que emplean el DANE y el Banco de la República para evaluar el comportamiento real del sector energético sin el ruido de los ciclos repetitivos.

# Crear vector de fechas correctamente alineado con la serie
fechas_var2 <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable2_ts))

# Gráfico mejorado con fechas en el eje X
grafico_ajustada_var2 <- ggplot() +
  geom_line(aes(x = fechas_var2, y = variable2_ts), color = "grey", size = 0.5, linetype = "solid", name = "Serie Original") +
  geom_line(aes(x = fechas_var2, y = variable2_sa), color = "black", size = 0.6, linetype = "solid", name = "Serie Ajustada") +
  ggtitle("Variable 2:Serie Original vs Serie Ajustada por Estacionalidad") +
  xlab("Tiempo") +
  ylab("Unidad de medida variable 2") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas para mejor visualización

# Convertir a gráfico interactivo
ggplotly(grafico_ajustada_var2)

Gráfico serie original VS ajustada Variable 3 En las exportaciones de combustibles, la diferencia entre la serie original y la ajustada por estacionalidad es relativamente pequeña en comparación con las otras dos variables, lo que confirma que el componente estacional de esta variable tiene una magnitud modesta frente a su volatilidad total. La serie ajustada (negra) sigue muy de cerca a la original (gris), indicando que las fluctuaciones que se observan en las exportaciones de combustibles no son principalmente de origen estacional sino que responden a factores estructurales y cíclicos: el precio internacional del crudo, la producción de los campos petroleros colombianos y la demanda global de energía. El elemento más destacado en ambas curvas sigue siendo la caída de 2020 y la pronunciada caída desde el pico de 2012–2014, confirmando que el problema de fondo en las exportaciones de combustibles es estructural y no estacional.

# Crear vector de fechas correctamente alineado con la serie
fechas_var3 <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable3_ts))

# Gráfico mejorado con fechas en el eje X
grafico_ajustada_var3 <- ggplot() +
  geom_line(aes(x = fechas_var3, y = variable3_ts), color = "grey", size = 0.5, linetype = "solid", name = "Serie Original") +
  geom_line(aes(x = fechas_var3, y = variable3_sa), color = "black", size = 0.6, linetype = "solid", name = "Serie Ajustada") +
  ggtitle("Variable 3:Serie Original vs Serie Ajustada por Estacionalidad") +
  xlab("Tiempo") +
  ylab("Unidad de medida variable 3") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas para mejor visualización

# Convertir a gráfico interactivo
ggplotly(grafico_ajustada_var3)

Ahora graficamos serie original vs tendencia La tendencia extraída de la energía eléctrica muestra una trayectoria de crecimiento gradual y sostenida a lo largo de todo el período. La serie original (gris) oscila permanentemente alrededor de la tendencia (negra), lo que indica que el modelo de descomposición captura bien el comportamiento central de la variable. La amplitud de esas oscilaciones es relativamente estable, señal de que no hay un incremento en la volatilidad de la demanda energética a lo largo del tiempo. El único momento en que la serie original se separa de manera significativa de la tendencia es en el período pandémico de 2020, cuando el consumo cayó abruptamente por debajo de la trayectoria de largo plazo. La rapidez con que la serie original regresó a la tendencia después de ese episodio evidencia la resiliencia estructural del sector energético colombiano: el choque fue severo pero transitorio.

Primero se debe obtener la tendencia de cada variable y luego graficarla

Tendencia Variable 1

library(ggplot2)
library(plotly)

# Convertir la serie a un vector numérico
variable1_vec <- as.numeric(variable1_ts)
tendencia_var1 <- as.numeric(stl_decomp_var1$time.series[, "trend"])

# Asegurar que 'fechas' tenga la misma longitud
fechas <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable1_ts))

# Gráfico interactivo de la serie original vs tendencia
grafico_tendencia_var1 <- ggplot() +
  geom_line(aes(x = fechas, y = variable1_vec, color = "Serie Original"), size = 0.7, linetype = "solid") +
  geom_line(aes(x = fechas, y = tendencia_var1, color = "Tendencia"), size = 0.8, linetype = "solid") +
  scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
  ggtitle("Variable 1: Serie Original vs Tendencia") +
  xlab("Tiempo") +
  ylab("Unidad de medida Variable 1") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas del eje X

# Convertir a gráfico interactivo con plotly
ggplotly(grafico_tendencia_var1)

Tendencia Variable 2 La comparación entre el ISE original y su tendencia es uno de los análisis más reveladores del conjunto. La tendencia (negra) muestra el crecimiento estructural de la economía colombiana de forma suavizada, mientras que la serie original (gris) oscila alrededor de ella reflejando el ciclo económico. Las brechas positivas (serie por encima de la tendencia) corresponden a períodos de expansión cíclica, mientras que las brechas negativas señalan episodios de desaceleración. La mayor ruptura se da en 2020, cuando el ISE original cae muy por debajo de la tendencia debido al confinamiento, para luego sobrepasar la tendencia en 2021 durante el rebote. En los años más recientes, la serie original nuevamente converge hacia la tendencia, sugiriendo que la economía colombiana se encuentra en una fase de normalización del ciclo, sin excesos al alza ni a la baja respecto a su trayectoria estructural.

library(ggplot2)
library(plotly)

# Convertir la serie a un vector numérico
variable2_vec <- as.numeric(variable2_ts)
tendencia_var2 <- as.numeric(stl_decomp_var2$time.series[, "trend"])

# Asegurar que 'fechas' tenga la misma longitud
fechas <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable2_ts))

# Gráfico interactivo de la serie original vs tendencia
grafico_tendencia_var2 <- ggplot() +
  geom_line(aes(x = fechas, y = variable2_vec, color = "Serie Original"), size = 0.7, linetype = "solid") +
  geom_line(aes(x = fechas, y = tendencia_var2, color = "Tendencia"), size = 0.8, linetype = "solid") +
  scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
  ggtitle("Variable 2: Serie Original vs Tendencia") +
  xlab("Tiempo") +
  ylab("Unidad de medida Variable 2") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas del eje X

# Convertir a gráfico interactivo con plotly
ggplotly(grafico_tendencia_var2)

Tendencia Variable 3 El gráfico de las exportaciones de combustibles frente a su tendencia es el que presenta mayor volatilidad entre las tres variables. La serie original (gris) se desvía de la tendencia (negra) con frecuencia y por magnitudes considerables, lo que refleja la alta sensibilidad de las exportaciones de petróleo a cambios abruptos en el precio internacional del crudo, en la producción nacional y en la demanda global. La tendencia confirma visualmente la caída estructural desde los niveles de 2012–2014: mientras que en ese período la tendencia se ubicaba por encima de USD 3.000 millones mensuales, al final del período analizado apenas supera los USD 1.800 millones. Esta divergencia entre el nivel histórico y el actual tiene implicaciones directas sobre la balanza comercial colombiana y los ingresos fiscales provenientes del sector petrolero, reforzando la necesidad de diversificar la canasta exportadora del país.

library(ggplot2)
library(plotly)

# Convertir la serie a un vector numérico
variable3_vec <- as.numeric(variable3_ts)
tendencia_var3 <- as.numeric(stl_decomp_var3$time.series[, "trend"])

# Asegurar que 'fechas' tenga la misma longitud
fechas <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable3_ts))

# Gráfico interactivo de la serie original vs tendencia
grafico_tendencia_var3 <- ggplot() +
  geom_line(aes(x = fechas, y = variable3_vec, color = "Serie Original"), size = 0.7, linetype = "solid") +
  geom_line(aes(x = fechas, y = tendencia_var3, color = "Tendencia"), size = 0.8, linetype = "solid") +
  scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
  ggtitle("Variable 3: Serie Original vs Tendencia") +
  xlab("Tiempo") +
  ylab("Unidad de medida Variable 3") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas del eje X

# Convertir a gráfico interactivo con plotly
ggplotly(grafico_tendencia_var3)

Ahora calculamos la tasa de crecimiento de la serie original vs tendencia:

Tasa de crecimiento de la serie de tendencia y original para la variable 1

#Cálculo de la tasa de crecimiento anual correctamente alineada
tasa_crecimiento_var1 <- (variable1_ts[(13:length(variable1_ts))] / variable1_ts[1:(length(variable1_ts) - 12)] - 1) * 100
tasa_tendencia_var1 <- (tendencia_var1[(13:length(tendencia_var1))] / tendencia_var1[1:(length(tendencia_var1) - 12)] - 1) * 100

# Crear vector de fechas corregido, es decir que inicie desde enero 2013
fechas_corregidas_var1 <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento_var1))

# Verificar longitudes
print(length(fechas_corregidas_var1))
## [1] 144
print(length(tasa_crecimiento_var1))
## [1] 144
print(length(tasa_tendencia_var1))
## [1] 144

*Gráfico variable original y tendencia variable 1: tasa de crecimiento anual**

library(ggplot2)
library(plotly)

# Gráfico de la tasa de crecimiento anual variable 1
grafico_crecimiento_var1 <- ggplot() +
  geom_line(aes(x = fechas_corregidas_var1, y = tasa_crecimiento_var1), color = "grey", size = 0.7) +
  geom_line(aes(x = fechas_corregidas_var1, y = tasa_tendencia_var1), color = "black", size = 0.8, linetype = "dashed") +
  ggtitle("Variable1: Tasa de crecimiento anual % de la serie Original y la tendencia") +
  xlab("Tiempo") +
  ylab("% de Crecimiento Anual") +
  theme_minimal()

# Convertir a gráfico interactivo
ggplotly(grafico_crecimiento_var1)

Ahora calculamos la tasa de crecimiento de la serie original vs tendencia: variable 2 La tasa de crecimiento anual de la energía eléctrica (línea gris) muestra una alta variabilidad intermensual, con oscilaciones que en algunos períodos superan el ±10%. La tendencia de esa tasa (línea negra discontinua) permite identificar el patrón de fondo con mayor claridad: durante 2012–2019 el crecimiento estructural del consumo energético se mantuvo positivo pero modesto, en el rango de 1% a 4% anual. La pandemia de 2020 provocó la caída más pronunciada de la serie, llevando la tasa a niveles negativos por debajo del –20%. La recuperación posterior fue igualmente acelerada, con tasas positivas superiores al 10% en 2021. En los años más recientes, la tendencia de la tasa de crecimiento ha vuelto a valores positivos moderados, indicando que el consumo energético continúa creciendo, pero a un ritmo que se ha normalizado tras el rebote post-pandémico.

#Cálculo de la tasa de crecimiento anual correctamente alineada
tasa_crecimiento_var2 <- (variable2_ts[(13:length(variable2_ts))] / variable2_ts[1:(length(variable2_ts) - 12)] - 1) * 100
tasa_tendencia_var2 <- (tendencia_var2[(13:length(tendencia_var2))] / tendencia_var2[1:(length(tendencia_var2) - 12)] - 1) * 100

# Crear vector de fechas corregido
fechas_corregidas_var2 <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento_var2))

# Verificar longitudes
print(length(fechas_corregidas_var2))
## [1] 144
print(length(tasa_crecimiento_var2))
## [1] 144
print(length(tasa_tendencia_var2))
## [1] 144
# Gráfico de la tasa de crecimiento anual variable 2
grafico_crecimiento_var2 <- ggplot() +
  geom_line(aes(x = fechas_corregidas_var2, y = tasa_crecimiento_var2), color = "grey", size = 0.7) +
  geom_line(aes(x = fechas_corregidas_var2, y = tasa_tendencia_var2), color = "black", size = 0.8, linetype = "dashed") +
  ggtitle("Variable2: Tasa de crecimiento anual % de la serie Original y la Tendencia") +
  xlab("Tiempo") +
  ylab("% de Crecimiento Anual") +
  theme_minimal()

# Convertir a gráfico interactivo
ggplotly(grafico_crecimiento_var2)

Ahora calculamos la tasa de crecimiento de la serie original vs tendencia: variable 3 La tasa de crecimiento anual del ISE (línea gris) es el indicador que con mayor claridad resume el ciclo económico colombiano en el período analizado. Durante 2012–2019 la economía creció de forma sostenida con tasas entre 1% y 6% anuales. El año 2020 representa el episodio más negativo de toda la serie: la actividad económica se contrajo en cerca del –15%** en los peores meses del confinamiento, la mayor caída registrada en la historia económica reciente del país. La recuperación de 2021 fue simétrica en velocidad: las tasas de crecimiento anual superaron el 10% en los meses de mayor rebote. La tendencia de la tasa (línea negra discontinua) muestra con claridad que, tras ese ciclo de caída y recuperación, el crecimiento estructural de la economía colombiana se ha moderado y estabilizado en tasas por debajo del 3%, lo que sugiere un regreso a la dinámica de crecimiento moderado característico del período pre-pandémico.**

#Cálculo de la tasa de crecimiento anual correctamente alineada
tasa_crecimiento_var3 <- (variable3_ts[(13:length(variable3_ts))] / variable3_ts[1:(length(variable3_ts) - 12)] - 1) * 100
tasa_tendencia_var3 <- (tendencia_var3[(13:length(tendencia_var3))] / tendencia_var3[1:(length(tendencia_var3) - 12)] - 1) * 100

# Crear vector de fechas corregido
fechas_corregidas_var3 <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento_var3))

# Verificar longitudes
print(length(fechas_corregidas_var3))
## [1] 144
print(length(tasa_crecimiento_var3))
## [1] 144
print(length(tasa_tendencia_var3))
## [1] 144
# Gráfico de la tasa de crecimiento anual variable 2
grafico_crecimiento_var3 <- ggplot() +
  geom_line(aes(x = fechas_corregidas_var3, y = tasa_crecimiento_var3), color = "grey", size = 0.7) +
  geom_line(aes(x = fechas_corregidas_var3, y = tasa_tendencia_var3), color = "black", size = 0.8, linetype = "dashed") +
  ggtitle("Variable3: Tasa de crecimiento anual % de la serie Original y la tendencia") +
  xlab("Tiempo") +
  ylab("% de Crecimiento Anual") +
  theme_minimal()

# Convertir a gráfico interactivo
ggplotly(grafico_crecimiento_var3)

Analizar la tasa de crecimiento anual ayuda a detectar cambios en el entorno económico que afectan el sector. Se pueden prever crisis o períodos de auge y prepararse para ellos. La tasa de crecimiento anual de las exportaciones de combustibles (línea gris) es la más volátil de las tres variables analizadas, con oscilaciones que en algunos períodos superan el ±50%. Esta volatilidad extrema refleja la doble dependencia de la variable: tanto de los precios internacionales del crudo (que pueden variar de forma abrupta por decisiones geopolíticas o shocks de demanda) como de los niveles de producción nacional (que han mostrado una tendencia decreciente estructural). La tendencia de la tasa de crecimiento (línea negra discontinua) ha sido predominantemente negativa desde 2014–2015, confirmando la pérdida de dinamismo del sector. El pico negativo más profundo se registra en 2020, con caídas superiores al –70% en los meses más críticos. Los repuntes posteriores asociados al alza del precio del petróleo en 2021–2022 no lograron revertir la tendencia de largo plazo, que continúa en terreno negativo o cercano a cero hacia el final del período, señalando que las exportaciones de combustibles seguirán siendo un factor de presión sobre la balanza comercial colombiana en el corto plazo.