1. Contextualización sector y variables

Introducción:

Descripción de variables

Justificación de elección de variables

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("D:/STV/Stv/Apv/Parcial/Base Caso2 (1).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):

TRM

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

ICC INDICE DE CONFIANZA DEL CONSUMIDOR

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

Ventas de vehiculos nuevos

# Convertir/declarar variable en serie de tiempo mensual
variable3_ts <- ts(data_col$VEH, start = c(2014, 1),end = c(2024, 12), 
                     frequency = 12)

Ventas de vehiculos nuevos en el valle

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

CART Cartera del sector bancario

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

2. 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("TRM: Serie original") +
  xlab("Tiempo") +
  ylab("Pesos por dólar estadounidense") +
  theme_minimal()

ggplotly(grafico_serie)

Extracción señales TRM

# 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 TRM",
       x = "Tiempo",
       y = "Valor")

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

Gráfico inicial deL ICC -Original

library(ggplot2)
library(plotly)

# Convertir la serie temporal a un vector numérico para lograr graficar con ggplot2
data_col$variable2 <- as.numeric(variable2_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 = variable2)) +
  geom_line(color = "grey", linewidth = 0.4) +  # Cambiado 'size' por 'linewidth'
  geom_point(color = "black", size = 0.1) +
  ggtitle("ICC: Serie original") +
  xlab("Tiempo") +
  ylab("Indice") +
  theme_minimal()

ggplotly(grafico_serie)

Extracción señales ICC

# 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 (son 4 componentes)
  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 TRM",
       x = "Tiempo",
       y = "Valor")

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

Gráfico inicial Ventas de vehículos nuevos-Original

library(ggplot2)
library(plotly)

# 1. Filtramos data_col para que tenga las mismas 132 filas que variable3_ts
# Usamos tail para tomar los datos más recientes que coincidan con la serie
data_col_grafico <- tail(data_col, length(variable3_ts))

# 2. Asignamos la serie convertida a numérica a la columna variable3
data_col_grafico$variable3 <- as.numeric(variable3_ts)

# 3. Crear el gráfico con los nombres y unidades solicitados
grafico_serie <- ggplot(data_col_grafico, aes(x = seq.Date(from = as.Date("2014-01-01"), 
                                                          by = "month", 
                                                          length.out = nrow(data_col_grafico)), 
                                              y = variable3)) +
  geom_line(color = "grey", linewidth = 0.4) + 
  geom_point(color = "black", size = 0.1) +
  # Actualización de Títulos y Unidades
  ggtitle("Venta de vehículos nuevos: Serie original") +
  xlab("Tiempo") +
  ylab("Unidades vendidas") + 
  theme_minimal()

# Convertir a interactivo
ggplotly(grafico_serie)

Extracción señales Vehiculos Nuevos

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

# 1. LIMPIEZA TOTAL: Convertimos a numérico y eliminamos posibles NA
# Esto asegura que stl() reciba datos puros
valores_limpios <- as.numeric(variable3_ts)
valores_limpios[is.na(valores_limpios)] <- mean(valores_limpios, na.rm = TRUE)

# 2. RECONSTRUCCIÓN: Forzamos la frecuencia mensual (12) desde 2014
# Sin esto, stl() siempre lanzará error
variable3_ts_clean <- ts(valores_limpios, start = c(2014, 1), frequency = 12)

# 3. DESCOMPOSICIÓN
# Usamos la serie limpia recién creada
stl_decomp_var3 <- stl(variable3_ts_clean, s.window = "periodic")

# 4. DATAFRAME PARA GRAFICAR
stl_df_var3 <- data.frame(
  Time = rep(as.numeric(time(variable3_ts_clean)), 4), 
  Value = c(as.numeric(stl_decomp_var3$time.series[, "seasonal"]),  
            as.numeric(stl_decomp_var3$time.series[, "trend"]),     
            as.numeric(stl_decomp_var3$time.series[, "remainder"]), 
            as.numeric(variable3_ts_clean)),
  Component = factor(rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), 
                         each = length(variable3_ts_clean)),
                     levels = c("Serie Original", "Tendencia", "Estacional", "Residuo"))
)

