library(readxl)
library(dplyr)    # Para manipulación de datos
library(ggplot2)  # Para visualización
library(plotly)   # Para gráficos interactivos
library(tseries)  # Para análisis de series temporales
library(forecast) # Para descomposición
library(timetk)   # Para análisis y visualización de series temporales

Introducción

En este informe, se realizará la extracción de señales o descomposición de series temporales aplicadas a los ingresos totales trimestrales de la empresa Colombina S.A. durante el período comprendido entre el primer trimestre de 2019 (1T2019) y el tercer trimestre de 2024 (3T2024).

El análisis de series temporales permite identificar patrones subyacentes en los datos, como tendencias, estacionalidad y componentes irregulares, lo que facilita una mejor comprensión del comportamiento de los ingresos de la empresa. Para ello, se emplearán técnicas estadísticas y métodos de descomposición, con el fin de extraer información clave que pueda contribuir a la toma de decisiones estratégicas.

A lo largo del informe, se presentarán los resultados obtenidos y se discutirán sus implicaciones en el contexto financiero de Colombina S.A.

Análisis exploratorio-Descriptivo

En este análisis, se realizará un estudio exploratorio de la variable Ingreso Total de la empresa Colombina. Para ello, se calcularán estadísticas descriptivas que nos permitirán conocer mejor la distribución y principales características de la variable en estudio.

Además, se complementará el análisis con la visualización de gráficos, los cuales facilitarán la identificación de patrones, tendencias y posibles valores atípicos en los datos.

El objetivo de este análisis es obtener una comprensión inicial de la información disponible y generar insights que puedan ser utilizados en estudios posteriores más avanzados.

A continuación, se presenta el desarrollo del análisis.

# Cargar datos desde el archivo Excel
data <- read_excel("Colombina EXTRA.xlsx")

# Ver las primeras filas de los datos
class(data)
## [1] "tbl_df"     "tbl"        "data.frame"
colnames(data)
## [1] "Date"     "ING"      "UTILIDAD" "ACTIVOS"  "PASIVOS"
# Formatear la serie temporal (trimestral desde 2019-Q1 hasta 2024-Q3)
ts_data <- ts(data$ING, start = c(2019, 1), frequency = 4)
ts_data
##           Qtr1      Qtr2      Qtr3      Qtr4
## 2019 433580000 462186000 517285000 528268000
## 2020 498207000 402864000 498107000 526615000
## 2021 485736000 462864000 580319000 632743000
## 2022 619157000 669628000 787278000 858631000
## 2023 839495000 797503000 848018000 859548000
## 2024 748846000 763244000 871052000

Interpretación descriptiva

Las estadísticas exploratorias de los ingresos trimestrales de Colombina S.A. indican lo siguiente:

Mínimo (Min = 4,028,640,000 COP)

El ingreso trimestral más bajo registrado en el periodo analizado es de aproximadamente 4.03 billones de COP. Máximo (Max = 8,710,520,000 COP)

El ingreso trimestral más alto registrado alcanza los 8.71 billones de COP. Media (Media = 6,387,466,696 COP)

En promedio, los ingresos trimestrales son 6.39 billones de COP. Mediana (Mediana = 6,191,570,000 COP)

El valor central de los ingresos es 6.19 billones de COP, lo que sugiere que hay cierta simetría en la distribución de los ingresos, aunque la media es ligeramente mayor, lo que puede indicar la presencia de valores altos que elevan el promedio. Desviación estándar (DesviacionEstandar = 1,619,699,56 COP)

La variabilidad de los ingresos trimestrales es de 1.62 billones de COP, lo que indica una fluctuación considerable entre periodos. Coeficiente de variación (CoefVar = 0.253)

Este valor indica que la variabilidad de los ingresos representa un 25.3% con respecto a la media. Como regla general, si el coeficiente de variación es menor a 0.30 (30%), la variabilidad no es excesiva, lo que indica que los ingresos de Colombina S.A. tienen una estabilidad relativa. Conclusiones:

Los ingresos trimestrales de Colombina S.A. muestran estabilidad, con un coeficiente de variación moderado. Existen diferencias notables entre los valores mínimos y máximos, lo que puede deberse a estacionalidad o factores económicos externos.

