Introducción

Este trabajo presenta diferentes métodos de pronóstico de series de tiempo, útiles para analizar y anticipar el comportamiento futuro de datos. Entre ellos se encuentran los promedios móviles, la suavización exponencial, los índices estacionales, las regresiones polinómicas, el análisis de correlación con variables explicativas y los modelos ARIMA. Estos métodos permiten identificar patrones como tendencias, ciclos o estacionalidades, facilitando una mejor toma de decisiones. Su aplicación es clave para anticiparse a cambios y planificar con mayor precisión.

El dataframe

La siguiente base de datos fue obtenida del DANE (Departamento Administrativo Nacional de Estadística) del siguiente link : https://www.dane.gov.co/index.php/estadisticas-por-tema/cuentas-nacionales/indicador-de-seguimiento-a-la-economia-ise; posteriormente, se adapto para el desarrollo del taller, obteniendo lo siguiente:

  • Se puede evidenciar una base de datos de 5 columnas y 243 filas que contienen los datos de la serie de tiempo a estudiar.
  • Serie completa: no se observan datos nulos a primera vista, lo que sugiere una buena calidad de información para análisis estadísticos.
Columna Tipo Descripción
Fecha datetime64 Representa el mes y año del dato reportado. Va de enero de 2005 en adelante, con frecuencia mensual.
Actividades primarias float64 Índice de las actividades económicas primarias como agricultura, ganadería, pesca, caza, y minería.
Actividades secundarias float64 Índice de las actividades secundarias, principalmente la industria manufacturera y la construcción.
Actividades terciarias float64 Índice de las actividades terciarias, que incluyen comercio, transporte, servicios financieros, salud, educación, etc.
Indicador de Seguimiento a la Economía float64 ISE total: es un índice sintético que agrega ponderadamente las tres actividades anteriores. Refleja el comportamiento de la economía en su conjunto.

Proceso de normalización

No se utilizo un proceso adicional para lo normalización, puesto que la base de datos fue adaptada para el taller.

Base de datos

A continuación, una vizualización previa de la base de datos:

#install.packages("e1071")
library(e1071)
# Leemos el archivo
Data <- read_xlsx("C:/Users/apamo/Downloads/Indicador de Seguimiento a la Economía (ISE).xlsx",
                 sheet = "Tabla Final")
Data

Serie de Tiempo Seleccionada

La serie seleccionada es el Indicador de Seguimiento a la Economía (ISE), un índice sintético de frecuencia mensual que tiene como objetivo medir la evolución de la actividad económica nacional en el corto plazo. Esta serie consolida información de múltiples actividades económicas (primarias, secundarias y terciarias).

Descripción a partir de sus componentes.

Antes de empenzar con la descripción a partir de sus componentes, podemos evidenciar una secuencia cronológica de los valores del ISE mes a mes, sin ningún tipo de ajuste estacional o de calendario. Refleja directamente el comportamiento bruto de la economía incluyendo eventos recurrentes como navidad, vacaciones o días no laborables.

-Tendencia (T):

A través del tiempo, se puede observar un crecimiento sostenido del ISE desde 2005 hasta el presente, con un punto de inflexión negativo alrededor de 2020, asociado a la pandemia por COVID-19. Luego, el índice muestra una recuperación acelerada en los meses posteriores.

-Estacionalidad (S):

Al ser una serie mensual, el ISE presenta patrones estacionales regulares: por ejemplo, se suelen observar incrementos hacia los meses de diciembre (mayor actividad comercial y de servicios) y reducciones en enero.

-Ciclo (C):

Se evidencio un ciclo económico mostrando expansión (auge económico) entre 2017 y 2019, seguido por una contracción (recesión económica) en 2020. Además, estas series de tiempo pueden evidenciar tambien ciclos en donde reflejan dinámicas económicas más amplias como crisis políticas, fiscales, entre otras.

-Irregularidad (I):

Comprende las variaciones inexplicables o aleatorias, como lo han sido a lo largo de la historia del país y que han afectado a la economía en su momento. Como fenómenos climáticos extremos, huelgas o eventos sociales que no son sistemáticos. Estos se evidencian como picos o caídas súbitas y breves que no se repiten regularmente.

Por ende, consideramos que esta serie de tiempo CUMPLE con los cuatro componentes que, fueron ya anteriormente descritos.

Preparación de Datos

attach(Data)

# Detectar año y mes de inicio
fecha_inicio <- min(Data$Fecha, na.rm = TRUE)
anio_inicio <- as.numeric(format(fecha_inicio, "%Y"))
mes_inicio <- as.numeric(format(fecha_inicio, "%m"))

# Crear las series temporales con fecha correcta
y <- ts(Data$`Indicador de Seguimiento a la Economía`, frequency = 12, start = c(anio_inicio, mes_inicio))
x <- ts(Data$`Actividades primarias`, frequency = 12, start = c(anio_inicio, mes_inicio))

# Fechas para graficar
fechas <- seq(as.Date(fecha_inicio), length.out = length(y), by = "months")