# 5. GRÁFICO
p <- ggplot(stl_df_var3, aes(x = Time, y = Value, color = Component)) +
  geom_line(show.legend = FALSE) + 
  facet_wrap(~Component, scales = "free_y", ncol = 1) + 
  theme_minimal() +
  labs(title = "Descomposición temporal: Venta de vehículos nuevos",
       x = "Año",
       y = "Unidades / Variación")

ggplotly(p)

Gráfico inicial deL Venta de vehiculos nuevos en el valle -Original

library(ggplot2)
library(plotly)

# Convertir la serie temporal a un vector numérico para lograr graficar con ggplot2
data_col$variable4 <- as.numeric(variable4_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 = variable2)) +
  geom_line(color = "grey", linewidth = 0.4) +  # Cambiado 'size' por 'linewidth'
  geom_point(color = "black", size = 0.1) +
  ggtitle("ICC: Serie original") +
  xlab("Tiempo") +
  ylab("Número de vehículos") +
  theme_minimal()

ggplotly(grafico_serie)

Extracción señales Venta de vehiculos nuevos en el valle

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

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

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

# Crear gráfico con ggplot2
p <- ggplot(stl_df_var4, 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 Ventas de vehículos nuevos del Valle",
       x = "Tiempo",
       y = "Valor")

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

Gráfico inicial de la Cartera del sector bancario -Original

library(ggplot2)
library(plotly)

# Convertir la serie temporal a un vector numérico para lograr graficar con ggplot2
data_col$variable5 <- as.numeric(variable5_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 = variable5)) +
  geom_line(color = "grey", linewidth = 0.4) +  # Cambiado 'size' por 'linewidth'
  geom_point(color = "black", size = 0.1) +
  ggtitle("ICC: Serie original") +
  xlab("Tiempo") +
  ylab("Pesos") +
  theme_minimal()

ggplotly(grafico_serie)

Extracción señales Venta de Cartera del sector bancario

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

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

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

# Crear gráfico con ggplot2
p <- ggplot(stl_df_var5, 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 Cartera del sector bancario",
       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:

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"]

Se crea la variable4 ajustada por estacionalidad

# Extraer los componentes de la descomposición
variable4_sa <- variable4_ts - stl_decomp_var4$time.series[, "seasonal"]

Se crea la variable5 ajustada por estacionalidad

# Extraer los componentes de la descomposición
variable5_sa <- variable5_ts - stl_decomp_var5$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("TRM:Serie Original vs Serie Ajustada por Estacionalidad") +
  xlab("Tiempo") +
  ylab("Pesos por dolar estadunidense") +
  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

# 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("ICC:Serie Original vs Serie Ajustada por Estacionalidad") +
  xlab("Tiempo") +
  ylab("Índice") +
  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

# 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("Ventas de vehículos nuevos:Serie Original vs Serie Ajustada por Estacionalidad") +
  xlab("Tiempo") +
  ylab("Número de vehículos") +
  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)
# Crear vector de fechas correctamente alineado con la serie
fechas_var4 <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable4_ts))

# Gráfico mejorado con fechas en el eje X
grafico_ajustada_var4 <- ggplot() +
  geom_line(aes(x = fechas_var4, y = variable4_ts), color = "grey", size = 0.5, linetype = "solid", name = "Serie Original") +
  geom_line(aes(x = fechas_var4, y = variable4_sa), color = "black", size = 0.6, linetype = "solid", name = "Serie Ajustada") +
  ggtitle("Ventas de vehículos nuevos:Serie Original vs Serie Ajustada por Estacionalidad") +
  xlab("Tiempo") +
  ylab("Número de vehículos") +
  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_var4)
# Crear vector de fechas correctamente alineado con la serie
fechas_var5 <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable5_ts))

# Gráfico mejorado con fechas en el eje X
grafico_ajustada_var5 <- ggplot() +
  geom_line(aes(x = fechas_var5, y = variable5_ts), color = "grey", size = 0.5, linetype = "solid", name = "Serie Original") +
  geom_line(aes(x = fechas_var5, y = variable5_sa), color = "black", size = 0.6, linetype = "solid", name = "Serie Ajustada") +
  ggtitle("Ventas de vehículos nuevos:Serie Original vs Serie Ajustada por Estacionalidad") +
  xlab("Tiempo") +
  ylab("Número de vehículos") +
  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_var5)
library(ggplot2)
library(plotly)

