Introducción

Colombina S.A. es una de las empresas más reconocidas en la industria de alimentos en Colombia y a nivel internacional. Fundada en 1927, ha consolidado su presencia en más de 80 países, ofreciendo una amplia gama de productos, incluyendo confitería, galletas, helados y alimentos procesados. Su crecimiento sostenido, estrategias de diversificación y solidez financiera la han convertido en un referente del sector.

El análisis financiero de Colombina es clave para evaluar su desempeño en el mercado, identificar tendencias y comprender los factores que impulsan su rentabilidad y estabilidad. En este documento, realizaremos un análisis exploratorio de algunas variables financieras clave de la empresa entre 2016 y 2024, utilizando R. Aplicaremos técnicas de estadística descriptiva y visualización de datos para detectar patrones, anomalías y relaciones entre variables, facilitando una mejor interpretación de su evolución financiera.

A través de este análisis, se busca proporcionar una visión más clara de la situación financiera de Colombina, lo cual puede ser útil para inversionistas, analistas financieros y académicos interesados en la industria de alimentos.

Análisis exploratorio

El análisis exploratorio de datos (EDA) es un paso clave para comprender la información financiera de Colombina S.A., identificar patrones y evaluar la distribución de las variables.

A través de estadísticas descriptivas y visualización de datos con R, identificaremos tendencias, relaciones entre variables y posibles anomalías, proporcionando una base sólida para interpretar el desempeño financiero de Colombina en el período 2016-2024.

PASO 1. Instalar y cargar librerias

# Cargar librerías necesarias
library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyr)
library(tidyverse)

PASO 2: Cargar la base de datos

