En este informe, se realizará la extracción de señales o descomposición de series temporales aplicadas a las utilidades 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 las utilidades 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. En este análisis, se realizará un estudio exploratorio de la variable utilidad 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
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)  # Para visualización
library(plotly)   # Para gráficos interactivos
## 
## Adjuntando el paquete: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(tseries)  # Para análisis de series temporales
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(forecast) # Para descomposición
library(timetk)   # Para análisis y visualización de series temporales
data<- read_excel("C:/Users/Juan Manuel Pareja/Downloads/Colombina EXTRA.xlsx")
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$UTILIDAD, 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 -2194000 105801000 54522478 50231000           27259333 0.499965
# 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 = UTILIDAD)) +
  geom_line(color = "blue", size = 1) +
  geom_point(color = "red") +
  ggtitle("Figura 1.Utilidades Totales Trimestrales de Colombina S.A.") +
  xlab("Tiempo") +
  ylab("Miles de Pesos Colombianos") +
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
ggplotly(grafico_serie)

interpretacion

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)

# interpretacion

# 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 = "blue", size = 1, linetype = "solid") +
  geom_line(aes(x = seq_along(serie_ajustada), y = serie_ajustada), color = "red", 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)
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.

interpretacion

# 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 = "blue", 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)
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.

interpretacion

# 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 = "blue", 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)

interpretacion