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("C:/Users/alexg/Downloads/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)
variable1_ts
##           Jan      Feb      Mar      Apr      May      Jun      Jul      Aug
## 2012 1595.273 1544.653 1718.766 1574.681 1687.182 1630.558 1673.152 1700.788
## 2013 1666.811 1527.898 1648.842 1722.114 1745.650 1637.149 1727.935 1731.272
## 2014 1706.919 1677.512 1765.809 1676.925 1783.913 1700.258 1775.461 1773.788
## 2015 1722.385 1669.782 1805.358 1672.252 1824.030 1719.355 1799.682 1779.533
## 2016 1766.639 1752.126 1747.462 1685.912 1745.006 1712.774 1686.072 1823.924
## 2017 1720.523 1653.542 1747.670 1667.423 1748.151 1706.837 1736.774 1792.472
## 2018 1774.291 1670.436 1800.131 1769.603 1828.144 1789.760 1850.545 1922.534
## 2019 1835.277 1739.269 1884.378 1816.874 1916.032 1836.890 1904.306 1953.351
## 2020 1910.636 1886.473 1793.435 1370.977 1562.429 1616.347 1807.862 1827.641
## 2021 1772.665 1724.037 1940.417 1847.864 1730.073 1871.616 2001.046 2007.131
## 2022 2015.024 1910.252 2105.817 2015.557 2109.814 2049.652 2137.146 2175.928
## 2023 2111.918 1966.525 2195.879 2039.239 2162.926 2076.371 2109.956 2219.682
## 2024 2111.494 2035.827 2120.471 2080.841 2116.916 2008.870 2114.820 2110.274
##           Sep      Oct      Nov      Dec
## 2012 1701.881 1702.813 1667.827 1602.992
## 2013 1697.606 1749.571 1715.983 1666.543
## 2014 1768.670 1809.629 1713.567 1711.971
## 2015 1827.011 1849.687 1736.973 1780.939
## 2016 1739.739 1757.674 1716.030 1722.647
## 2017 1748.235 1776.851 1741.672 1719.700
## 2018 1836.883 1885.882 1838.045 1833.789
## 2019 1884.420 1935.010 1860.997 1926.223
## 2020 1800.417 1853.505 1790.791 1816.589
## 2021 2022.873 2094.568 2032.648 2013.006
## 2022 2117.970 2178.745 2088.379 2073.252
## 2023 2172.905 2191.480 2118.676 2096.022
## 2024 2080.620 2155.514 2061.612 2085.775

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)

La gráfica muestra una serie temporal con una tendencia creciente muy marcada, donde los valores avanzan de aproximadamente 1.500 a más de 2.200 entre 2013 y 2025, lo que revela un crecimiento estructural sostenido en el tiempo; sobre esta trayectoria ascendente se observan fluctuaciones irregulares de corto plazo que representan ruido o variabilidad transitoria sin alterar la dirección general, pero el elemento más relevante es una caída abrupta alrededor de 2020, que constituye una señal clara de choque exógeno o ruptura temporal en la dinámica habitual de la serie; tras este evento, la variable no solo se recupera sino que supera ampliamente los niveles previos, lo que sugiere un posible cambio de régimen o un nuevo nivel estructural más alto, de modo que, desde la perspectiva de extracción de señales, la serie combina una tendencia dominante, un shock significativo y un reajuste posterior que redefine su comportamiento de largo plazo.

Extracción señales variable 1

# 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)

La gráfica significa que la variable crece de manera constante con el tiempo, mostrando solo pequeñas subidas y bajadas normales, pero alrededor de 2020 ocurre una caída fuerte causada probablemente por un evento externo que interrumpió su comportamiento habitual; después de ese golpe, la serie se recupera rápidamente y alcanza valores más altos que antes, lo que indica que el sistema no solo volvió a la normalidad sino que quedó en un nivel más fuerte, de modo que las causas pueden ser crecimiento natural, variaciones normales y un choque puntual, mientras que las consecuencias son una recuperación sólida, un nuevo nivel más alto y una tendencia general positiva.