# Cargar datos desde el archivo Excel
datos_col <- read_excel("C:/Users/julie/OneDrive - PUJ Cali/Posgrado Finanzas/Maestria Finanzas/Módulo I/Practica/Colombina.xlsx", 
    col_types = c("date", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric"))

# Ver las primeras filas de los datos
class(datos_col)  
## [1] "tbl_df"     "tbl"        "data.frame"
colnames(datos_col)  
##  [1] "FECHA"        "INGRESOS"     "UTILIDADOPER" "ACTIVOS"      "PASIVOS"     
##  [6] "EBITDA"       "QUICKRATIO"   "MEBITDA"      "MBRUTO"       "MOPERACIONAL"
## [11] "ROA"          "ROE"
head(datos_col)
FECHA INGRESOS UTILIDADOPER ACTIVOS PASIVOS EBITDA QUICKRATIO MEBITDA MBRUTO MOPERACIONAL ROA ROE
2016-01-01 400871238 134228489 1394448794 1195743931 47789382 0.46 11.92 33.48 7.66 3.75 22.90
2016-04-01 398002762 132113511 1383049000 1192835000 36523618 0.61 9.18 33.19 4.88 3.77 23.15
2016-07-01 480807000 163638000 1401579000 1204776000 55165000 0.59 11.47 34.03 8.05 3.79 23.40
2016-10-01 469500000 158209000 1416316000 1179764000 78004000 0.50 16.61 33.70 13.71 4.18 23.50
2017-01-01 397086000 138297000 1427549000 1240232000 49863000 0.54 12.56 34.83 8.74 3.57 26.64
2017-04-01 398514000 136094000 1460785000 1268580000 43652000 0.56 10.95 34.15 6.29 3.36 25.92

Indicadores de centralidad y dispersión

# Resumen estadístico de las variables financieras
resumen <- datos_col %>% 
  select(INGRESOS, UTILIDADOPER, ACTIVOS, PASIVOS, EBITDA) %>% 
  summary()

resumen
##     INGRESOS          UTILIDADOPER          ACTIVOS         
##  Min.   :397086000   Min.   :117049000   Min.   :1.383e+09  
##  1st Qu.:457554500   1st Qu.:153991500   1st Qu.:1.465e+09  
##  Median :498207000   Median :174979000   Median :1.678e+09  
##  Mean   :570795229   Mean   :195623514   Mean   :1.780e+09  
##  3rd Qu.:709237000   3rd Qu.:240252000   3rd Qu.:2.124e+09  
##  Max.   :871052000   Max.   :318313000   Max.   :2.571e+09  
##     PASIVOS              EBITDA         
##  Min.   :1.180e+09   Min.   : 19556000  
##  1st Qu.:1.279e+09   1st Qu.: 50363000  
##  Median :1.465e+09   Median : 61485000  
##  Mean   :1.556e+09   Mean   : 68257714  
##  3rd Qu.:1.827e+09   3rd Qu.: 79529500  
##  Max.   :2.273e+09   Max.   :125447000

Gráfico de barras

# Crear el gráfico de barras interactivo
grafico_barras_ingresos <- datos_col %>%
  plot_ly(x = ~FECHA, y = ~INGRESOS, type = 'bar',
          marker = list(color = 'skyblue')) %>%
  layout(title = "Figura 1. Ingresos de Colombina por Periodo",
         xaxis = list(title = "Periodo"),
         yaxis = list(title = "Ingreso (Miles de pesos)"),
         hovermode = "x")

# Mostrar el gráfico
grafico_barras_ingresos

Gráfico de líneas-Crecimiento anual%)

# Ordenar por fecha
datos_col <- datos_col %>% arrange(FECHA)

# Calcular la tasa de crecimiento anual de los ingresos comparando con el mismo trimestre del año anterior
datos_col <- datos_col %>%
  mutate(CRECIMIENTO_INGRESOS = (INGRESOS / lag(INGRESOS, 4) - 1) * 100)

# Crear el gráfico interactivo con Plotly
grafico_crecimiento <- datos_col %>%
  filter(!is.na(CRECIMIENTO_INGRESOS)) %>%  # Filtrar valores NA que aparecen en los primeros 4 trimestres
  plot_ly(x = ~FECHA, y = ~CRECIMIENTO_INGRESOS, type = 'scatter', mode = 'lines+markers',
          line = list(color = 'lightblue', width = 3),
          marker = list(color = 'grey', size = 6)) %>%
  layout(title = "Figura 2. Tasa de Crecimiento Anual de Ingresos (1T2017 - 3T2024)",
         xaxis = list(title = "Periodo"),
         yaxis = list(title = "Crecimiento (%)", tickformat = ".1f"),
         hovermode = "x unified",
         plot_bgcolor = "rgba(245, 245, 245, 0.9)")

# Mostrar el gráfico
grafico_crecimiento

Gráfico de líneas-niveles

grafico_ingresos <- datos_col %>%
  plot_ly(x = ~FECHA, y = ~INGRESOS, type = 'scatter', mode = 'lines+markers',
          line = list(color = 'lightblue', width = 3),
          marker = list(color = 'black', size = 5)) %>%
  layout(title = "Figura 2.1 Evolución de Ingresos totales (1T2016-3T2024",
         xaxis = list(title = "Periodo"),
         yaxis = list(title = "Ingreso (Miles de pesos)"),
         hovermode = "x")

# Mostrar el gráfico
grafico_ingresos

Boxplot Ingresos

La figura 3, muestra que:

📊 La mediana está más cerca de Q1 que de Q3 → Indica una distribución sesgada hacia la derecha, es decir, hay algunos ingresos excepcionalmente altos que elevan la media.

🔼 Amplio rango intercuartil (IQR = Q3 - Q1 = 273,802,750) → Indica una variabilidad significativa en los ingresos.

🚀 No se observan valores atípicos (fuera de los bigotes), lo que sugiere que los ingresos no han tenido fluctuaciones extremas fuera de lo esperado.

📉 El mínimo y máximo muestran un rango amplio (397M - 871M) → La empresa ha tenido variaciones importantes en sus ingresos a lo largo del tiempo.

Los ingresos de la empresa han mostrado una tendencia general al alza con variabilidad en su comportamiento.

# Crear y mostrar el boxplot interactivo
ggplotly(
  ggplot(datos_col, aes(y=INGRESOS)) +
    geom_boxplot(fill="lightblue", color="black", outlier.colour="red", outlier.shape=16, outlier.size=3) +
    labs(title="Figura 3. Boxplot de los ingresos totales",
         y="Precio") +
    theme_minimal()
)

Gráfico de barras

# Crear el gráfico de barras interactivo
grafico_barras_ingresos <- datos_col %>%
  plot_ly(x = ~FECHA, y = ~INGRESOS, type = 'bar',
          marker = list(color = 'skyblue')) %>%
  layout(title = "Ingresos de Colombina por Periodo",
         xaxis = list(title = "Periodo"),
         yaxis = list(title = "Figura 4. Ingreso (Miles de pesos)"),
         hovermode = "x")

# Mostrar el gráfico
grafico_barras_ingresos

Correlación-Dispersión

En la Figura 5. se observa una fuerte correlación positiva entre los ingresos y la utilidad operacional, con un coeficiente de correlación de 0.99.

Esto indica que a medida que los ingresos aumentan, la utilidad operacional también crece en casi la misma proporción.

# Crear gráfico interactivo con correlación
ggplotly(
  ggplot(datos_col, aes(x = INGRESOS, y = UTILIDADOPER)) +
    geom_point(color = "lightblue", alpha = 0.9, size = 2) +  # Puntos con color y transparencia
    geom_smooth(method = "lm", color = "grey", se = TRUE) +  # Línea de tendencia lineal
    labs(
      title = paste("Figura 5. Relación entre ingresos y utilidad operacional\nCoef. de correlación: ", 
                    round(cor(datos_col$UTILIDADOPER, datos_col$INGRESOS, use = "complete.obs"), 2)),
      x = "Ingresos(miles de pesos)",
      y = "Utilidad operacional (Miles de pesos)",
      caption = "Fuente: Datos financieros"
    ) +
    theme_minimal() +
    theme(
      plot.title = element_text(size = 14, face = "bold", hjust = 0.5),
      axis.title = element_text(size = 12),
      axis.text = element_text(size = 10)
    )
)
# Crear gráfico de líneas interactivo comparando Activos y Pasivos
grafico_lineas_activos_pasivos <- plot_ly(datos_col, x = ~FECHA) %>%
  add_lines(y = ~ACTIVOS, name = "Activos", line = list(color = 'green')) %>%
  add_lines(y = ~PASIVOS, name = "Pasivos", line = list(color = 'purple')) %>%
  layout(title = "Figura 6. Comparación de Activos y Pasivos de Colombina S.A",
         xaxis = list(title = "Periodo"),
         yaxis = list(title = "Valor en Miles de pesos"),
         hovermode = "x")

# Mostrar el gráfico
grafico_lineas_activos_pasivos
# Crear gráfico de líneas interactivo comparando Ingresos y EBITDA
grafico_lineas_ingresos_ebitda <- plot_ly(datos_col, x = ~FECHA) %>%
  add_lines(y = ~INGRESOS, name = "Ingresos", line = list(color = 'green')) %>%
  add_lines(y = ~EBITDA, name = "EBITDA", line = list(color = 'purple')) %>%
  layout(title = "fIGURA 7. Comparación de Ingresos y EBITDA de Colombina",
         xaxis = list(title = "Periodo"),
         yaxis = list(title = "Valor en Miles de pesos"),
         hovermode = "x")

# Mostrar el gráfico
grafico_lineas_ingresos_ebitda