Introducción

El presente informe tiene como objetivo brindar un análisis cuantitativo para apoyar decisiones de inversión en el mercado bursátil colombiano, enfocado en cuatro segmentos estratégicos: petrolero, financiero, industrial y de servicios. El análisis se desarrolla en el marco del índice MSCI COLCAP, utilizando como referencia una acción representativa por cada sector.

Para ello, se emplean herramientas estadísticas y de analítica de datos, fundamentadas en métodos de pronóstico y teoría de la decisión. Los cálculos se basan en datos mensuales de precios de acciones y del Índice de Precios al Consumidor (IPC), lo cual permite establecer escenarios económicos realistas: favorables, estables y en declive, basados en niveles de inflación.

Se aplican diferentes modelos de pronóstico como promedios móviles, suavización exponencial, regresiones polinómicas y modelos ARIMA, con el fin de estimar los rendimientos esperados por acción bajo cada condición económica. Además, se calculan medidas de error para evaluar la precisión de los modelos.

El análisis se complementa con la construcción de un árbol de decisión, el cálculo del valor esperado (EV) por segmento y la realización de simulaciones de Monte Carlo, lo cual permite estimar el comportamiento futuro del portafolio bajo incertidumbre.

El resultado de este informe permitirá al inversionista, que dispone de $100 millones de pesos colombianos, tomar decisiones estratégicas con base en métricas cuantitativas, evaluando no solo el rendimiento potencial, sino también el riesgo asociado a cada alternativa.

El DataFrame

Para el desarrollo del presente estudio, se construyeron 7 datas frames consolidados con información mensual desde mayo de 2015 hasta abril de 2025, el cual constituye la base del análisis cuantitativo; Estos datos fueron obtenidos de las siguientes pagínas web:

  • Investing.com: es una plataforma de mercados financieros que proporciona datos en tiempo real, cotizaciones, gráficos, herramientas financieras, noticias de última hora y análisis de 250 mercados del mundo a través de sus 44 ediciones internacionales.

  • datosmacro.expansion.com: es un sitio web que reúne en un solo lugar todos los datos macroeconómicos. Ofrece información sobre el PIB, la inflación, ratings, deuda, hipotecas, paro, prima de riesgo, salarios, divisas y más, de forma sencilla de consultar. El objetivo es proporcionar una visión global de la situación económica en cada momento y en cada país.

Gracias a los datos obtenidos de estas páginas, creamos los siguientes conjunto de datos:

Descripción del Data Frame: Serie Histórica de EC (Ecopetrol)

Este data frame recoge información mensual de precios y volumen de negociación de la acción Ecopetrol (EC) en el mercado bursátil colombiano, desde mayo de 2015 hasta abril de 2025. Se utilizará para análisis de pronóstico, estimación de retornos, simulaciones y clasificación por escenarios económicos.

Estructura de columnas

Columna Descripción
Fecha Fecha de cierre del mes (formato dd/mm/yyyy).
Último Precio de cierre del mes para la acción EC (en pesos colombianos).
Apertura Precio de apertura del mes.
Máximo Precio más alto alcanzado durante el mes.
Mínimo Precio más bajo alcanzado durante el mes.
Vol. Volumen total negociado durante el mes (en número de acciones o millones).
% var. Variación porcentual mensual del precio de cierre frente al mes anterior.
Rendimientos EC Rendimiento mensual de EC, calculado como: \(\frac{P_t - P_{t-1}}{P_{t-1}} \times 100\)

Nota: Aunque % var. y Rendimientos EC son muy similares, se incluyen ambas columnas para trazabilidad. En el análisis se toma Rendimientos EC como la fuente oficial de retorno mensual; ya que la columna % var. es la columna que por defecto se descargo de la página web

Observaciones adicionales

  • Los precios están expresados en pesos colombianos (COP).
  • El volumen negociado (Vol.) aparece en formato abreviado (ej. 548,28M)
  • El rendimiento (Rendimientos EC) es la base para el análisis de rentabilidad, riesgo, valor esperado y simulaciones.

Pronóstico