# Graficar
ts.plot(y, main = "Indicadores de Seguimiento de la Economía (ISE)")

ts.plot(x, main = "Actividades primarias")

  • Se utiliza el archivo de Excel ya mencionado, con datos mensuales del “Indicador de Seguimiento a la Economía (ISE)” y “Actividades primarias”. Se decide graficar las actividades primarias puesto que será la variable “X” en el análisis de correlación.

  • Se crea una serie temporal para ambos indicadores, ajustando la frecuencia y el inicio según la fecha mínima encontrada en los datos (que fue el 01/01/2005).

  • Se grafican ambas series para observar y corroborar los cuatro componentes antes descritos (tendencias, ciclos, estacionalidad e irregularidad).

Modelos de Suavizamiento

¿Qué son?

Los modelos de suavizamiento son técnicas utilizadas en el análisis de series de tiempo para reducir la variabilidad en los datos y resaltar tendencias subyacentes. Su principal objetivo es eliminar el ruido aleatorio y permitir una mejor identificación de patrones.

Modelo de promedios móviles

Los promedios móviles son una técnica estadística utilizada para suavizar fluctuaciones en una serie de datos a lo largo del tiempo, con el fin de identificar tendencias o patrones subyacentes.

#Modelos de suavizamiento
#Modelo de promedios móviles
m1<-sma(y, h=3)
f1<-forecast(m1, h=10)
plot(forecast(m1))

print(f1)
##           Mar      Apr      May      Jun      Jul      Aug      Sep      Oct
## 2025 123.0038 123.3275 123.5303 123.6520 123.9813 123.8841 123.8319 124.0952
##           Nov      Dec
## 2025 124.1317 123.8840

Se ha empleado un modelo de suavizamiento por promedio móvil de 12 períodos, lo que significa que cada punto de pronóstico se basa en el promedio de los 12 períodos anteriores. Además, se ha asumido una distribución normal para los datos.

Podemos deducir varias lo siguiente del gráfico:

-Tendencia: La serie temporal muestra un crecimiento general, aunque con algunas fluctuaciones.

-Pronóstico: A partir de la línea roja, el modelo de promedio móvil (SMA) está proyectando valores futuros con una tendencia ascendente. Esto indica que, según los datos pasados, se espera que el patrón continúe. A partir de los datos del pronóstico, el modelo de promedios móviles predice que el ISE se mantendrá estable y con una leve tendencia al alza durante 2025, con valores entre 123.0 y 124.1.

Modelo de suavización exponencial

El modelo de suavización exponencial es una técnica de pronóstico utilizada para predecir valores futuros en una serie de tiempo, basándose en los valores pasados pero dando más peso a los datos más recientes. A diferencia del promedio móvil simple, que asigna pesos iguales, este modelo aplica una ponderación exponencial decreciente a medida que los datos se alejan en el tiempo.

#Modelo de suavización exponencial
m2<-ces(y,h=3,seasonality = "none")
f2<-forecast(m2)
plot(forecast(m2))

print(f2)
##           Mar      Apr      May      Jun      Jul      Aug      Sep      Oct
## 2025 124.4876 124.7596 125.0628 125.3600 125.6594 125.9592 126.2598 126.5611
##           Nov      Dec
## 2025 126.8632 127.1659

Podemos deducir varias cosas del gráfico:

-Tendencia: La serie muestra un crecimiento sostenido con fluctuaciones, lo que indica que el fenómeno analizado ha aumentado con el tiempo.

-Predicción con CES: Se utilizó el modelo de Suavización Exponencial Compleja (CES) sin estacionalidad, lo que sugiere que los valores futuros se calculan basándose únicamente en tendencias y patrones de los datos históricos.

-La línea morada representa los valores ajustados por el modelo, mientras que la línea azul muestra la predicción a futuro.

  • El modelo CES ( de acuerdo a los datos obtenidos del pronóstico) proyecta un crecimiento sostenido y más marcado del ISE a lo largo del año 2025, en comparación con el modelo de promedios móviles.

  • Cada mes, el valor pronosticado es mayor que el anterior, mostrando una tendencia ascendente clara.

  • El valor del ISE pasa de 124.49 en marzo a 127.17 en diciembre, lo que indica una expectativa de mejora continua en la actividad económica.

Modelo de índices estacionales

El modelo de índices estacionales es una técnica utilizada en series de tiempo para identificar y cuantificar patrones estacionales, es decir, fluctuaciones regulares y repetitivas que ocurren en períodos específicos (como meses, trimestres o semanas).

#Modelo de índices estacionales
m3<-ces(y,h=3,seasonality = "simple")
f3<-forecast(m3)
plot(forecast(m3))

print(f3)
##           Mar      Apr      May      Jun      Jul      Aug      Sep      Oct
## 2025 124.5064 123.1077 125.2612 124.8470 128.3097 128.2461 124.9292 126.7480
##           Nov      Dec
## 2025 131.9036 141.8124

A partir del gráfico generado con el modelo CES (Suavización Exponencial Compleja) con distribución normal, podemos deducir varias cosas:

-La línea negra muestra los datos históricos desde 2005 hasta 2025, reflejando su evolución en el tiempo.

  • El modelo incorpora la estacionalidad en la serie, es decir, tiene en cuenta los patrones que se repiten cada año en ciertos meses.

  • Se observa que los valores pronosticados varían más entre los meses, con picos importantes en noviembre y diciembre (especialmente diciembre, con 141.81), lo que puede estar relacionado con un aumento estacional típico de fin de año (por ejemplo, mayor actividad comercial, festividades, etc.).

  • En los meses intermedios, los valores son más estables, pero aún así muestran fluctuaciones que reflejan la estacionalidad detectada por el modelo.

m4<-ces(y,h=3,seasonality = "partial")
f4<-forecast(m4)
plot(forecast(m4))

print(f4)
##           Mar      Apr      May      Jun      Jul      Aug      Sep      Oct
## 2025 122.2692 118.5406 121.6557 122.5297 124.2574 124.7413 124.9406 124.9666
##           Nov      Dec
## 2025 129.4262 135.5391

A partir del gráfico generado con el modelo CES (Suavización Exponencial Compleja) con estacionalidad parcial y asumiendo una distribución normal, podemos deducir:

  • El modelo incorpora estacionalidad parcial, es decir, reconoce ciertos patrones estacionales pero no tan marcados como el modelo completamente estacional.

  • Se observa que los valores pronosticados varían entre los meses, con un pico importante en diciembre (135.54) y un aumento significativo en noviembre (129.43).

  • En los meses intermedios, los valores son más estables, aunque abril muestra un valor más bajo (118.54), lo que puede indicar una estacionalidad ese mes.

m5<-ces(y,h=3,seasonality = "full")
f5<-forecast(m5)
plot(forecast(m5))

print(f5)
##           Mar      Apr      May      Jun      Jul      Aug      Sep      Oct
## 2025 123.5808 118.9022 121.8284 123.6517 126.3066 126.5314 125.2474 126.3556
##           Nov      Dec
## 2025 131.1916 139.2957

Se ha utilizado la versión completa (full) del modelo de Suavización Exponencial Compleja (CES), que incorpora tanto tendencia como estacionalidad. Esto implica que la predicción considera no solo la evolución general del fenómeno, sino también posibles patrones repetitivos a lo largo del tiempo. Se deduce lo siguiente:

  • Hay picos y valles recurrentes dentro de cada año, lo que confirma la presencia de estacionalidad. Por ejemplo, los valores tienden a subir y bajar en patrones repetitivos año a año.

  • A partir de la línea roja vertical (2025) comienza la predicción del modelo (línea azul). Este pronóstico sigue la misma tendencia creciente y mantiene la estacionalidad detectada.

  • El modelo (línea morada) ajusta bien los datos históricos. La línea está bastante alineada con los valores reales (línea negra), lo que sugiere que el modelo CES capturó adecuadamente la tendencia y la estacionalidad de la serie.

Modelos Polinómicos

Los modelos polinómicos de pronóstico son una técnica que utiliza un polinomio de grado 𝑛 para representar la tendencia subyacente en una serie temporal y proyectarla hacia el futuro.

#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 
## -27.5120  -2.9232   0.0471   2.6014  16.6846 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 64.907831   0.723257   89.74   <2e-16 ***
## t            0.248383   0.005161   48.13   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.608 on 240 degrees of freedom
## Multiple R-squared:  0.9061, Adjusted R-squared:  0.9057 
## F-statistic:  2317 on 1 and 240 DF,  p-value: < 2.2e-16
g1<-predict.lm(mlineal, h=3)

Este es el resultado del modelo polinómico lineal (de primer grado) ajustado sobre una serie temporal. Se deduce lo siguiente:

  • La prueba de significancia global evalúa si el modelo en su conjunto es relevante. En este caso, el valor de la F-statistic es 2317 con un p-valor de < 2.2e-16, lo que es mucho menor que 0.05. Esto nos permite rechazar la hipótesis nula de que todos los coeficientes son cero, lo que significa que el modelo es globalmente significativo.

  • Significancia individual de los coeficientes : en cuanto a los coeficientes del modelo, se verifica si cada uno es significativamente diferente de cero:

    • Intercepto: tiene un valor estimado de 64.90, con un p-valor de < 2e-16, lo que indica que el valor inicial es altamente significativo.

    • Pendiente (t): tiene un valor estimado de 0.24, con un p-valor de < 2e-16, lo que confirma que el efecto del tiempo es estadísticamente significativo.

    • Ambos coeficientes son altamente significativos, lo que implica que tanto el valor inicial como el cambio por unidad de tiempo son relevantes.

  • Bondad de ajuste del modelo:

    • El R² (R-squared) es 0.9061, lo que significa que el 90.61% de la variabilidad de y es explicada por el modelo. Esto sugiere que el modelo captura de manera efectiva el comportamiento de la variable dependiente.
