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 librerías necesarias
library(readxl)   # Para leer archivos Excel
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
# 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"
head(data)
## # A tibble: 6 × 5
##   Date                      ING UTILIDAD    ACTIVOS    PASIVOS
##   <dttm>                  <dbl>    <dbl>      <dbl>      <dbl>
## 1 2019-03-01 00:00:00 433580000 35320000 1565128000 1391576000
## 2 2019-06-01 00:00:00 462186000 32407000 1571254000 1387456000
## 3 2019-09-01 00:00:00 517285000 44634000 1625282000 1418499000
## 4 2019-12-01 00:00:00 528268000 44063000 1690409000 1457298000
## 5 2020-03-01 00:00:00 498207000 47612000 1816189000 1604851000
## 6 2020-06-01 00:00:00 402864000 -2194000 1727606000 1532106000
# Formatear la serie temporal (trimestral desde 2019-Q1 hasta 2024-Q3)
ts_data <- ts(data$ING, start = c(2019, 1), frequency = 4)

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", size = 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)
library(ggplot2)
library(dplyr)
library(scales)

# Filtrar solo las fechas que queremos etiquetar
fechas_etiquetas <- as.Date(c("2020-06-01", "2020-09-01","2023-03-01", "2023-06-01", 
                              "2023-09-01", "2024-03-01", "2024-06-01", "2024-09-01"))

# Crear el gráfico
ggplot(data, aes(x = Date, y = ING)) + 
  geom_line(color = "grey", size = 1) +  # Línea principal
  geom_point(color = "black", size = 3) +  # Puntos de datos
  geom_label(data = filter(data, Date %in% fechas_etiquetas),  # Solo etiquetar ciertos puntos
             aes(label = comma(ING)),  # Formato con separadores de miles
             fill = "white",  # Fondo blanco para mejor visibilidad
             color = "black",  # Texto negro
             size = 3,  # Tamaño del texto
             label.size = 0.2,  # Borde del cuadro
             nudge_y = 50000000) +  # Ajuste de posición para evitar superposiciones
  ggtitle("Figura 1. Ingresos Totales Trimestrales de Colombina S.A.") +
  xlab("Tiempo") +
  ylab("Miles de Pesos Colombianos") +
  theme_minimal()

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 temporal-extracción de señales

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