Vamos a pronosticar los precios de cierre de las acciones seleccionadas utilizando diferentes métodos estadísticos y de series temporales. Para ello, se aplicaran técnicas como promedios móviles, suavización exponencial, análisis de índices estacionales, regresiones polinómicas, análisis de correlación y modelos ARIMA. Después de obtener las predicciones con cada método, se calculan las medidas de error de pronóstico (como MAE, RMSE, MAPE, etc.) para evaluar y comparar la precisión de cada técnica en cada acción.

# Cargar las librerías 
library(readxl)
library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(ggplot2)
library(dplyr)
## 
## 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(smooth)
## Cargando paquete requerido: greybox
## Package "greybox", v2.0.4 loaded.
## This is package "smooth", v4.2.0

Ecopetrol (EC)

Ecopetrol S.A. (Empresa Colombiana de Petróleos) es la empresa más grande de Colombia y una de las principales compañías petroleras de América Latina. Se dedica a la exploración, producción, refinación, transporte y comercialización de petróleo crudo, gas natural y productos derivados.

# Cargar los datos
library(readxl)
Caso1 <- read_excel("C:/Users/apamo/Downloads/Caso1.xlsx",
    sheet = "DatoshistoricosdeEcopetrol")
(Caso1)
Caso1$`Rendimientos EC` <- as.numeric(Caso1$`Rendimientos EC`)
# Detectar año y mes de inicio
fecha_inicio <- min(Caso1$Fecha, na.rm = TRUE)
anio_inicio <- as.numeric(format(fecha_inicio, "%Y"))
mes_inicio <- as.numeric(format(fecha_inicio, "%m"))

# Convertir la columna Ultimo a numérica (aunque ya vimos que tiene 120 validos, no está de más ser explícito)
Caso1$`Rendimientos EC` <- as.numeric(Caso1$`Rendimientos EC`)

# Crear las series temporales con fecha correcta
# Asegúrate de que los datos estén ordenados por fecha si read_excel no lo garantiza
# Caso1 <- Caso1[order(Caso1$Fecha),] # Esto podría ser necesario si los datos no están ya ordenados

y <- ts(Caso1$`Rendimientos EC`, frequency = 12, start = c(anio_inicio, mes_inicio))

# Fechas para graficar (aunque ts.plot puede manejar el eje x temporalmente)
# La variable 'fechas' no es estrictamente necesaria para ts.plot, pero puede ser util para otras graficas
fechas <- seq(as.Date(fecha_inicio), length.out = length(y), by = "months")

# Graficar con título, ejes y color
ts.plot(y,
        main = "Gráfico historico de los rendimientos de las acciones de Ecopetrol", # Título del gráfico
        xlab = "Fecha",         # Nombre del eje X
        ylab = "Rendimientos", # Nombre del eje Y
        col = "blue"            # Color de la línea (puedes cambiar "blue" por otro color)
)

Se puede hacer el siguiente análisis de la serie de tiempo:

  • Tendencia: La serie no muestra una tendencia clara de aumento o disminución sostenida. En lugar de una dirección definida, los rendimientos fluctúan alrededor de un valor cercano a cero, indicando estabilidad en el largo plazo sin una trayectoria ascendente o descendente marcada.

  • Irregularidad: La serie contiene variaciones aleatorias y cambios súbitos que no siguen un patrón predecible. Estos picos y caídas podrían deberse a eventos externos inesperados o fluctuaciones del mercado.

  • Estacionalidad: No hay patrones recurrentes que sugieran estacionalidad. Los picos y valles no parecen repetirse en momentos específicos del año, lo que indica que los cambios en los rendimientos no están sujetos a factores estacionales evidentes.

  • Ciclicidad: Se observan fluctuaciones a largo plazo que no ocurren en intervalos fijos, probablemente asociadas con factores económicos o eventos específicos. Destacan movimientos bruscos alrededor de los años 2018 y 2020, lo que podría estar ligado a acontecimientos externos que afectaron los rendimientos de las acciones de Ecopetrol.

Modelo de Promedios Moviles

#Modelos de suavizamiento
#Modelo de promedios móviles
m1 <- sma(y, order = 12) # Especificamos el tamaño de la ventana a 12
f1 <- forecast(m1, h = 12) # Pronosticamos los próximos 12 meses
plot(forecast(m1))

