Un modelo ARIMA o modelo autorregresivo integrado de medias moviles utiliza variaciones y regresiones de datos con el fin de encontrar patrones para hacer predicciones futuras explicadas por los datos del pasado.
Un modelo ARIMA utiliza 3 parametros (p,d,q). El parametro p hace referencia al orden del modelo autorregresivo AR, d hace referencia al numero de diferenciaciones que necesita la serie para ser estacionaria y q hace referencia al orden del modelo de medias moviles MA.
Un modelo arima se puede representar con la siguiente ecuacion: \[ Y_t = c + \phi_1y_d{_{t-1}} + \phi_p y_d{_{t-p}}+...+\theta_1 e_{t-1} + \theta_q e_{t-q} + e_t\] siendo \(e_{t}\) los errores del modelo que han de ser ruido blanco.
Para estimar un modelo ARIMA hay que seguir los siguentes pasos:
1º Diferenciar la serie original, el numero de diferenciaciones sera el parametro d.
2º Estimar los parametros p y q mediante el AFC y el PACF.
3º Comprobar que los residuos del modelo siguen un proceso de ruido blanco.
4º Usar el modelo para hacer predicciones.
Serie original
datos<-elecequip
plot(datos)
Realizamos un suavizado exponencial de la serie para ayudarnos a predecir mejor.
tsdatos <- seasadj(stl(elecequip, s.window="periodic"))
plot(tsdatos)
Descomponemos la serie para ver la tendencia y la estacionalidad.
descompuesta<-decompose(tsdatos)
plot(descompuesta)
Comprobamos si la serie es estacionaria.
adf.test(tsdatos, alternative = "stationary")
##
## Augmented Dickey-Fuller Test
##
## data: tsdatos
## Dickey-Fuller = -2.2538, Lag order = 5, p-value = 0.4699
## alternative hypothesis: stationary
Como el p-valor es mayor que 0.05 la serie no es estacionaria, hay que diferenciarla.
ndiffs(tsdatos)
## [1] 1
Como muestra el comando ndiffs hace falta realizar 1 diferenciacion.
estac<-diff(tsdatos,differences=1)
adf.test(estac, alternative = "stationary")
##
## Augmented Dickey-Fuller Test
##
## data: estac
## Dickey-Fuller = -4.108, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
Ahora la serie ya es estacionaria y el valor de d en el modelo ARIMA es 1.
Para obtener los parametros p y q calculamos los diagramas ACF y PACF.
tsdisplay(diff(tsdatos),main="Serie con 1 diferenciacion y diagramas ACF y PACF")
Si no se ven claros los parametros p y q con los diagramas ACF y PACF, existe la funcion auto.arima, que nos sugiere el modelo ARIMA mas adecuado para la serie.
auto.arima(tsdatos, seasonal=FALSE)
## Series: tsdatos
## ARIMA(3,1,1)
##
## Coefficients:
## ar1 ar2 ar3 ma1
## 0.0519 0.1191 0.3730 -0.4542
## s.e. 0.1840 0.0888 0.0679 0.1993
##
## sigma^2 estimated as 9.737: log likelihood=-484.08
## AIC=978.17 AICc=978.49 BIC=994.4
En este caso el modelo sugerido es ARIMA(3,1,1).
modeloarima <- Arima(tsdatos, order=c(3,1,1))
summary(modeloarima)
## Series: tsdatos
## ARIMA(3,1,1)
##
## Coefficients:
## ar1 ar2 ar3 ma1
## 0.0519 0.1191 0.3730 -0.4542
## s.e. 0.1840 0.0888 0.0679 0.1993
##
## sigma^2 estimated as 9.737: log likelihood=-484.08
## AIC=978.17 AICc=978.49 BIC=994.4
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.001227744 3.079373 2.389267 -0.04290849 2.517748 0.2913919
## ACF1
## Training set 0.008928479
Vamos a comprobar si los residuos del modelo estimado siguen un proceso de ruido blanco.
Acf(residuals(modeloarima))
Box.test(residuals(modeloarima), lag=24, fitdf=4, type="Ljung")
##
## Box-Ljung test
##
## data: residuals(modeloarima)
## X-squared = 20.496, df = 20, p-value = 0.4273
Como todos se encuentran dentro de los limites y el p-valor es mayor que 0.05, los residuos se comportan como ruido blanco.
Prediccion para el modelo ARIMA(3,1,1).
plot(forecast(modeloarima))