variable1_vec <- as.numeric(variable1_ts)
tendencia_var1 <- as.numeric(stl_decomp_var1$time.series[, "trend"])
fechas1 <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable1_ts))

grafico_tendencia_var1 <- ggplot() +
  geom_line(aes(x = fechas1, y = variable1_vec, color = "Serie Original"), linewidth = 0.7) +
  geom_line(aes(x = fechas1, y = tendencia_var1, color = "Tendencia"), linewidth = 0.9) +
  scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "#7030A0")) +
  ggtitle("Tasa de Cambio (TRM): Serie Original vs Tendencia", subtitle = "Fuente: DANE") +
  xlab("Tiempo") +
  ylab("Pesos por dólar") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

ggplotly(grafico_tendencia_var1)
variable2_vec <- as.numeric(variable2_ts)
tendencia_var2 <- as.numeric(stl_decomp_var2$time.series[, "trend"])
fechas2 <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable2_ts))

grafico_tendencia_var2 <- ggplot() +
  geom_line(aes(x = fechas2, y = variable2_vec, color = "Serie Original"), linewidth = 0.7) +
  geom_line(aes(x = fechas2, y = tendencia_var2, color = "Tendencia"), linewidth = 0.9) +
  scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "#7030A0")) +
  ggtitle("Índice de Confianza del Consumidor (ICC)", subtitle = "Fuente: FEDESARROLLO-ANDI") +
  xlab("Tiempo") +
  ylab("Índice") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

ggplotly(grafico_tendencia_var2)
variable3_vec <- as.numeric(variable3_ts)
tendencia_var3 <- as.numeric(stl_decomp_var3$time.series[, "trend"])
# Ajustado a 2014 según tu requerimiento previo
fechas3 <- seq.Date(from = as.Date("2014-01-01"), by = "month", length.out = length(variable3_ts))

grafico_tendencia_var3 <- ggplot() +
  geom_line(aes(x = fechas3, y = variable3_vec, color = "Serie Original"), linewidth = 0.7) +
  geom_line(aes(x = fechas3, y = tendencia_var3, color = "Tendencia"), linewidth = 0.9) +
  scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "#7030A0")) +
  ggtitle("Ventas de Vehículos Nuevos (Nacional)", subtitle = "Fuente: FENALCO") +
  xlab("Tiempo") +
  ylab("Número de vehículos") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

ggplotly(grafico_tendencia_var3)
variable4_vec <- as.numeric(variable4_ts)
tendencia_var4 <- as.numeric(stl_decomp_var4$time.series[, "trend"])
fechas4 <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable4_ts))

grafico_tendencia_var4 <- ggplot() +
  geom_line(aes(x = fechas4, y = variable4_vec, color = "Serie Original"), linewidth = 0.7) +
  geom_line(aes(x = fechas4, y = tendencia_var4, color = "Tendencia"), linewidth = 0.9) +
  scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "#7030A0")) +
  ggtitle("Ventas de Vehículos Nuevos (Valle del Cauca)", subtitle = "Fuente: FENALCO") +
  xlab("Tiempo") +
  ylab("Número de vehículos") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

ggplotly(grafico_tendencia_var4)
variable5_vec <- as.numeric(variable5_ts)
tendencia_var5 <- as.numeric(stl_decomp_var5$time.series[, "trend"])
fechas5 <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable5_ts))

grafico_tendencia_var5 <- ggplot() +
  geom_line(aes(x = fechas5, y = variable5_vec, color = "Serie Original"), linewidth = 0.7) +
  geom_line(aes(x = fechas5, y = tendencia_var5, color = "Tendencia"), linewidth = 0.9) +
  scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "#7030A0")) +
  ggtitle("Cartera del Sector Bancario", subtitle = "Fuente: SUPERFINANCIERA") +
  xlab("Tiempo") +
  ylab("Pesos ($)") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

ggplotly(grafico_tendencia_var5)

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

# Cálculo de la tasa de crecimiento anual - Variable 1
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

# Vector de fechas (Enero 2013)
fechas_corregidas_var1 <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento_var1))

# Gráfico Variable 1
grafico_crecimiento_var1 <- ggplot() +
  geom_line(aes(x = fechas_corregidas_var1, y = tasa_crecimiento_var1, color = "Serie Original"), size = 0.7) +
  geom_line(aes(x = fechas_corregidas_var1, y = tasa_tendencia_var1, color = "Tendencia"), size = 0.8, linetype = "dashed") +
  scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
  ggtitle("TRM (DANE): Tasa de crecimiento anual %") +
  xlab("Tiempo") +
  ylab("% de Crecimiento Anual") +
  theme_minimal()