mcuad=lm(y~t+t2)
summary(mcuad)
## 
## Call:
## lm(formula = y ~ t + t2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -27.7389  -2.6935  -0.0145   2.6567  17.1335 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6.260e+01  1.075e+00  58.263  < 2e-16 ***
## t            3.050e-01  2.042e-02  14.938  < 2e-16 ***
## t2          -2.330e-04  8.138e-05  -2.864  0.00456 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.526 on 239 degrees of freedom
## Multiple R-squared:  0.9092, Adjusted R-squared:  0.9085 
## F-statistic:  1197 on 2 and 239 DF,  p-value: < 2.2e-16
g2<-predict.lm(mcuad, h=3)

Este es el resultado del modelo polinómico cuadrado (de segundo grado) ajustado sobre una serie temporal. Se deduce lo siguiente:

  • Significancia global del modelo: la prueba de significancia global evalúa si el modelo es relevante en su conjunto. El F-statistic es 1197 con un p-valor de < 2.2e-16, lo que es mucho menor que 0.05. Esto indica que el modelo es globalmente significativo.

  • Significancia individual de los coeficientes: la significancia de cada coeficiente muestra si cada uno tiene un efecto estadísticamente relevante:

    • Intercepto (constante): estimado de 62.60, con un p-valor de < 2e-16, lo que indica que el intercepto es altamente significativo.

    • t: estimado de 0.305, con un p-valor de < 2e-16, lo que significa que el tiempo t tiene un efecto estadísticamente significativo sobre y.

    • t2: estimado de -0.000233, con un p-valor de 0.00456, lo que indica que también tiene un efecto significativo, aunque con un valor negativo. Este valor negativo sugiere una relación no lineal (curva descendente) con y.

    -Todos los coeficientes son estadísticamente significativos.

  • Bondad de ajuste del modelo: R² (R-squared): 0.9092, lo que significa que el modelo explica el 90.92% de la variabilidad de y.

mcub=lm(y~t+t2+t3)
summary(mcub)
## 
## Call:
## lm(formula = y ~ t + t2 + t3)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -27.1193  -2.9297   0.1636   2.5831  17.4652 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6.113e+01  1.439e+00  42.477  < 2e-16 ***
## t            3.772e-01  5.118e-02   7.369 2.81e-12 ***
## t2          -9.739e-04  4.889e-04  -1.992   0.0475 *  
## t3           2.033e-06  1.323e-06   1.537   0.1257    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.51 on 238 degrees of freedom
## Multiple R-squared:  0.9101, Adjusted R-squared:  0.909 
## F-statistic: 803.4 on 3 and 238 DF,  p-value: < 2.2e-16
g3<-predict.lm(mcub, h=3)

Este es el resultado del modelo polinómico cúbico (de tercer grado) ajustado sobre una serie temporal. Se deduce lo siguiente:

  • Significancia global del modelo: La prueba de significancia global evalúa si el modelo en su conjunto es significativo, es decir, si al menos uno de los coeficientes es diferente de cero. El F-statistic es 803.4 con un p-valor de < 2.2e-16, que es muy menor que 0.05. Esto indica que el modelo es globalmente significativo.

  • Significancia individual de los coeficientes: La significancia de cada coeficiente muestra si cada uno tiene un efecto estadísticamente relevante:

    • Intercepto (constante): estimado de 61.13, con un p-valor de < 2e-16, lo que significa que el intercepto es altamente significativo.

    -t1: estimado de 0.377, con un p-valor de 2.81e-12, lo que indica que tiene un efecto estadísticamente significativo sobre y.

    -t2:Estimado de -0.0009739, con un p-valor de 0.0475, lo que indica que el término también tiene un efecto significativo en y.

    -t3: estimado de 2.033e-06, con un p-valor de 0.1257, lo que indica que el término cúbico no es significativo. El p-valor es mayor que 0.05, lo que sugiere que NO aporta información relevante para el modelo.

  • Bondad de ajuste del modelo: R² (R-squared): 0.9101, lo que significa que el modelo explica el 91.01% de la variabilidad de y.

Se presume que:

  • t3 no mejora sustancialmente el ajuste respecto al cuadrático y además incluye un término que no es estadísticamente significativo, por lo que el modelo cuadrático parece ser más adecuado y parsimonioso.

Se va intentar con un grado más, a ver si sigue con el mismo patrón.

mcuatro=lm(y~t+t2+t3+t4)
summary(mcuatro)
## 
## Call:
## lm(formula = y ~ t + t2 + t3 + t4)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -26.174  -2.825  -0.161   2.232  18.737 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6.426e+01  1.789e+00  35.926  < 2e-16 ***
## t            1.238e-01  1.016e-01   1.219  0.22405    
## t2           3.696e-03  1.695e-03   2.181  0.03017 *  
## t3          -2.782e-05  1.047e-05  -2.658  0.00840 ** 
## t4           6.142e-08  2.137e-08   2.874  0.00442 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.428 on 237 degrees of freedom
## Multiple R-squared:  0.9132, Adjusted R-squared:  0.9117 
## F-statistic:   623 on 4 and 237 DF,  p-value: < 2.2e-16
g4<-predict.lm(mcuatro, h=3)