Suavización exponencial

# Ajustar el modelo de suavización exponencial simple
m2 <- ces(y, seasonality = "none") # No especificamos h aquí, ces ajustará el mejor modelo SES

# Definir cuántos períodos quieres pronosticar hacia el futuro (h) - DEBES ELEGIR UN NÚMERO
periodos_pronostico_ses <- 12 # Ejemplo: pronosticar los próximos 12 meses

# Generar el pronóstico usando la función forecast()
f2 <- forecast(m2, h = periodos_pronostico_ses) # Especificamos h aquí

# Imprimir el resumen del pronóstico
print(f2)
##               Jan          Feb          Mar          Apr          May
## 2025                                                     -0.012014254
## 2026 -0.003650494 -0.003516698 -0.003387807 -0.003263640             
##               Jun          Jul          Aug          Sep          Oct
## 2025 -0.004902466 -0.004570881 -0.004399894 -0.004238554 -0.004083203
## 2026                                                                 
##               Nov          Dec
## 2025 -0.003933549 -0.003789379
## 2026
# Graficar el pronóstico
plot(f2)

Modelos Indices estacionales

Simple

# Ajustar el modelo de suavización exponencial con estacionalidad simple
m3 <- ces(y, seasonality = "simple") # ces ajustará el mejor modelo SES con estacionalidad

# Definir cuántos períodos quieres pronosticar hacia el futuro (h) - DEBES ELEGIR UN NÚMERO
periodos_pronostico_ses_s <- 12 # Ejemplo: pronosticar los próximos 12 meses (ajusta este valor)

# Generar el pronóstico usando la función forecast()
f3 <- forecast(m3, h = periodos_pronostico_ses_s) # Especificamos h aquí

# Imprimir el resumen del pronóstico
print(f3)
##               Jan          Feb          Mar          Apr          May
## 2025                                                     -0.014349376
## 2026 -0.002425604 -0.017514375  0.003011486 -0.027601402             
##               Jun          Jul          Aug          Sep          Oct
## 2025  0.001837864  0.030374056  0.041776765 -0.010252459  0.006925080
## 2026                                                                 
##               Nov          Dec
## 2025  0.010916165 -0.028996142
## 2026
# Graficar el pronóstico
plot(f3)

Parcial

# Ajustar el modelo de suavización exponencial con estacionalidad parcial
m4 <- ces(y, seasonality = "partial") # ces ajustará el mejor modelo con estacionalidad parcial

# Definir cuántos períodos quieres pronosticar hacia el futuro (h)
periodos_pronostico_ces_p <- 12 # Pronosticamos los próximos 12 meses

# Generar el pronóstico usando la función forecast()
f4 <- forecast(m4, h = periodos_pronostico_ces_p) # Especificamos h aquí

# Imprimir el resumen del pronóstico
print(f4)
##               Jan          Feb          Mar          Apr          May
## 2025                                                      0.019556545
## 2026  0.018899458  0.005408932  0.027916727 -0.023333753             
##               Jun          Jul          Aug          Sep          Oct
## 2025  0.006892379  0.051583907  0.052850226  0.029177330  0.017798794
## 2026                                                                 
##               Nov          Dec
## 2025  0.048050623  0.005707332
## 2026
# Graficar el pronóstico
plot(f4)

print(f4$mean)
##               Jan          Feb          Mar          Apr          May
## 2025                                                      0.019556545
## 2026  0.018899458  0.005408932  0.027916727 -0.023333753             
##               Jun          Jul          Aug          Sep          Oct
## 2025  0.006892379  0.051583907  0.052850226  0.029177330  0.017798794
## 2026                                                                 
##               Nov          Dec
## 2025  0.048050623  0.005707332
## 2026

