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) 
library(readxl)
data_col <- read_excel("ACCIONES COL.xlsx", 
    col_types = c("date", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric"))
View(data_col)
variable1_ts <- ts(data_col$BOG, start = c(2010, 1), frequency = 12)
variable1_ts
##           Jan      Feb      Mar      Apr      May      Jun      Jul      Aug
## 2010 33792.66 37470.10 37072.54 39557.29 38563.39 38265.22 42042.05 49297.52
## 2011 55419.95 54167.64 54267.03 52895.42 52000.91 52935.20 51663.02 48502.39
## 2012 48661.43 50192.03 49496.29 49794.44 50032.99 49993.26 50947.37 49655.32
## 2013 55638.59 58242.64 57646.29 62615.80 69573.06 68579.19 70547.13 69553.19
## 2014 66101.69 67674.56 69645.69 69585.94 69287.31 68192.25 69685.50 72214.06
## 2015 62120.00 61880.00 55200.00 62880.00 62300.00 60000.00 60020.00 58000.00
## 2016 55800.00 56800.00 60900.00 62980.00 58900.00 58500.00 58300.00 60520.00
## 2017 59860.00 58000.00 59500.00 60300.00 62380.00 62980.00 68100.00 68980.00
## 2018 66700.00 66020.00 67920.00 69500.00 69980.00 68100.00 68500.00 69000.00
## 2019 59800.00 63120.00 66000.00 68880.00 66000.00 67220.00 71500.00 71000.00
## 2020 89000.00 86040.00 71000.00 64000.00 58000.00 60520.00 62080.00 69000.00
## 2021 83400.00 79010.00 78000.00 78500.00 70000.00 69800.00 68290.00 70500.00
## 2022 76800.00 72190.00 49650.00 50470.00 56920.00 46000.00 41500.00 40000.00
## 2023 35420.00 25080.00 32420.00 34200.00 33800.00 32550.00 30500.00 25650.00
## 2024 31800.00 32480.00 27000.00 28300.00 27540.00 26600.00 25020.00 29000.00
## 2025 29500.00 30520.00                                                      
##           Sep      Oct      Nov      Dec
## 2010 51682.89 53193.62 50987.15 57546.91
## 2011 49695.06 49357.17 47428.98 48701.16
## 2012 50410.66 54167.64 52974.94 54167.64
## 2013 67187.69 66611.25 67535.19 71178.75
## 2014 70223.06 67694.44 67000.00 66100.00
## 2015 59000.00 59000.00 58000.00 59500.00
## 2016 62600.00 62080.00 61620.00 60200.00
## 2017 68980.00 64200.00 67160.00 67460.00
## 2018 66520.00 64020.00 59400.00 55800.00
## 2019 80400.00 87020.00 86500.00 85140.00
## 2020 69000.00 68040.00 70510.00 75600.00
## 2021 72220.00 75900.00 70500.00 70200.00
## 2022 28540.00 26000.00 32000.00 37000.00
## 2023 25200.00 24900.00 24480.00 27460.00
## 2024 27720.00 28100.00 27480.00 26860.00
## 2025
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("2010-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)

Analisis Como analisis descriptivo se observa que hubo un crecimiento desde el 2010 hasta el 2022, en ese punto alcanza un pico y a inicios del 2022 empieza una caida en picada, con un intento de recuperacion en mayo, pero no logro esta recuperacion y siguio en caida, hasta ahora hay unas cuantas señales de recuperacion desde finales del 2023

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)
# Extraer los componentes de la descomposición
variable1_sa <- variable1_ts - stl_decomp_var1$time.series[, "seasonal"]
# Crear vector de fechas correctamente alineado con la serie
fechas_var1 <- seq.Date(from = as.Date("2010-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)

Ahora graficamos serie original vs tendencia

La extracción de la tendencia permite centrarse en los cambios estructurales de la serie.

Analizar la tendencia ayuda a prever escenarios futuros y anticipar posibles crisis o oportunidades en el sector o variable de análisis

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("2010-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)

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 2011
fechas_corregidas_var1 <- seq(from = as.Date("2011-01-01"), by = "month", length.out = length(tasa_crecimiento_var1))

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

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)

Analisis Se puede observar un crecimiento y una tendencia similares, la diferencia estan en los picos que alcanzo el crecimiento a diferencia de la tendencia la cual se muestra mucho mas suavizada. Observando solo los patrones de tendencia se puede ver que va a tener una pronta caida, aun asi, esa caida no va a ser significativa, en cambio esperaria un crecimiento a recuperar la constante que ha seguido la tendencia. En el 2019 el Banco de Bogota se encontraba con un crecimiento estable asi mismo como su tendencia de los años anteriores se encontraba en una constante, por eso mismo se esperaba un crecimiento constante, ademas de que logro una gran participación en BAC Credomatic, lo que consolido su presencia en Centroamerica. En el 2020 y 2021 se encontrO afectado por la pandemia (COVID-19) en el 2020 tuvo una caida debido a que este año inicio la pandemia, detuvo el consumo y afecto en general a la economia, a pesar de eso el Banco de Bogota pudo controlar la caida y no se vio tan afectado. En cambio para el 2021 se encontro con un crecimiento debido a la reactivacion de la economia, las bajas tasas de interes y el consumo. A finales del 2021 Banco de Bogota vendio su participación en BAC Credomatic. Lo cual se refleja como un decrecimiento y una tendencia a la baja, en gran parte se puede pensar que sus acciones bajaron debido a que habian perdido participacion en una entidad tan importante y ya no tenian presencia en el extranjero. En cambio se centraron en la presencia local colombiana y aumentar su liquidez. Para el 2023 se ve una recuperacion gradual, lo que indica que su estrategia ha funcionado gradualmente