Este es el resultado del modelo polinómico de cuarto grado ajustado sobre una serie temporal. Se deduce lo siguiente:

  • Significancia global del modelo: La prueba de significancia global evalúa si el modelo en su conjunto es significativo, es decir, si al menos uno de los coeficientes es diferente de cero. El F-statistic es 623 con un p-valor de < 2.2e-16, que es mucho menor que 0.05 (Aunque suele ir disminuyendo a medida que aumenta los grados).

  • Significancia individual de los coeficientes: La significancia de cada coeficiente muestra si cada uno tiene un efecto estadísticamente relevante:

    • Intercepto (constante): estimado de 64.26, con un p-valor de < 2e-16, lo que indica que el intercepto es altamente significativo.

    -t1: estimado de 0.1238, con un p-valor de 0.22405, que no es significativo (p > 0.05).

    -t2:Estimado de 0.003696, con un p-valor de 0.03017, s significativo (p < 0.05).

    -t3: estimado de -0.00002782, con un p-valor de 0.00840, es significativo (p < 0.05)

    -t4: estimado de 0.00000006142, con un p-valor de 0.00442, que es significativo (p < 0.05).

  • Bondad de ajuste del modelo: R² (R-squared): 0.9132, lo que significa que el modelo explica el 91.32% de la variabilidad de y.

Se presume que:

  • El ajuste sigue mejorando, aunque de forma marginal.

  • El modelo de grado 4 mejora el ajuste ligeramente y revela una tendencia no lineal más compleja, pero el coeficiente lineal ya no es significativo, lo que sugiere que no todos los términos son necesarios. Como se esta presentando señales de colinealidad y el criterio de parsimonia deja de existir a medida que aumentamos el grado, no sería recomendable seguir aumentando el grado del modelo.

  • El hecho de que el coeficiente lineal ya no sea significativo indica que el modelo ha alcanzado un punto en el que la relación entre las variables no se mejora sustancialmente con la inclusión de términos adicionales. Además, el aumento de grados podría introducir complejidad innecesaria y riesgo de sobreajuste.

Gráfico de Modelos Polinómicos

El gráfico de modelos polinómicos nos es útil porque nos permite visualizar cómo se ajusta el modelo a los datos, identificar la forma de la relación y comparar fácilmente diferentes grados del modelo.

#Grafico sencillo
plot(fechas,y,type="l",col="#828282")
lines(fechas,g1,col="#007bff")
lines(fechas,g2,col="#4c3d19")
lines(fechas,g3,col="#28a745")
lines(fechas,g4,col="#501122")

El gráfico de modelos polinomiales nos permite evaluar cómo diferentes ajustes polinomiales representan una serie temporal de datos. Podemos observar que algunos modelos capturan mejor la tendencia general, mientras que otros pueden ser demasiado complejos y generar sobreajuste, lo que afecta su capacidad de predicción.

Análisis de correlación

Un análisis de correlación es una técnica estadística que permite medir y evaluar la fuerza y dirección de la relación entre dos o más variables cuantitativas. No implica causalidad, solo asociación.

Vamos a hacerlo de dos formas:

Correlación lineal

El siguiente código, ajusta un modelo de regresión lineal y proporciona un resumen de los resultados del modelo junto con las predicciones de y basadas en x.

mcorr<-lm(y~x)
summary(mcorr)
## 
## Call:
## lm(formula = y ~ x)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -20.6470  -6.2606  -0.4203   4.4072  23.6240 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -15.87723    3.51566  -4.516 9.88e-06 ***
## x             1.21428    0.03806  31.905  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.995 on 240 degrees of freedom
## Multiple R-squared:  0.8092, Adjusted R-squared:  0.8084 
## F-statistic:  1018 on 1 and 240 DF,  p-value: < 2.2e-16
f6<-predict.lm(mcorr)

Se infiere que:

El p-valor es muchísimo menor que 0.05, por lo tanto, se rechaza la hipótesis nula de que el modelo no explica la variabilidad de y.

Conclusión: El modelo es globalmente significativo; es decir, la variable x (Actividades primarias) explica una parte importante de la variabilidad de (ISE) que es y.

Por cada unidad que aumentan las actividades primarias, el ISE aumenta en promedio 1.21 unidades.

Por ende, podemos decir que: Existe una relación lineal positiva y fuerte entre las actividades primarias y el ISE. Es decir, a mayor nivel de actividades primarias, mayor es el valor del ISE, y esta relación es estadísticamente significativa.

Sin embargo, queremos comprobarlo por otro tipo de correlación.

Coeficiente de correlación de Pearson

El coeficiente de correlación de Pearson es una medida estadística que indica la fuerza y dirección de la relación lineal entre dos variables cuantitativas.

# Cargar librería
library(readxl)

# Leer los datos desde la hoja "Tabla Final"
data <- read_xlsx("C:/Users/apamo/Downloads/Indicador de Seguimiento a la Economía (ISE).xlsx", 
                  sheet = "Tabla Final")