El pronóstico mostrado en el gráfico indica un comportamiento relativamente estable, con fluctuaciones moderadas en los valores previstos. La serie histórica presenta una alta variabilidad con picos y valles pronunciados, sin una tendencia clara de crecimiento o decrecimiento a largo plazo. Al observar el pronóstico, se aprecia que los valores futuros se mantienen cercanos a la línea base, con pequeñas variaciones positivas y negativas, lo que sugiere un patrón estable sin cambios abruptos. No se identifican tendencias crecientes o decrecientes significativas, y la reducción de la volatilidad respecto a los datos históricos es notable. En cuanto a los valores obtenidos, se observa que los pronósticos para los meses de junio, julio y agosto de 2025 presentan mayores incrementos en comparación con otros periodos, lo que puede indicar cierta estacionalidad o efecto cíclico. Sin embargo, la magnitud de estos cambios sigue siendo moderada, sin representar una anomalía destacada. En general, el modelo pronostica una estabilidad relativa, con ligeros movimientos dentro de rangos controlados y una menor variabilidad en comparación con los datos históricos.

Full

# Ajustar el modelo de suavización exponencial con estacionalidad completa
m5 <- ces(y, seasonality = "full") # ces ajustará el mejor modelo con estacionalidad completa (Holt-Winters similar)

# Definir cuántos períodos quieres pronosticar hacia el futuro (h)
periodos_pronostico_ces_f <- 12 # Pronosticamos los próximos 12 meses

# Generar el pronóstico usando la función forecast()
f5 <- forecast(m5, h = periodos_pronostico_ces_f) # Especificamos h aquí

# Imprimir el resumen del pronóstico
print(f5)
##               Jan          Feb          Mar          Apr          May
## 2025                                                      0.001237126
## 2026  0.001219463 -0.013801937  0.016193850 -0.049822143             
##               Jun          Jul          Aug          Sep          Oct
## 2025 -0.023836490  0.036881134  0.042452398  0.014059822 -0.002773796
## 2026                                                                 
##               Nov          Dec
## 2025  0.038143201 -0.012937511
## 2026
# Graficar el pronóstico
plot(f5)

Regresiones polinómicas

#Modelos polinomicos y
T=length(y)
t = seq(1:T) 
t2 = t^2 
t3 = t^3
t4 = t^4
t5 = t^5
t6 = t^6
t7 = t^7
t8 = t^8

mlineal=lm(y~t)
summary(mlineal)
## 
## Call:
## lm(formula = y ~ t)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.39185 -0.06360  0.00283  0.05226  0.25604 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.0032284  0.0180487  -0.179    0.858
## t            0.0001128  0.0002589   0.436    0.664
## 
## Residual standard error: 0.09824 on 118 degrees of freedom
## Multiple R-squared:  0.001607,   Adjusted R-squared:  -0.006853 
## F-statistic:  0.19 on 1 and 118 DF,  p-value: 0.6637
g1<-predict.lm(mlineal, h=12)
mcuad=lm(y~t+t2)
summary(mcuad)
## 
## Call:
## lm(formula = y ~ t + t2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.40642 -0.06223  0.00374  0.05196  0.25133 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.316e-02  2.723e-02  -1.218    0.226
## t            1.585e-03  1.039e-03   1.526    0.130
## t2          -1.216e-05  8.317e-06  -1.463    0.146
## 
## Residual standard error: 0.09777 on 117 degrees of freedom
## Multiple R-squared:  0.01953,    Adjusted R-squared:  0.002774 
## F-statistic: 1.166 on 2 and 117 DF,  p-value: 0.3154
g2<-predict.lm(mcuad, h=12)
#Grafico sencillo
plot(fechas,y,type="l",col="#828282")
lines(fechas,g1,col="#007bff")
lines(fechas,g2,col="#4c3d19") 

Modelo ARIMA

Prueba de Dickey-Fuller aumentada

library(tseries)
adf.test(y)  # Prueba de Dickey-Fuller aumentada
## Warning in adf.test(y): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  y
## Dickey-Fuller = -5.0186, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary

El resultado del Augmented Dickey-Fuller (ADF) Test indica que la serie y es estacionaria. Aquí están los puntos clave:

Valor de Dickey-Fuller (-5.0186): Este valor negativo fuerte sugiere una tendencia clara a la estacionariedad. En términos generales, cuanto más negativo es este valor, más evidencia hay contra la hipótesis nula de no estacionariedad.

Orden de rezagos (Lag order = 4): Se han considerado 4 rezagos en el modelo para corregir efectos de autocorrelación en la serie temporal.