La diferencia entre la media y la mediana no es muy grande, lo que sugiere que la distribución no está muy sesgada.

# Calcular estadísticas descriptivas básicas
descriptive_stats <- data.frame(
  Min = min(ts_data),
  Max = max(ts_data),
  Media = mean(ts_data),
  Mediana = median(ts_data),
  DesviacionEstandar = sd(ts_data),
  CoefVar = sd(ts_data) / mean(ts_data)
)
print(descriptive_stats)
##         Min       Max     Media   Mediana DesviacionEstandar   CoefVar
## 1 402864000 871052000 638746696 619157000          161969956 0.2535746
# Gráfico interactivo de la serie original
grafico_serie <- ggplot(data, aes(x = seq.Date(from = as.Date("2019-01-01"), by = "quarter", length.out = nrow(data)), y = ING)) +
  geom_line(color = "grey", linewidth = 1) +
  geom_point(color = "black") +
  ggtitle("Figura 1.Ingresos Totales Trimestrales de Colombina S.A.") +
  xlab("Tiempo") +
  ylab("Miles de Pesos Colombianos") +
  theme_minimal()
ggplotly(grafico_serie)

AEn la Figura 1, se observa que pesar de algunas fluctuaciones, la empresa muestra una tendencia general de aumento en sus ingresos trimestrales desde 2019 hasta 2024.

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

# Extraer los componentes de la descomposición
serie_ajustada <- ts_data - stl_decomp$time.series[, "seasonal"]
library(ggplot2)
library(plotly)
library(scales)
# Comparación de la serie original con la ajustada por estacionalidad
grafico_ajustada <- ggplot() +
  geom_line(aes(x = seq_along(ts_data), y = ts_data), color = "grey", size = 1, linetype = "solid") +
  geom_line(aes(x = seq_along(serie_ajustada), y = serie_ajustada), color = "black", size = 1, linetype = "dashed") +
  ggtitle("Figura 2.Serie Original vs Serie Ajustada por Estacionalidad") +
  xlab("Tiempo") +
  ylab("Miles de Pesos Colombianos") +
  theme_minimal()
ggplotly(grafico_ajustada)
# Comparación de la serie original con la tendencia
tendencia <- stl_decomp$time.series[, "trend"]
grafico_tendencia <- ggplot() +
  geom_line(aes(x = seq_along(ts_data), y = ts_data), color = "grey", size = 1) +
  geom_line(aes(x = seq_along(tendencia), y = tendencia), color = "purple", size = 1, linetype = "dashed") +
  ggtitle("Figura 3. Serie Original vs Tendencia") +
  xlab("Tiempo") +
  ylab("Miles de Pesos Colombianos") +
  theme_minimal()
ggplotly(grafico_tendencia)
# Cálculo de la tasa de crecimiento anual correctamente alineada
tasa_crecimiento <- (ts_data[(5:length(ts_data))] / ts_data[1:(length(ts_data) - 4)] - 1) * 100
tasa_tendencia <- (tendencia[(5:length(tendencia))] / tendencia[1:(length(tendencia) - 4)] - 1) * 100

# Crear vector de fechas corregido
fechas_corregidas <- seq(from = as.Date("2020-01-01"), by = "quarter", length.out = length(tasa_crecimiento))

# Verificar longitudes
print(length(fechas_corregidas))
## [1] 19
print(length(tasa_crecimiento))
## [1] 19
print(length(tasa_tendencia))
## [1] 19
# Gráfico de la tasa de crecimiento anual
grafico_crecimiento <- ggplot() +
  geom_line(aes(x = fechas_corregidas, y = tasa_crecimiento), color = "grey", size = 1) +
  geom_line(aes(x = fechas_corregidas, y = tasa_tendencia), color = "green", size = 1, linetype = "dashed") +
  ggtitle("Figura 4. Tasa de Crecimiento Anual: Serie Original vs Tendencia") +
  xlab("Tiempo") +
  ylab("% de Crecimiento Anual") +
  theme_minimal()

# Convertir a gráfico interactivo
ggplotly(grafico_crecimiento)