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.
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.
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("C:/Users/luisi/Downloads/Colombina EXTRA.xlsx")
# Ver las primeras filas de los datos
class(data)
## [1] "tbl_df" "tbl" "data.frame"
ts_data <- ts(data$ING, start = c(2019, 1), frequency = 4)
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
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 = "pink", size = 1) +
geom_point(color = "purple") +
ggtitle("Figura 1.Ingresos Totales Trimestrales de Colombina S.A.") +
xlab("Tiempo") +
ylab("Miles de Pesos Colombianos") +
theme_minimal()
ggplotly(grafico_serie)
# 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)
# 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)
No se consolida la recuperación de los ingresos, la tasa de crecimiento en el ultimo perido fue de -0.3%