P-valor (0.01): Como el p-valor es menor a un umbral común de 0.05, se rechaza la hipótesis nula, que en este caso plantea que la serie tiene una raíz unitaria (es decir, no es estacionaria). Rechazar la hipótesis nula implica que la serie es estacionaria con alta confianza.

modelo_arima <- auto.arima(y)
summary(modelo_arima)
## Series: y 
## ARIMA(0,0,0)(0,0,1)[12] with zero mean 
## 
## Coefficients:
##          sma1
##       -0.2613
## s.e.   0.1054
## 
## sigma^2 = 0.009112:  log likelihood = 111.7
## AIC=-219.4   AICc=-219.29   BIC=-213.82
## 
## Training set error measures:
##                       ME       RMSE       MAE      MPE     MAPE      MASE
## Training set 0.005708994 0.09505577 0.0734091 77.76384 147.3718 0.6560559
##                    ACF1
## Training set 0.05322514
pronostico <- forecast(modelo_arima, h = 12)  # Pronóstico para 12 meses
plot(pronostico, main = "Pronóstico ARIMA rendimientos Ecopetrol")

# Si quieres ver los valores del pronóstico:
print(pronostico)
##          Point Forecast       Lo 80      Hi 80      Lo 95     Hi 95
## May 2025   -0.024265875 -0.14659552 0.09806377 -0.2113529 0.1628212
## Jun 2025   -0.041256305 -0.16358595 0.08107334 -0.2283433 0.1458307
## Jul 2025   -0.024505815 -0.14683546 0.09782383 -0.2115929 0.1625812
## Aug 2025    0.015033877 -0.10729576 0.13736352 -0.1720532 0.2021209
## Sep 2025    0.031906049 -0.09042359 0.15423569 -0.1551810 0.2189931
## Oct 2025    0.007926706 -0.11440294 0.13025635 -0.1791603 0.1950137
## Nov 2025   -0.010276838 -0.13260648 0.11205280 -0.1973639 0.1768102
## Dec 2025    0.045764238 -0.07656540 0.16809388 -0.1413228 0.2328513
## Jan 2026    0.001238108 -0.12109153 0.12356775 -0.1858489 0.1883251
## Feb 2026    0.022506451 -0.09982319 0.14483609 -0.1645806 0.2095935
## Mar 2026    0.008835490 -0.11349415 0.13116513 -0.1782516 0.1959225
## Apr 2026    0.031743434 -0.09058621 0.15407308 -0.1553436 0.2188305

Análisis de correlación

  y<-(Caso1$`Rendimientos EC`)
x<-(Caso1$`IPC mensual`)
mcorr<-lm(y~x)
summary(mcorr)
## 
## Call:
## lm(formula = y ~ x)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.39535 -0.06427  0.00195  0.04939  0.25596 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept)  0.01456    0.01897   0.767    0.444
## x           -0.18696    0.28523  -0.655    0.513
## 
## Residual standard error: 0.09814 on 118 degrees of freedom
## Multiple R-squared:  0.003628,   Adjusted R-squared:  -0.004816 
## F-statistic: 0.4296 on 1 and 118 DF,  p-value: 0.5135

La correlación entre x e y es muy débil y no significativa:

El coeficiente de x (-0.18696) no es estadísticamente significativo (p = 0.513).

R² = 0.0036, lo que indica que x explica solo el 0.36% de la variabilidad en y.

El modelo no es significativo globalmente (p = 0.5135).

Conclusión: No hay evidencia de una relación lineal entre x e y.

# Calcular la correlación de Pearson
correlacion_pearson <- cor(Caso1$`Rendimientos EC`, 
                           Caso1$`IPC mensual`, 
                           use = "complete.obs", 
                           method = "pearson")
print(paste("Correlación de Pearson:", correlacion_pearson))
## [1] "Correlación de Pearson: -0.0602300653029232"

Ese coeficiente de Pearson -0.06 indica una correlación muy débil y negativa entre las variables. Prácticamente, no hay relación lineal entre x e y.

Esto confirma lo que mostró el modelo lineal: la relación entre las variables es insignificante tanto estadística como prácticamente

