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):
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)
Gráfico inicial TRM -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)
La Serie Original Ha tenido un crecimiento sustancial, duplicando su valor en apenas una década. Hemos visto cómo ha llegado a probar niveles por encima de los \(5.000\) en momentos de mucha tensión, para luego buscar soportes más bajos. Para evidenciar con mayor claridad el comportamiento real de la variable dada la volatilidad realizamos la descomposición.
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)
Tendencia: Lo que vemos es un cambio de piso definitivo. Pasamos de una TRM estable de \(3.000\) antes de 2019 a una realidad donde la tendencia se ha consolidado por encima de los $4.000. Es una pendiente alcista que ha redefinido los costos de toda la economía.
Estacionalidad: Existen presiones cambiarias que ocurren siempre en las mismas fechas, con rangos que van desde los -$40 hasta los $80 pesos. Es un ciclo recurrente que ayuda a predecir cuándo el dólar tiende a encarecerse por factores estacionales.
Residuo: Aquí se hacen evidentes los choques fuertes, especialmente en 2020 y entre 2022-2023, con desviaciones de más de $200 pesos que rompen cualquier previsión y responden puramente a la incertidumbre del momento.
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)
Dado que la serie original del ICC suele presentar fluctuaciones muy bruscas mes a mes, es fundamental descomponerla para entender qué parte responde a un sentimiento real de largo plazo y qué es simple ruido momentáneo.
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 del ICC",
x = "Tiempo",
y = "Valor")
# Convertir a gráfico interactivo con plotly
ggplotly(p)
Serie Original: Se mueve en un rango bastante amplio, oscilando entre los \(+30\) y \(-40\) puntos. Lo que más llama la atención es cómo los mínimos históricos de 2020 y 2021 marcaron un antes y un después, dejando la serie atrapada mayoritariamente en terreno negativo.
Tendencia: Aquí es donde se ve el cambio real. Desde 2015, el consumidor colombiano dejó atrás el optimismo y entró en una etapa de contracción estructural. Actualmente, la tendencia parece estancada entre los \(-10\) y \(-20\) puntos, sin señales claras de querer volver a niveles positivos.
Estacionalidad: El comportamiento cíclico es muy predecible, con variaciones de \(\pm 4\) unidades que se repiten con precisión casi matemática cada año, reflejando los momentos del calendario donde las familias se sienten tradicionalmente más o menos seguras financieramente.
Residuo: En este apartado destacan los picos de volatilidad atípica entre 2020 y 2022. Son movimientos que no responden ni a la tendencia ni al ciclo anual, sino a eventos externos que sacudieron la confianza de forma imprevista.
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)
El mercado automotriz está lleno de picos y valles. Por esa razon no miramos unicamente al serie original sino que Descomponemos las ventas. esto nos ayuda a ver si el sector realmente está creciendo o si solo está viviendo de momentos específicos del año.
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)
Serie Original: Es una montaña rusa. Hemos visto meses de 40.000 unidades y otros donde el registro fue casi nulo. En los últimos meses de 2024, la serie parece haber encontrado un equilibrio cerca de las 22.000 unidades.
Tendencia: El mercado ha perdido gran parte de su dinamismo mostrado en su pico registrado en 2016, la actividad comenzó a declinar y hoy se estabiliza en torno a las 20.000 unidades mensuales. Es una cifra que evidencia, con claridad, cuánto se ha reducido la capacidad de absorción del sector en comparación con la de hace ocho años.
Estacionalidad: Los finales de año son determinantes, con saltos de hasta \(5.000\) unidades por encima del promedio, lo que demuestra que el sector depende críticamente de lo que suceda en el último trimestre.
Residuo: El dato más fuerte aquí es la caída de 2022, donde el residuo negativo fue de 10.000 unidades. Es la prueba de que un choque externo puede frenar en seco la inercia de ventas, sin importar qué tan buena sea la temporada.
Gráfico inicial de las Ventas 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 = variable4)) +
geom_line(color = "grey", linewidth = 0.4) + # Cambiado 'size' por 'linewidth'
geom_point(color = "black", size = 0.1) +
ggtitle("Ventas de vehículos nuevos del Valle: Serie original") +
xlab("Tiempo") +
ylab("Número de vehículos") +
theme_minimal()
ggplotly(grafico_serie)
A nivel regional, el Valle suele seguir la corriente nacional, pero con matices propios que solo se ven cuando limpiamos la serie de ruidos locales.
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)
Serie Original: El rango de movimiento en el departamento suele estar entre las 1.000 y 3.500 unidades. Visualmente camina de la mano con el total nacional, aunque con pequeñas variaciones que son propias de la dinámica regional.
Tendencia: Se nota un agotamiento. La tendencia en el Valle no ha logrado recuperar el nivel de las 2.500 unidades que tenía antes de la pandemia y, de hecho, muestra una ligera inclinación hacia abajo al cerrar 2024, situándose cerca de las 1.500 unidades.
Estacionalidad: Los ciclos son constantes, con variaciones de unos \(\pm 250\) vehículos. Esto confirma que el comprador en el Valle responde exactamente a los mismos estímulos de fin de año que el resto del país.
Residuo: Al igual que en el nacional, los residuos negativos de 2020 y 2022 fueron marcados, llegando a caídas de 1.000 unidades que se explican por situaciones coyunturales que afectaron la logística y el comercio local.
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("Cartera del Sector Bancario: Serie original") +
xlab("Tiempo") +
ylab("Pesos") +
theme_minimal()
ggplotly(grafico_serie)
Al ser una variable que acumula saldos, la cartera puede parecer siempre al alza. Por eso, descomponerla es vital para notar el comportamiento real
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)
Serie Original: Tuvo una subida constante y casi imparable hasta 2022, llegando un poco más de 5 billones de pesos. Sin embargo, lo más reciente muestra que ese volumen se ha estancado e incluso ha empezado a bajar ligeramente.
Tendencia:Tuvo una subida constante y casi imparable hasta 2022, llegando un poco más de 5 billones de pesos. Sin embargo, lo más reciente muestra que ese volumen se ha estancado e incluso ha empezado a bajar ligeramente.
Estacionalidad: Aunque no parezca, el crédito también tiene temporadas. Hay movimientos cíclicos de hasta 4 billones de pesos que nos dicen en qué meses se concentran los desembolsos y cuándo hay más recaudo de cartera.
Residuo: La volatilidad aquí es menor que en las ventas de carros, pero los ruidos han crecido en los últimos años. Esto sugiere que el sistema bancario ha tenido que lidiar con más imprevistos relacionados con las tasas y el comportamiento de pago de los clientes.
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 Ajustada") +
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 Ajustada") +
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 Ajustada") +
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 en el Valle:Serie Original vs Ajustada") +
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 Ajustada") +
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: 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("Venta Vehículos a nivel Nacional: 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("Venta de Vehículos en el Valle : 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)