Extracción señales variable 2

# 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)

La descomposición de la variable 2 muestra que la tendencia es el componente más importante: la serie sube de forma clara a lo largo del tiempo, lo que indica un crecimiento sostenido; la estacionalidad aparece, pero es muy suave y no cambia mucho el comportamiento general, por lo que solo introduce pequeñas variaciones repetitivas; el residuo contiene los movimientos irregulares y los momentos en los que la serie se desvía de lo esperado, incluyendo algunos picos y caídas que representan eventos puntuales o ruido; y la serie original es simplemente la combinación de todo esto. En conjunto, la variable 2 muestra un comportamiento estable y creciente, con pequeñas variaciones normales y algunos movimientos inesperados, pero sin señales de inestabilidad fuerte.

Extracción señales variable 3

# 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)

La descomposición de la variable 3 muestra que la tendencia es claramente ascendente, lo que significa que la variable crece de manera sostenida a lo largo del tiempo; la estacionalidad aparece como un patrón suave y repetitivo que introduce pequeñas variaciones regulares pero no altera el comportamiento general; el residuo contiene los movimientos inesperados, picos y caídas que no siguen ningún patrón y representan ruido o eventos puntuales; y la serie original es simplemente la combinación de estos tres componentes. En conjunto, la variable 3 se comporta como una serie estable y creciente, con pequeñas oscilaciones normales y algunos movimientos irregulares, pero sin señales de inestabilidad fuerte ni cambios bruscos en su estructura.

Después de la descomposición temporal de cada variable, se extrae la variable ajustada por estacionalidad para graficarla junto con la serie original:

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)

La gráfica muestra que la serie original y la serie ajustada siguen prácticamente la misma trayectoria, lo que significa que la estacionalidad es muy baja y no altera de forma importante el comportamiento de la variable; ambas líneas mantienen una tendencia creciente a lo largo del tiempo, con una caída marcada alrededor de 2020 que refleja un choque externo, y luego una recuperación que lleva la serie a niveles más altos y estables; la diferencia entre las dos curvas es mínima, por lo que el ajuste estacional simplemente elimina pequeñas variaciones repetitivas, permitiendo ver con mayor claridad la tendencia real y confirmar que el crecimiento observado no se debe a efectos estacionales sino a cambios estructurales en la variable

Gráfico serie original VS ajustada Variable 2

# 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)

La gráfica muestra que la variable 2 tiene fluctuaciones estacionales claras, es decir, subidas y bajadas que se repiten cada cierto tiempo, pero cuando se elimina ese efecto estacional la serie ajustada revela un comportamiento mucho más suave y limpio, donde se aprecia mejor la tendencia real, que es crecientemente estable a lo largo de los años; ambas series muestran una caída marcada alrededor de 2020, señal de un evento externo fuerte, y luego una recuperación que continúa el crecimiento; en resumen, la serie original refleja variaciones repetitivas propias de la estacionalidad, mientras que la serie ajustada permite ver que, más allá de esos ciclos, la variable mantiene un crecimiento sostenido, con un impacto temporal en 2020 y una recuperación sólida después.

Gráfico serie original VS ajustada Variable 3

# 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)

La gráfica muestra que la variable 3 tiene fluctuaciones fuertes y picos marcados, pero cuando se elimina la estacionalidad la serie ajustada se vuelve mucho más suave y estable, lo que permite ver mejor la tendencia real, que es creciente a lo largo del tiempo; los picos alrededor de 2015 y 2021 y las caídas cerca de 2018 y 2020 reflejan variaciones estacionales o eventos puntuales que afectan la serie original, pero al ajustar por estacionalidad se observa que, más allá de esos movimientos repetitivos, la variable mantiene un crecimiento sostenido, con un impacto temporal en 2020 y una recuperación posterior que la lleva nuevamente a niveles altos.

Ahora graficamos serie original vs tendencia

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)

La gráfica muestra que la serie original tiene muchas subidas y bajadas pequeñas, pero cuando se observa la línea de tendencia, se ve claramente que la variable sigue un crecimiento sostenido a lo largo del tiempo, con una caída marcada alrededor de 2020 que refleja un evento externo fuerte, seguida de una recuperación que lleva la serie nuevamente a su trayectoria ascendente; en otras palabras, la tendencia revela el comportamiento “real” y de largo plazo de la variable, mientras que la serie original incluye el ruido y las variaciones temporales, por lo que comparar ambas permite entender que, a pesar de las fluctuaciones, la variable mantiene un patrón general de crecimiento estable.

Tendencia Variable 2

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)

La gráfica muestra que la variable 2 tiene muchas subidas y bajadas pequeñas en la serie original, pero cuando se observa la línea de tendencia, se ve claramente que el comportamiento real de largo plazo es un crecimiento continuo, con una caída marcada alrededor de 2020 que refleja un evento externo fuerte, seguida de una recuperación que retoma la trayectoria ascendente; en otras palabras, la tendencia revela que, más allá de las fluctuaciones normales y el ruido, la variable mantiene un patrón estable y creciente, y la comparación entre ambas líneas permite distinguir lo que es movimiento temporal de lo que es evolución estructural.

Tendencia Variable 3

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)

La gráfica muestra que la serie original de la variable 3 tiene fluctuaciones grandes, con picos y caídas que pueden deberse a estacionalidad, ciclos o eventos puntuales, pero cuando se observa la tendencia, se ve una línea mucho más suave que revela el comportamiento real de largo plazo: un crecimiento sostenido con una caída marcada alrededor de 2020 y una recuperación posterior; esto significa que, aunque la serie original parece muy inestable a simple vista, la tendencia demuestra que la variable sigue un patrón general de crecimiento, y que las variaciones fuertes son temporales y no cambian la dirección principal del comportamiento.

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)

La gráfica muestra que la tasa de crecimiento anual de la variable 1 es muy volátil, con años de crecimiento positivo y otros de caída, pero la línea de tendencia revela que, a pesar de esas oscilaciones, el comportamiento general se mantiene alrededor de un crecimiento moderado; el punto más llamativo es la caída abrupta alrededor de 2020, que indica un impacto fuerte y negativo en la dinámica de la variable, seguido de un rebote pronunciado que refleja una recuperación rápida; en conjunto, esto significa que la variable responde de forma sensible a eventos externos, pero también tiene capacidad de recuperación, y que la tendencia suaviza el ruido para mostrar que, más allá de los altibajos, el crecimiento de largo plazo se mantiene relativamente estable.

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

#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)

La gráfica muestra que la tasa de crecimiento anual de la variable 2 tiene altas fluctuaciones, con años donde crece y otros donde cae, pero la línea de tendencia suaviza ese comportamiento y revela que, en el largo plazo, la variable mantiene un crecimiento moderado y relativamente estable; el punto más importante es la caída muy fuerte alrededor de 2020, que indica un impacto externo significativo que hizo que el crecimiento se volviera negativo, seguida de una recuperación rápida que devuelve la tasa a niveles más normales, lo que demuestra que la variable es sensible a choques pero también tiene capacidad de estabilizarse después de ellos.

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

#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)

La gráfica muestra que la tasa de crecimiento anual de la variable 3 tiene subidas y bajadas fuertes, lo que indica que su comportamiento es muy variable de un año a otro, pero la línea de tendencia ayuda a ver que, en el fondo, el crecimiento sigue un patrón más suave y estable; alrededor de 2020 aparece un pico muy marcado, señal de un evento externo que alteró temporalmente la dinámica de la variable, seguido de una caída y luego una estabilización; en conjunto, esto significa que aunque la serie original parece muy inestable, la tendencia revela que la variable mantiene un comportamiento general más ordenado, donde los cambios bruscos son temporales y no modifican la dirección principal del crecimiento a largo plazo.

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.