Medidas de error de pronóstico

# Función para calcular las medidas de error
calcular_errores <- function(real, pred) {
  mae <- mean(abs(real - pred))
  rmse <- sqrt(mean((real - pred)^2))
  mape <- mean(abs((real - pred)/real)) * 100
  return(data.frame(MAE = mae, RMSE = rmse, MAPE = mape))
}

# Para cada modelo, usa los valores ajustados (fitted) o predichos (forecast)
# Ejemplo para SMA:
errores_sma <- calcular_errores(y, fitted(m1))
errores_ces <- calcular_errores(y, fitted(m2))
errores_ces_estacional <- calcular_errores(y, fitted(m3))
errores_ces_parcial <- calcular_errores(y, fitted(m4))
errores_ces_full <- calcular_errores(y, fitted(m5))

# Para modelos polinómicos:
errores_lineal <- calcular_errores(y, g1)
errores_cuadratico <- calcular_errores(y, g2)

# Para ARIMA:
errores_arima <- calcular_errores(y, fitted(modelo_arima))
# Mostrar todos los resultados en una tabla
tabla_errores <- rbind(
  SMA = errores_sma,
  CES = errores_ces,
  CES_Estacional = errores_ces_estacional,
  CES_Parcial = errores_ces_parcial,
  CES_Full = errores_ces_full,
  Polinomial_Lineal = errores_lineal,
  Polinomial_Cuadratico = errores_cuadratico,

  ARIMA = errores_arima
)

knitr::kable(tabla_errores, caption = "Medidas de error de pronóstico para cada modelo Ecopetrol")
Medidas de error de pronóstico para cada modelo Ecopetrol
MAE RMSE MAPE
SMA 0.0783313 0.1012507 162.64747
CES 0.0727859 0.0970218 106.94632
CES_Estacional 0.0741369 0.0987946 171.73020
CES_Parcial 0.0685814 0.0922982 123.82661
CES_Full 0.0717099 0.0947092 148.27186
Polinomial_Lineal 0.0731293 0.0974173 99.58586
Polinomial_Cuadratico 0.0719926 0.0965388 115.71774
ARIMA 0.0734091 0.0950558 147.37177

Elección del mejor modelo

# Encontrar el índice (número de fila) del modelo con el menor valor en la columna 'RMSE'
indice_mejor_rmse <- which.min(tabla_errores$RMSE)

# Usar ese índice para obtener el nombre del modelo (el nombre de la fila)
mejor_modelo_rmse <- rownames(tabla_errores)[indice_mejor_rmse]

# Obtener todas las medidas de error para ese modelo en particular
errores_mejor_rmse <- tabla_errores[indice_mejor_rmse, ]

print("--- Mejor Modelo según RMSE (Errores de Ajuste) ---")
## [1] "--- Mejor Modelo según RMSE (Errores de Ajuste) ---"
print(paste("El modelo con el menor RMSE de ajuste es:", mejor_modelo_rmse))
## [1] "El modelo con el menor RMSE de ajuste es: CES_Parcial"
print("Sus medidas de error de ajuste son:")
## [1] "Sus medidas de error de ajuste son:"
print(errores_mejor_rmse)
##                    MAE       RMSE     MAPE
## CES_Parcial 0.06858137 0.09229824 123.8266

El modelo CES Parcial destaca como el mejor modelo en este caso debido a sus métricas de error.

MAE (Error Absoluto Medio) = 0.0686 → Es relativamente bajo, lo que indica que las predicciones tienen una desviación menor respecto a los valores reales.

RMSE (Raíz del Error Cuadrático Medio) = 0.0923 → Esta métrica, que penaliza los errores grandes más que el MAE, también es baja, lo que sugiere una buena precisión del modelo.

MAPE (Porcentaje de Error Absoluto Medio) = 123.83% → Aunque el MAPE es alto, en algunos contextos con valores cercanos a cero, el MAPE puede ser menos confiable. Si el resto de las métricas son favorables, el modelo sigue siendo útil.

En comparación con otros modelos, el CES Parcial probablemente tenga un mejor ajuste a la estructura de la serie temporal, capturando la estacionalidad y los patrones subyacentes con mayor precisión.