# Calcular la correlación de Pearson
correlacion_pearson <- cor(data$`Actividades primarias`, 
                           data$`Indicador de Seguimiento a la Economía`, 
                           use = "complete.obs", 
                           method = "pearson")
print(paste("Correlación de Pearson:", correlacion_pearson))
## [1] "Correlación de Pearson: 0.899563199509689"

El resultado de la correlación de Pearson fue de 0.8996, indicando una correlación positiva muy fuerte entre las dos variables analizadas. En otras palabras:

  • A medida que una variable aumenta, la otra también tiende a aumentar.

  • El valor está muy cerca de 1, lo que sugiere una relación lineal fuerte y consistente.

  • Es probable que el modelo de regresión lineal entre ambas variables sea adecuado

# Prueba de significancia estadística
cor_test <- cor.test(data$`Actividades primarias`, 
                    data$`Indicador de Seguimiento a la Economía`)
print(cor_test)
## 
##  Pearson's product-moment correlation
## 
## data:  data$`Actividades primarias` and data$`Indicador de Seguimiento a la Economía`
## t = 31.905, df = 240, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.8724257 0.9211710
## sample estimates:
##       cor 
## 0.8995632

El análisis de correlación de Pearson entre Actividades primarias y el Indicador de Seguimiento a la Economía arrojó un coeficiente de 0.8996, lo que indica una relación lineal positiva muy fuerte. La prueba de significancia estadística muestra un p-valor menor a 2.2e-16, por lo que se rechaza la hipótesis nula y se concluye que la correlación es significativa. El intervalo de confianza del 95% (0.8724 a 0.9212) respalda la solidez del resultado, evidenciando una asociación consistente entre ambas variables.

# Visualización
library(ggplot2)
ggplot(data, aes(x = `Actividades primarias`, y = `Indicador de Seguimiento a la Economía`)) +
  geom_point(color = "blue") +
  geom_smooth(method = "lm", se = TRUE, color = "red") +
  labs(title = "Correlación entre Actividades primarias e ISE",
       x = "Actividades primarias",
       y = "Indicador de Seguimiento a la Economía")

El gráfico generado fue un diagrama de dispersión (scatter plot) con una línea de tendencia lineal (en rojo) que muestra la relación entre las variables “Actividades primarias” (eje X) y “Indicador de Seguimiento a la Economía” (eje Y).

¿Qué significa este gráfico?

  • Relación positiva fuerte: Los puntos azules muestran que, a medida que aumentan las “Actividades primarias”, también aumenta el “Indicador de Seguimiento a la Economía”. Esto indica una correlación positiva: cuando una variable sube, la otra también.

  • Línea de tendencia:La línea roja es el ajuste lineal (regresión lineal) que resume la relación entre ambas variables.

  • Que la mayoría de los puntos estén cerca de la línea indica que la relación es fuerte y bastante lineal.

  • Poca dispersión: La dispersión de los puntos alrededor de la línea no es muy grande, lo que refuerza la idea de que la relación es fuerte.

  • Interpretación económica: Esto sugiere que el comportamiento de las actividades primarias (como agricultura, ganadería, minería, etc.) tiene un impacto importante y directo sobre el desempeño general de la economía, medido por el ISE.

Modelos estocásticos (ARIMA)

Los modelos estocásticos ARIMA, son una clase de modelos utilizados para analizar y predecir series de tiempo. Son ampliamente usados en economía, estadísticas y ciencias sociales cuando se busca modelar fenómenos que evolucionan en el tiempo.

¿Qué es una serie estocástica?

Una serie estocástica es aquella que tiene un componente aleatorio (incertidumbre), es decir, no puede predecirse completamente, pero sigue ciertos patrones que sí pueden modelarse estadísticamente.

Analizar la estacionariedad de la serie de tiempo

Vamos a realizar el test de Dickey-Fuller aumentado (ADF), una prueba estadística utilizada para verificar si una serie de tiempo es estacionaria o no.

library(tseries)
adf.test(y)  # Prueba de Dickey-Fuller aumentada
## 
##  Augmented Dickey-Fuller Test
## 
## data:  y
## Dickey-Fuller = -4.7715, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary

Dado que el p-value < 0.01, se rechaza la hipótesis nula de que la serie tiene una raíz unitaria (es no estacionaria), y se acepta la hipótesis alternativa de que la serie es estacionaria.

Esto implica que la media y la varianza de la serie son constantes en el tiempo, y por tanto, puede ser modelada directamente con un modelo ARIMA sin diferenciación adicional

Modelo ARIMA

library(forecast)
modelo_arima <- auto.arima(y)
summary(modelo_arima)
## Series: y 
## ARIMA(1,0,3)(0,1,1)[12] with drift 
## 
## Coefficients:
##          ar1      ma1      ma2     ma3     sma1   drift
##       0.8489  -0.0330  -0.1694  0.1596  -0.6744  0.2492
## s.e.  0.0574   0.0849   0.0840  0.0687   0.0554  0.0265
## 
## sigma^2 = 4.671:  log likelihood = -504.77
## AIC=1023.53   AICc=1024.04   BIC=1047.6
## 
## Training set error measures:
##                      ME     RMSE      MAE        MPE     MAPE      MASE
## Training set 0.01929379 2.079345 1.295555 -0.0123306 1.341301 0.3152816
##                      ACF1
## Training set -0.001533339

El modelo ARIMA ajustado muestra buenos resultados. Los coeficientes son significativos y la predicción tiene errores bajos, con un RMSE de 2.08 y un MAE de 1.30, lo que indica una buena precisión. La tendencia positiva (drift) sugiere un crecimiento en los datos. Los residuos del modelo no tienen autocorrelación significativa. Los valores de AIC y BIC no son muy bajos, lo que podría sugerir que el modelo puede mejorarse, pero en general, es adecuado.

pronostico <- forecast(modelo_arima, h = 12)  # Pronóstico para 12 meses
plot(pronostico, main = "Pronóstico ARIMA para el ISE")

El modelo ARIMA ajustado al Indicador de Seguimiento a la Economía (ISE) permitió generar un pronóstico para los próximos 12 meses. El gráfico muestra que el ISE mantendría su tendencia creciente, con fluctuaciones estacionales similares a las observadas históricamente. Los intervalos de confianza reflejan la incertidumbre inherente al pronóstico, pero en general, el modelo sugiere que la economía continuará recuperándose y creciendo en el corto plazo.

Medidas de error de pronóstico

Las medidas de error de pronóstico son herramientas estadísticas utilizadas para evaluar la precisión de un modelo de pronóstico comparando los valores reales observados con los valores predichos. Estas medidas permiten saber qué tan cerca o lejos estuvo el pronóstico de la realidad, ayudando a mejorar modelos futuros. Algunos de ellos son:

  • MAE (Mean Absolute Error): Es el promedio de las diferencias absolutas entre los valores reales y los pronosticados. Mide cuánto se desvía en promedio el pronóstico sin importar la dirección del error. Interpretación: Un MAE bajo indica que, en promedio, los errores de pronóstico son pequeños, siendo fácil de entender y comparar.

  • RMSE (Root Mean Square Error): Es la raíz cuadrada del promedio de los errores al cuadrado. Da mayor peso a los errores grandes al elevarlos al cuadrado antes de promediarlos. Interpretación: Un RMSE bajo sugiere un modelo más preciso, pero es más sensible a errores extremos que el MAE.

  • MAPE (Mean Absolute Percentage Error): Calcula el error absoluto como porcentaje del valor real, permitiendo comparar el rendimiento del modelo en distintas escalas. Interpretación: Un MAPE bajo (por ejemplo, menor al 10%) indica una alta precisión del pronóstico en términos relativos.

A continuación, se presenta los resultados obtenidos:

# 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)
errores_cubico <- calcular_errores(y, g3)
errores_cuarto <- calcular_errores(y, g4)

# 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,
  Polinomial_Cubico = errores_cubico,
  Polinomial_Cuarto_Grado = errores_cuarto,
  ARIMA = errores_arima
)

knitr::kable(tabla_errores, caption = "Medidas de error de pronóstico para cada modelo")
Medidas de error de pronóstico para cada modelo
MAE RMSE MAPE
SMA 3.794829 5.480963 3.903229
CES 3.713245 5.316510 3.867300
CES_Estacional 2.851181 4.404171 3.102142
CES_Parcial 1.540220 2.302605 1.651569
CES_Full 1.427494 2.315468 1.478069
Polinomial_Lineal 3.965102 5.584969 4.160197
Polinomial_Cuadratico 3.779402 5.491558 3.926357
Polinomial_Cubico 3.803242 5.464515 3.951042
Polinomial_Cuarto_Grado 3.776436 5.371698 3.933705
ARIMA 1.295554 2.079345 1.341301

El mejor pronóstico

Podemos determinar el mejor modelo de pronóstico de manera manual o mediante un código. En este caso, utilizaremos un código que selecciona el modelo más preciso con base en tres métricas de error: RMSE, MAE y MAPE. Para cada métrica, identifica el modelo con el valor más bajo en la tabla de errores y lo destaca como el más preciso según ese criterio específico. Dado que un menor valor en estas métricas indica mayor precisión, el modelo con los errores más bajos será el más adecuado para realizar pronósticos confiables.

Obtuvimos el siguiente resultado:

# Elegir el modelo con el menor RMSE
mejor_modelo_rmse <- tabla_errores[which.min(tabla_errores$RMSE), ]
cat("El mejor modelo según el menor RMSE es:\n")
## El mejor modelo según el menor RMSE es:
print(mejor_modelo_rmse)
##            MAE     RMSE     MAPE
## ARIMA 1.295555 2.079345 1.341301
# Elegir el modelo con el menor MAE
mejor_modelo_mae <- tabla_errores[which.min(tabla_errores$MAE), ]
cat("El mejor modelo según el menor MAE es:\n")
## El mejor modelo según el menor MAE es:
print(mejor_modelo_mae)
##            MAE     RMSE     MAPE
## ARIMA 1.295555 2.079345 1.341301
# Elegir el modelo con el menor MAPE
mejor_modelo_mape <- tabla_errores[which.min(tabla_errores$MAPE), ]
cat("El mejor modelo según el menor MAPE es:\n")
## El mejor modelo según el menor MAPE es:
print(mejor_modelo_mape)
##            MAE     RMSE     MAPE
## ARIMA 1.295555 2.079345 1.341301

¿Por qué el modelo ARIMA es el mejor?

El modelo ARIMA es el mejor entre los modelos evaluados porque presenta los valores más bajos en las tres principales medidas de error de pronóstico:

  • MAE (Error Absoluto Medio): 1.30 Esto significa que, en promedio, las predicciones del modelo ARIMA se desvían solo 1.30 unidades del valor real observado.

  • RMSE (Raíz del Error Cuadrático Medio): 2.08 El RMSE penaliza más los errores grandes. Un valor bajo indica que el modelo no solo tiene errores pequeños en promedio, sino que también evita errores grandes.

  • MAPE (Error Porcentual Absoluto Medio): 1.34 Este valor indica que, en promedio, el error de las predicciones es solo del 1.34 respecto al valor real. Es un porcentaje muy bajo, lo que significa que el modelo es muy preciso.

¿Y eso en que traduce?

El modelo ARIMA es el mejor porque sus errores son mínimos, lo que garantiza pronósticos muy cercanos a la realidad. Además, un MAPE menor al 2% se considera excelente en la mayoría de aplicaciones de series de tiempo.

¿Qué traduce ese pronóstico de acuerdo a la data?

El modelo ARIMA, ajustado a tu serie del “Indicador de Seguimiento a la Economía (ISE)”, genera pronósticos que reflejan la tendencia y los patrones históricos de la economía colombiana, según los datos del DANE.

  • Interpretación del pronóstico: el modelo proyecta que el ISE continuará con la tendencia observada en los datos históricos, es decir, un crecimiento sostenido tras la recuperación post-pandemia.

  • Los valores pronosticados para los próximos meses serán muy similares a los valores reales, con un margen de error muy bajo (alrededor de 1.3 unidades). Esto significa que las decisiones basadas en este pronóstico serán confiables, ya que el modelo captura adecuadamente la dinámica de la economía reflejada en el ISE.

  • Si el ISE es un índice que mide la actividad económica, el modelo ARIMA permite anticipar con alta precisión cómo se comportará la economía en los próximos meses, facilitando la planeación y la toma de decisiones informadas.

Herramientas fundamentales para evaluar la distribución de los datos de un modelo de pronóstico

Prueba de normalidad:

Esta prueba permite verificar si los datos siguen una distribución normal. La mayoría de los modelos estadísticos paramétricos, asumen que los errores o residuos del modelo siguen una distribución normal. Si los datos no siguen esta distribución, el modelo podría no ser el más adecuado.

residuos_arima <- residuals(modelo_arima)

Histograma

Un histograma es una representación visual de la distribución de los datos. Permite observar si los datos tienen la forma típica de una distribución normal (en forma de campana) o si presentan sesgos, colas largas u otras irregularidades. Aunque el histograma no proporciona una prueba formal, es una herramienta rápida para identificar patrones en los datos.

hist(residuos_arima, main = "Histograma de los residuos ARIMA", xlab = "Residuos")

Se observa que la mayoría de los residuos están concentrados cerca de cero, pero la distribución no es perfectamente simétrica y parece estar ligeramente sesgada hacia la izquierda (hay algunos residuos negativos extremos).

Esto puede deberse a eventos atípicos en la serie, a la presencia de estacionalidad no capturada, o a la necesidad de ajustar el modelo.

Q-Q Plot

Este gráfico compara los cuantiles de los datos con los cuantiles de una distribución normal. Si los puntos del gráfico se alinean a lo largo de una línea recta, es una señal de que los datos se ajustan bien a una distribución normal.

qqnorm(residuos_arima, main = "Q-Q plot de los residuos ARIMA")
qqline(residuos_arima, col = "red")

En el gráfico, los puntos se desvían notablemente de la línea roja en los extremos, especialmente en la parte inferior izquierda (valores negativos grandes).

Los residuos del modelo ARIMA no siguen una distribución normal, principalmente por la presencia de valores extremos (outliers).

Análisis de las herramientas

El análisis gráfico de los residuos del modelo ARIMA, mediante el histograma y el Q-Q plot, muestra que la mayoría de los residuos se concentran cerca de cero, pero existen valores extremos y cierta asimetría. Esto indica que los residuos no siguen una distribución normal, lo cual puede estar relacionado con la presencia de eventos atípicos en la economía colombiana durante el periodo analizado. Aunque esta falta de normalidad puede limitar la validez de algunas inferencias estadísticas, el modelo sigue siendo útil para el pronóstico