## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2014 3520 3500 4030 3605 3430 3410 3180 3325 3165 2750 2290 2080
## 2015 1955 2085 1975 2030 1815 1730 1610 1595 1330 1350 1305 1110
## 2016 1030 1140 1310 1415 1340 1395 1300 1320 1250 1310 1320 1380
## 2017 1375 1320 1350 1360 1335 1380 1395 1370 1400 1665 1750 2210
## 2018 2660 2510 2615 3100 3090 3025 3070 3420 4030 3740 3105 2645
## 2019 2920 3120 3415 2985 2765 2920 2940 2740 2950 3040 3290 3315
## 2020 3180 3105 1900 2090 1990 2075 2080 2190 1895 1791 2081 2245
## 2021 2030 2250 2366 2210 2190 2722 2633 2643 2734 2847 2600 2690
## 2022 2905 3263 3538 3206 3120 2253 2280 2257 2074 2450 2290 2420
## 2023 2669 2698 2450 2288 2036 2140 2292 2357 2365 2423 2520 2340
## 2024 2335 2290 2075 2280 2360 2320 2175 2055 1880 1700 1800 1675
#Gráfico inicial de la variable 1 en niveles -Original
#Tendencia
#Tasa de crecimiento de la serie de tendencia y original
## [1] 120
## [1] 120
## [1] 120
Un modelo ARIMA (Autoregressive Integrated Moving Average) es una herramienta estadística utilizada para analizar y predecir series de tiempo. En términos simples, es como una “bola de cristal matemática” que usa datos pasados para estimar valores futuros, especialmente útil en finanzas para preveer precios, ventas o ingresos.
Desglose del nombre ARIMA 1. Autoregressive o autorregresivo (AR) → Usa valores pasados para predecir el futuro 2. Integrated (I) → Ajusta tendencias en los datos para hacerlos estacionarios (sin patrones cambiantes en el tiempo). 3.MAving Average o media móvil (MA)- → Suaviza fluctuaciones aleatorias a partir de errores pasados.
ARIMA combina estos tres elementos para crear una predicción más precisa.
La metodología Box-Jenkins es un enfoque sistemático para construir modelos ARIMA con el objetivo de analizar y pronosticar series de tiempo. Fue desarrollada por George Box y Gwilym Jenkins y se basa en cuatro etapas clave:
1️⃣ Identificación 2️⃣ Estimación 3️⃣ Validación 4️⃣ Pronóstico
Se usa especialmente cuando se quiere encontrar el modelo ARIMA más adecuado para una serie de tiempo.
Antes de empezar a aplicar la metodología BOX-JENKINS, lo ideal es dividir el conjunto de datos de prueba y entrenamiento
✅ Para entrenar el modelo con datos históricos sin usar información futura. ✅ Para evaluar la precisión del modelo comparando sus predicciones con los datos reales de prueba.
💡 Esta división es clave en modelos predictivos para evitar sobreajuste y evaluar el rendimiento en datos no vistos.
#División en conjunto de entrenamiento y prueba para la variable que es la elegida para pronosticar
El código siguiente divide una serie temporal (variable1_ts) en dos subconjuntos:
Conjunto de entrenamiento (train): Datos desde enero de 2012 hasta septiembre de 2024. Conjunto de prueba (test): Datos desde octubre de 2024 hasta diciembre de 2024.
Esto se hace para evaluar el desempeño de modelos de predicción en datos no vistos.
✅ Su promedio no cambia con el tiempo.. ✅Su variabilidad (qué tanto fluctúa) se mantiene estable. ✅ Su relación con valores pasados es siempre la misma.
¿Cómo saber si una serie es estacionaria?
1️⃣ Observando un gráfico Si el gráfico de la serie muestra una tendencia creciente o decreciente, o si las variaciones se hacen más grandes con el tiempo, la serie probablemente no es estacionaria.
2️⃣ Usando la prueba de Dickey-Fuller Aumentada (ADF) Es una prueba estadística que nos dice si la serie tiene una tendencia fuerte. Si el p-valor de la prueba es mayor a 0.05, significa que la serie no es estacionaria.
¿Cómo hacer una serie estacionaria?
Si encontramos que la serie no es estacionaria, podemos transformarla para que lo sea:
✅ Diferenciación: Restamos cada valor con su valor anterior. Esto elimina tendencias crecientes o decrecientes. ✅ Tomar el logaritmo: Si la variabilidad crece con el tiempo, aplicar un logaritmo estabiliza la varianza. ✅ Eliminar tendencias o ajustar estacionalidad: Si hay patrones repetitivos, podemos restarlos o modelarlos por separado.
Test de Dickey-Fuller
El test de Dickey-Fuller aumentado (ADF) se usa para verificar si una serie temporal es estacionaria, es decir, si sus propiedades estadísticas (media y varianza) permanecen constantes en el tiempo.
HO: Serie no estacionaria HI: Serie estacionaria
¿Qué significa el p-valor?
Si el p-valor es bajo (< 0.05) → Rechazamos la hipótesis nula y concluimos que la serie es estacionaria. Si el p-valor es alto (> 0.05) → No podemos rechazar la hipótesis nula, lo que indica que la serie no es estacionaria.
A continuación se aplica el test ADF para validar estacionariedad en el conjunto de entrenamiento de la variable 1, que es la elegida para pronosticar:
##
## Augmented Dickey-Fuller Test
##
## data: train_ts
## Dickey-Fuller = -2.6836, Lag order = 5, p-value = 0.2923
## alternative hypothesis: stationary
El test ADF en la variable 1 arrojó un p-value igual a 0.2923, este valor es mayor a 0.05, por tanto la serie es no estacionaria. De ese modo se debe ejecutar el código siguiente para diferenciar una vez la variable 1 y luego volver a aplicar el test ADF a esa serie diferenciada una vez:
#Diferenciación en niveles
A continuación, se realiza el gráfico de la serie original y diferenciada (una vez) para ver graficamente el cambio o ajuste:
#A continuación se aplica la diferenciación logarítimica y la varible u objeto ahora se llama train_diff_log:
#Ahora graficamos la serie orignal versus la serie diferenciada una vez con logaritmo
#Ahora probamos estacionariedad en la serie diferenciada ( en nivel y logaritmo)
##
## Augmented Dickey-Fuller Test
##
## data: train_diff
## Dickey-Fuller = -4.1595, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
##
## Augmented Dickey-Fuller Test
##
## data: train_diff_log
## Dickey-Fuller = -3.9858, Lag order = 5, p-value = 0.0122
## alternative hypothesis: stationary
#Identificación manual de p y q ¿Qué hacen estos gráficos?
ACF (Autocorrelation Function)
Muestra la correlación de la serie con sus rezagos.
Ayuda a determinar el parámetro q en un modelo ARIMA(p, d, q).
PACF (Partial Autocorrelation Function)
Muestra la correlación parcial entre la serie y un rezago específico, eliminando el efecto de rezagos intermedios.
Ayuda a determinar el parámetro p en un modelo ARIMA(p, d, q).
Recordemos El eje X representa los rezagos (lags). El eje Y muestra la autocorrelación parcial en cada rezago. Las líneas azules punteadas son los intervalos de confianza (aproximadamente 95%). Si una barra sobrepasa estos límites, indica una autocorrelación significativa. Si las barras caen dentro de los límites, no son significativamente diferentes de cero
En el código siguiente se crean los correlogramas para determinar los posibles valores que puedeo tomar el parámetro p** y q:**
## Series: train_ts
## ARIMA(1,1,1)
##
## Coefficients:
## ar1 ma1
## -0.1707 0.2658
## s.e. 0.6964 0.6787
##
## sigma^2 = 62772: log likelihood = -887.65
## AIC=1781.29 AICc=1781.49 BIC=1789.85
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -11.81985 247.6135 174.5452 -0.9199437 7.429554 0.2449712
## ACF1
## Training set -0.003479722
#Significancia de coefientes
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.17074 0.69641 -0.2452 0.8063
## ma1 0.26585 0.67872 0.3917 0.6953
##
## Ljung-Box test
##
## data: Residuals from ARIMA(1,1,1)
## Q* = 18.485, df = 22, p-value = 0.6769
##
## Model df: 2. Total lags used: 24
Pronóstico en el test de prueba (oct, nov y dic 2024) y gráfico
Métricas de evaluación del modelo manual dentro del periodo de prueba (oct,nov y dic2024
## MAE Manual: 142.0026
## RMSE Manual: 151.7472
## RMSE Manual: 151.7472
MAE (Mean Absolute Error)
Indica el error promedio en unidades de la variable, es decir, en número de microempresas.
RMSE (Root Mean Squared Error)
Penaliza más los errores grandes debido a la elevación al cuadrado antes de calcular la raíz.
A continuación se calcula la Tabla de pronóstico modelo manual VS los datos reales u observado en oct,nov y dic2024
## Fecha Observado Pronosticado
## 1 2024-10-01 1700 1865.492
## 2 2024-11-01 1800 1867.969
## 3 2024-12-01 1675 1867.546
Ahora pronosticamos fuera del periodo de análisis: Enero 2025 Es decir, le sumamos al periodo de prueba (oct,nov,dic2024) una observación más (enero 2025). Es decir, se estan pronosticando 4 observaciones o meses:
## Fecha Pronostico
## 1 2025-01-01 1865.492
## 2 2025-02-01 1867.969
## 3 2025-03-01 1867.546
## 4 2025-04-01 1867.619
## [1] "Pronóstico para 2025-04-01 = 1867.61856940541"
Otra forma para calcular un valor futuro (fuera de muestra)-Modelo manual, es decir, en caso de que no se haga la dviisón inicial de conjunto de entrenamiento y prueba
Si no hay conjunto de prueba o test y solo quieres el siguiente punto u observación, el código a usar seria algo asi:
## [1] "Pronóstico para octubre 2024: 1865.49227932376"
## Series: train_ts
## ARIMA(1,0,0) with non-zero mean
##
## Coefficients:
## ar1 mean
## 0.9420 2410.4899
## s.e. 0.0289 335.3824
##
## sigma^2 = 61613: log likelihood = -894.47
## AIC=1794.95 AICc=1795.14 BIC=1803.53
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set -13.63768 246.288 176.982 -1.702962 7.617592 0.2483914 0.1040238
#Significancia de coeficientes
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 9.4200e-01 2.8883e-02 32.6143 < 2.2e-16 ***
## intercept 2.4105e+03 3.3538e+02 7.1873 6.609e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Series: train_ts
## ARIMA(4,1,2)
##
## Coefficients:
## ar1 ar2 ar3 ar4 ma1 ma2
## 0.0027 -0.9524 0.0371 -0.1225 0.0903 1.0000
## s.e. 0.0900 0.0893 0.0894 0.0900 0.0244 0.0592
##
## sigma^2 = 58833: log likelihood = -883.49
## AIC=1780.98 AICc=1781.91 BIC=1800.94
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -11.94163 235.882 162.8208 -0.9323587 7.06253 0.2285162
## ACF1
## Training set -0.00545367
##
## Ljung-Box test
##
## data: Residuals from ARIMA(4,1,2)
## Q* = 11.181, df = 18, p-value = 0.8865
##
## Model df: 6. Total lags used: 24
#Pronóstico modelo ARIMA automático (4,1,2)
## Fecha Observado Pronosticado
## 1 2024-10-01 1700 1910.766
## 2 2024-11-01 1800 1939.748
## 3 2024-12-01 1675 1967.049
#Ahora pronosticamos fuera del periodo de análisis
## Fecha Pronostico
## 1 2025-01-01 1910.766
## 2 2025-02-01 1939.748
## 3 2025-03-01 1967.049
## 4 2025-04-01 1992.767
## [1] "Pronóstico para enero 2025: 2025-04-01 = 1992.76669899308"
#Otra forma para calcular un valor futuro (fuera de muestra)
## [1] "Pronóstico para octubre 2024: January 2025 = 1910.7661510944"
## Series: train_ts
## ARIMA(1,0,0)(0,0,2)[12] with non-zero mean
##
## Coefficients:
## ar1 sma1 sma2 mean
## 0.9428 -0.2517 -0.1612 2355.2351
## s.e. 0.0289 0.0933 0.0925 206.0013
##
## sigma^2 = 57400: log likelihood = -889.59
## AIC=1789.18 AICc=1789.67 BIC=1803.48
A continuación, se crea el objeto darima para lueg poder graficar los valores reales y observados:
## Series: train_ts
## ARIMA(0,1,1)(1,0,0)[12]
##
## Coefficients:
## ma1 sar1
## 0.0980 -0.1892
## s.e. 0.0878 0.0893
##
## sigma^2 = 60481: log likelihood = -885.48
## AIC=1776.97 AICc=1777.16 BIC=1785.53
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -13.01851 243.0517 172.7513 -1.084614 7.44422 0.2424536
## ACF1
## Training set -0.002356681
##
## Ljung-Box test
##
## data: Residuals from ARIMA(0,1,1)(1,0,0)[12]
## Q* = 16.009, df = 22, p-value = 0.8155
##
## Model df: 2. Total lags used: 24
#Pronóstico con el modelo SARIMA
## Fecha Observado Pronosticado
## 1 2024-10-01 1700 1804.603
## 2 2024-11-01 1800 1852.451
## 3 2024-12-01 1675 1878.486
#Ahora pronosticamos fuera del periodo de análisis
## Fecha Pronostico
## 1 2025-01-01 1804.603
## 2 2025-02-01 1852.451
## 3 2025-03-01 1878.486
## 4 2025-04-01 1835.239
## [1] "Pronóstico para April 2025 = 1835.24"
#Otra forma para calcular un valor futuro (fuera de muestra)
## Series: train_ts
## ARIMA(1,0,0)(0,0,2)[12] with non-zero mean
##
## Coefficients:
## ar1 sma1 sma2 mean
## 0.9428 -0.2517 -0.1612 2355.2351
## s.e. 0.0289 0.0933 0.0925 206.0013
##
## sigma^2 = 57400: log likelihood = -889.59
## AIC=1789.18 AICc=1789.67 BIC=1803.48
## [1] "Pronóstico para January 2025 = 1804.6"