Los modelos ARIMA fueron popularizados en los años 70 por George Box y Gwilym Jenkins, se la conoce también como la metodología de Box y Jenkins aplicada a análisis y predicción de series univariantes.
ARIMA significa modelo autorregresivo integrado de media móvil. Cada una de las tres partes del acrónimo se le denomina componente y modela un comportamiento distinto de la serie.
Los modelos ARIMA generalmente se construyen a partir de los modelos ARMA, pero aquí se considera que la serie tratada, para que sea estacionaria en media tendrá que diferenciarse una serie de veces. Lo que representa una ventaja respecto a los modelos ARMA, ya que incorpora la diferenciación dentro del modelo.
Una de las ventajas que brinda esta metodología es que proporcionan predicciones optimas tanto en plazo inmediato (1 a 3 meses) como en el corto plazo, además esta metodología no necesita contar con varias series para realizar su estimación y pronostico; pues se requiere tan solo la serie a ser estudiada y sus rezagos.
Esquema de un modelo ARIMA
library(readxl)
library(tseries)
library(stargazer)
library(lmtest)
library(car)
library(strucchange)
library(TSstudio)
library(forecast)
# Base de datos
data_arg <- read_excel("D:/Libros/Seminarios/Diplomado Tecnicas Econometricas R/3 Modelo ARIMA/data_arg.xlsx", sheet = "data2")
Se declara la serie de tiempo y se descompone para ver su tendencia y estacionalidad.
# Serie de tiempo
tcly = ts(data_arg[ , 1],
start = c(2005, 1),
end = c(2022, 4),
freq = 4)
head(tcly)
## Qtr1 Qtr2 Qtr3 Qtr4
## 2005 8.053652 11.281673 7.079227 7.589323
## 2006 7.316862 6.424693
# Descomposicion de la serie de tiempo
ts_decompose(tcly)
Para confirmar la estacionaridad de las series se usan las pruebas de Dickey-Fuller (ADF) y Phillips-Perron (PP) para raíz unitaria, donde:
# Prueba de Dickey-Fuller (ADF)
adf.test(tcly)
##
## Augmented Dickey-Fuller Test
##
## data: tcly
## Dickey-Fuller = -2.5112, Lag order = 4, p-value = 0.3672
## alternative hypothesis: stationary
# Prueba de Phillips-Perron (PP)
pp.test(tcly)
##
## Phillips-Perron Unit Root Test
##
## data: tcly
## Dickey-Fuller Z(alpha) = -24.146, Truncation lag parameter = 3, p-value
## = 0.01969
## alternative hypothesis: stationary
Se aplica primera diferencia
# Primera diferencia
dtcly <- diff(tcly)
plot(dtcly)
# Prueba de Dickey-Fuller (ADF)
adf.test(dtcly)
##
## Augmented Dickey-Fuller Test
##
## data: dtcly
## Dickey-Fuller = -4.6904, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
# Prueba de Phillips-Perron (PP)
pp.test(dtcly)
##
## Phillips-Perron Unit Root Test
##
## data: dtcly
## Dickey-Fuller Z(alpha) = -57.353, Truncation lag parameter = 3, p-value
## = 0.01
## alternative hypothesis: stationary
La serie es estacionaria.
estacionaria <- dtcly
muestra <- window(estacionaria,
start = c(2005, 1),
end = c(2022, 4))
# Correlograma
ts_cor(muestra, lag = 8)
Los modelos a realizar son:
| Modelo | p | d | q |
|---|---|---|---|
| 1 | 1 | 1 | 0 |
| 2 | 0 | 1 | 1 |
| 3 | 2 | 1 | 0 |
| 4 | 2 | 1 | 1 |
| 5 | 1 | 1 | 2 |
| 6 | 2 | 1 | 2 |
# ARIMA
arima1<- arima(data_arg,
order = c(2, 1, 1),
method = "ML")
# Coeficientes
stargazer(arima1, type = "text")
##
## =============================================
## Dependent variable:
## ---------------------------
## data_arg
## ---------------------------------------------
## ar1 1.005***
## (0.115)
##
## ar2 -0.332***
## (0.113)
##
## ma1 -0.956***
## (0.053)
##
## ---------------------------------------------
## Observations 71
## Log Likelihood -198.605
## sigma2 15.442
## Akaike Inf. Crit. 405.209
## =============================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Es necesario que los residuos se comporten como ruido blanco, para ellos usamos la prueba de Dickey-Fuller aumentada, donde:
# Prueba ADF para
residuals = resid(arima1)
adf.test(residuals)
##
## Augmented Dickey-Fuller Test
##
## data: residuals
## Dickey-Fuller = -4.3595, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
Para determinar que un grupo cualquiera de autocorrelaciones sea distinta de cero, es decir, para comprobar si una serie de observaciones en un período de tiempo específico son aleatorias e independientes, se usa la prueba de Ljung-Box, donde:
# Prueba Ljung-Box
checkresiduals(arima1)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(2,1,1)
## Q* = 21.17, df = 7, p-value = 0.003526
##
## Model df: 3. Total lags used: 10
Aquel que tenga el menor criterio de Akaike (AIC) con todos sus parámetros significativos, y cuyos residuos no estén correlacionados será el mejor modelo. En este caso el mejor modelo es el ARIMA (2, 0, 3)
\[\widehat{tcly}_t = \widehat{1.005}~tcly_{t-1} - \widehat{0.332}~tcly_{t-2} - \widehat{0.956}~tcly_{\epsilon_{t-2}}\]
Se puede observar que el crecimiento económico del primer rezago impacta positivamente en el crecimiento actual del PIB, pero el segundo rezago impacta negativamente. Las media móvil tiene un impacto negativo.
prediccion1 <- forecast(arima1, h = 5)
summary(prediccion1)
##
## Forecast method: ARIMA(2,1,1)
##
## Model Information:
##
## Call:
## arima(x = data_arg, order = c(2, 1, 1), method = "ML")
##
## Coefficients:
## ar1 ar2 ma1
## 1.0052 -0.3316 -0.9563
## s.e. 0.1155 0.1131 0.0528
##
## sigma^2 estimated as 15.44: log likelihood = -198.6, aic = 405.21
##
## Error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.5462715 3.902188 2.555593 -31.3401 113.631 0.8435854
## ACF1
## Training set -0.09120176
##
## Forecasts:
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 73 0.14014122 -4.896094 5.176376 -7.562116 7.842398
## 74 0.03684737 -7.262003 7.335698 -11.125781 11.199476
## 75 0.39626842 -7.860738 8.653275 -12.231733 13.024270
## 76 0.79180175 -7.792865 9.376468 -12.337313 13.920916
## 77 1.07018400 -7.612523 9.752891 -12.208871 14.349239