ggplotly(grafico_crecimiento_var1)
# Cálculo de la tasa de crecimiento anual - Variable 2
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

fechas_corregidas_var2 <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento_var2))

# Gráfico Variable 2
grafico_crecimiento_var2 <- ggplot() +
  geom_line(aes(x = fechas_corregidas_var2, y = tasa_crecimiento_var2, color = "Serie Original"), size = 0.7) +
  geom_line(aes(x = fechas_corregidas_var2, y = tasa_tendencia_var2, color = "Tendencia"), size = 0.8, linetype = "dashed") +
  scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
  ggtitle("ICC (FEDESARROLLO): Tasa de crecimiento anual %") +
  xlab("Tiempo") +
  ylab("% de Crecimiento Anual") +
  theme_minimal()

ggplotly(grafico_crecimiento_var2)
# Cálculo de la tasa de crecimiento anual - Variable 3 (Inicia en 2014, tasa inicia en 2015)
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

fechas_corregidas_var3 <- seq(from = as.Date("2015-01-01"), by = "month", length.out = length(tasa_crecimiento_var3))

# Gráfico Variable 3
grafico_crecimiento_var3 <- ggplot() +
  geom_line(aes(x = fechas_corregidas_var3, y = tasa_crecimiento_var3, color = "Serie Original"), size = 0.7) +
  geom_line(aes(x = fechas_corregidas_var3, y = tasa_tendencia_var3, color = "Tendencia"), size = 0.8, linetype = "dashed") +
  scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
  ggtitle("Vehículos Nacional (FENALCO): Tasa de crecimiento anual %") +
  xlab("Tiempo") +
  ylab("% de Crecimiento Anual") +
  theme_minimal()

ggplotly(grafico_crecimiento_var3)
# Cálculo de la tasa de crecimiento anual - Variable 4
tasa_crecimiento_var4 <- (variable4_ts[13:length(variable4_ts)] / variable4_ts[1:(length(variable4_ts) - 12)] - 1) * 100
tasa_tendencia_var4 <- (tendencia_var4[13:length(tendencia_var4)] / tendencia_var4[1:(length(tendencia_var4) - 12)] - 1) * 100

fechas_corregidas_var4 <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento_var4))

# Gráfico Variable 4
grafico_crecimiento_var4 <- ggplot() +
  geom_line(aes(x = fechas_corregidas_var4, y = tasa_crecimiento_var4, color = "Serie Original"), size = 0.7) +
  geom_line(aes(x = fechas_corregidas_var4, y = tasa_tendencia_var4, color = "Tendencia"), size = 0.8, linetype = "dashed") +
  scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
  ggtitle("Vehículos Valle (FENALCO): Tasa de crecimiento anual %") +
  xlab("Tiempo") +
  ylab("% de Crecimiento Anual") +
  theme_minimal()

ggplotly(grafico_crecimiento_var4)
# Cálculo de la tasa de crecimiento anual - Variable 5
tasa_crecimiento_var5 <- (variable5_ts[13:length(variable5_ts)] / variable5_ts[1:(length(variable5_ts) - 12)] - 1) * 100
tasa_tendencia_var5 <- (tendencia_var5[13:length(tendencia_var5)] / tendencia_var5[1:(length(tendencia_var5) - 12)] - 1) * 100

fechas_corregidas_var5 <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento_var5))

# Gráfico Variable 5
grafico_crecimiento_var5 <- ggplot() +
  geom_line(aes(x = fechas_corregidas_var5, y = tasa_crecimiento_var5, color = "Serie Original"), size = 0.7) +
  geom_line(aes(x = fechas_corregidas_var5, y = tasa_tendencia_var5, color = "Tendencia"), size = 0.8, linetype = "dashed") +
  scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
  ggtitle("Cartera Bancaria (SUPERFINANCIERA): Tasa de crecimiento anual %") +
  xlab("Tiempo") +
  ylab("% de Crecimiento Anual") +
  theme_minimal()

ggplotly(grafico_crecimiento_var5)

Recomendaciones estratégicas: