Professional Documents
Culture Documents
Modelo ARIMA
Modelo ARIMA
Contents
1 Transformaciones para estabilización de varianza 2
1.1 Estabilización de la Varianza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Transformaciones de Box-Cox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Practica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2 Modelo ARIMA 16
2.1 Modelo Autorregresivo (AR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2 Modelos de Media Móvil (MA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 Modelos ARIMA(p,d,q) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4 Practicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1
Contents
Cuanto más avanzas en la escala, mayor es el efecto de la transformación. Pertimame ilustrar con algunos
datos.
Aquí tenemos la generación de electricidad neta mensual de EE.UU.
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(ggplot2)
library(fpp2)
## -- Attaching packages ---------------------------------------------- fpp2 2.4 --
## v fma 2.4 v expsmooth 2.3
##
2
Generación de electricidad mensual de EE.UU
400
300
200
3
Generación de electricidad mensual de EE.UU
20
18
16
14
12
4
Generación de electricidad mensual de EE.UU
7.5
7.0
6.5
6.0
5.5
5
Generación de electricidad mensual de EE.UU
6.0
5.7
5.4
5.1
6
Generación de electricidad mensual de EE.UU
−0.003
−0.004
−0.005
−0.006
−0.007
log(yt ) λ=0
wt =
(ytλ − 1)/λ λ 6= 0
• λ = 1 es esencialmente ninguna transformación, simplemente resta uno de todas las observaciones.
• λ= 1
2 es como una raíz cuadrada,
• λ= 1
3 es igual como una raíz cúbica,
• λ = 0 es equivalente a una transformación logarítmica y;
• λ = −1 es muy similar a una transformación inversa.
Podemos usar todos los valores λ entre estos valores para obtener otras transformaciones. Puede probar
algunos valores usted mismo hasta que tenga algo que parezca correcto. O puede usar la función
BoxCox.lambda() que devuelve una estimación de λ que debería equilibrar aproximadamente la variación
a lo largo de la serie. En este caso, se ha elegido un vaor entre -1 y 0, como era de esperar dados los gráficos
anteriores que vimos:
BoxCox.lambda(usmelec)
## [1] -0.5738331
7
Una vez que haya elegido λ, simplemente debe agregarlo a la función de modelado que esta utilizando, y R se
encargará del resto.
usmelec %>%
ets(lambda = -0.57) %>%
forecast(h = 60) %>%
autoplot()
Forecasts from ETS(A,A,A)
500
400
.
300
200
1.3 Practica
1.3.1 Transformaciones de BoxCox para series de tiempo.
Aquí, utilizaremos una transformación de BoxCox para estabilizar la varianza de la serie a10, que
contiene las ventas mensuales de medicamentos antidiabéticos en Australia desde 1991 hasta 2008.
En este ejercicio, necesitará experimentar para ver el efecto de λ argumento sobre la transformación. Note
que pequeños cambios en λ hacen poca diferencia en la serie resultante. Quiere encontrar un valor de λ eso
hace que las fluctuaciones estacionales sean aproximadamente del mismo tamaño en toda la serie.
8
Recuerde de la dicho previamente, el rango recomendado para los λ es −1 ≤ λ ≤ 1.
# Trace la serie a10 y observe la varianza creciente
# a medida que aumenta el nivel de la serie
autoplot(a10)
30
20
a10
10
9
3.5
3.0
2.5
.
2.0
1.5
1.0
1995 2000 2005
Time
a10 %>% BoxCox(lambda = 0.1) %>% autoplot()
3
.
1
1995 2000 2005
Time
a10 %>% BoxCox(lambda = 0.2) %>% autoplot()
10
5
3
.
1
1995 2000 2005
Time
a10 %>% BoxCox(lambda = 0.3) %>% autoplot()
6
4
.
1
1995 2000 2005
Time
# Comparar con Box.Cox.lambda()
BoxCox.lambda(a10)
11
## [1] 0.1313326
Parece que un λ = 0.13 funcionaría bien.
4.5
4.0
wmurders
3.5
3.0
2.5
12
0.6
0.3
diff(wmurders)
0.0
−0.3
0.3
0.2
0.1
ACF
0.0
−0.1
−0.2
5 10 15
Lag
13
Parece que los datos parecen ruido blanco después de la diferenciación.
1.25
1.00
h02
0.75
0.50
# Trazar difflogh02
autoplot(difflogh02)
14
0.4
0.2
difflogh02
0.0
0.4
0.2
ddifflogh02
0.0
−0.2
15
# Traze los ACF de difflogh02
ggAcf(ddifflogh02)
Series: ddifflogh02
0.2
0.0
ACF
−0.2
−0.4
−0.6
6 12 18 24
Lag
Los datos no parecen ruido blanco después de la transformación, pero podría desarrollar un modelo ARIMA
para ellos.
2 Modelo ARIMA
ARIMA son las siglas de Autoregresive Integrated Moving Average Models. Vamos a dividir eso en sus
partaes.
16
Los últimos q errores se utilizan como predictores en la ecuación anterior. Ahora, cuando juntamos estas dos
ecuaciones tenemos un modelo ARMA,
donde el último p son las observaciones y los últimos q errores se utilizan como predictores en la ecuación.
3000
Millones Kwh
2000
1000
17
## Series: usnetelec
## ARIMA(2,1,2) with drift
##
## Coefficients:
## ar1 ar2 ma1 ma2 drift
## -1.3032 -0.4332 1.5284 0.8340 66.1585
## s.e. 0.2122 0.2084 0.1417 0.1185 7.5595
##
## sigma^2 = 2262: log likelihood = -283.34
## AIC=578.67 AICc=580.46 BIC=590.61
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.04640184 44.89414 32.3328 -0.6177064 2.101204 0.4581279
## ACF1
## Training set 0.02249247
En este caso, ha seleccionado un modelo ARIMA(2,1,2) con deriva, entonces, los datos se han diferenciado
una vez, y luego se han usado 2 observaciones pasadas y 2 errores pasados en la ecuación.
La deriva aquí se refiere al coeficiente c. Se llama coeficiente de deriva cuando hay diferenciación. El resto de
la salida le informa sobre el valor de los parámetros y otra información del modelo. Observe también que se
proporciona el valor AIC, tal como estaba para los modelos ETS.
auto.arima() selecciona los valores de p y q minimizando el valor de AIC, tal como lo hizo la función ets en
secciones previas. Sin embargo, no puede comparar un valor AIC ARIMA con un valor AIC ETS, solo puede
comparar los valores AIC entre modelos de la misma clase. Tampoco puede comparar los valores de AIC entre
modelos con diferentes cantidades de diferenciación. Los pronósticos resultantes se ven bastante bien, ¿no?
fit %>% forecast() %>% autoplot()
18
Forecasts from ARIMA(2,1,2) with drift
5000
4000
3000
usnetelec
2000
1000
2.4 Practicas
2.4.1 Modelos ARIMA automáticos para series de tiempo no estacionales
En la sección prevía, aprendió que la función auto.arima() seleccionará un modelo de promedio movil
intergado autorregresivo (ARIMA) apropiado dada una serie de tiempo, tal como lo hace ets() para los
modelos ETS. La función summary() puede proporcionar informació adicoonal.
En este ejercicio, eligirá automaticamente un modelo ARIMA para la serie precargada austa, que contiene el
número anual de visitantes internacionales a Australia entre 1980 y 2015. Luego verificará los residuos
(recuerde que un valor p mayor que 0.05 indica que los datos se asemejan a un ruido blanco) y producirá
algunos pronósticos. A parte de la función de modelado, esto es idéntico a lo que hizo con el pronóstico de
ETS.
# Ajustar un modeo ARIMA automático a la serie austa
fit <- auto.arima(austa)
19
checkresiduals(fit)
Residuals from ARIMA(0,1,1) with drift
0.2
0.0
−0.2
−0.4
1980 1990 2000 2010
0.2 9
ACF
0.0 df$y 6
3
−0.2
0
1 2 3 4 5 6 7 8 9 10 11 12 −0.6 −0.3 0.0 0.3 0.6
Lag residuals
##
## Ljung-Box test
##
## data: Residuals from ARIMA(0,1,1) with drift
## Q* = 2.297, df = 6, p-value = 0.8905
##
## Model df: 1. Total lags used: 7
residualsok <- TRUE
# Resuma el modelo
summary(fit)
## Series: austa
## ARIMA(0,1,1) with drift
##
## Coefficients:
## ma1 drift
## 0.3006 0.1735
## s.e. 0.1647 0.0390
##
## sigma^2 = 0.03376: log likelihood = 10.62
## AIC=-15.24 AICc=-14.46 BIC=-10.57
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.0008313383 0.1759116 0.1520309 -1.069983 5.513269 0.7461559
20
## ACF1
## Training set -0.000571993
# Encuentre el valor de AIC y el numero de diferencias utilizadas
AICc <- -14.46
d <- 1
10.0
7.5
austa
5.0
2.5
21
Forecasts from ARIMA(2,1,2) with drift
5000
4000
3000
.
2000
1000
22
Forecasts from ARIMA(0,1,1)
7.5
5.0
.
2.5
23
Forecasts from ARIMA(2,1,3) with drift
7.5
5.0
.
2.5
24
Forecasts from ARIMA(0,0,1) with non−zero mean
4
.
25
Forecasts from ARIMA(0,2,1)
10
.
26
Forecasts from ETS(M,N,N)
1e+05
.
0e+00
−1e+05
27
Forecasts from ARIMA(0,1,1) with drift
10.0
7.5
x
5.0
2.5
28
Uso de tarjetas de débito minoristas en Islandia
25
20
Millones ISK
15
10
29
modelos ARIMA pueden ser difíciles de interpretar, y todos los coeficientes no tienen una explicación clara
en términos de los datos originales. Pero son modelos muy potentes que pueden manejar una amplia gamma
de series de tiempo.
Podemos pasar el objeto del modelo a la función de pronóstico para obtener pronósticos.
Aquí, estoy pronósticando 3 años por delante para que pueda ver claramente la tendencia creciente y
variación creciente debido a la transformación BoxCox.
fit %>%
forecast(h = 36) %>%
autoplot() + xlab('Año')
Forecasts from ARIMA(0,1,4)(0,1,1)[12]
40
30
debitcards
20
10
3.1 Practicas:
Como ha aprendido, la función auto.arima() también funciona con datos estacionales. Tenga en cuenta que
la configuración λ = 0 en la auto.arima significa que el modelo se ajustará a los datos transformados y que
los pronósticos se transformarán a la escala original.
Después de aplicar summary() a este tipo de modelo ajustado, es posible que vea algo como el siguiente
30
resultado que corresponde con (p,d,q)(P,D,Q)[m].
En este ejercicio, utilizará estas funciones para modelar y pronósticar los datos h02, que contiene las ventas
mensuales de medicamentos corticosteroides en Australia.
# Verifique que los datos h02 tengan una varianza estable
h02 %>% log() %>% autoplot()
0.0
−0.4
.
−0.8
# Resumir modelo
summary(fit)
## Series: h02
## ARIMA(2,1,1)(0,1,2)[12]
## Box Cox transformation: lambda= 0
##
## Coefficients:
## ar1 ar2 ma1 sma1 sma2
## -1.1358 -0.5753 0.3683 -0.5318 -0.1817
## s.e. 0.1608 0.0965 0.1884 0.0838 0.0881
##
## sigma^2 = 0.004278: log likelihood = 248.25
## AIC=-484.51 AICc=-484.05 BIC=-465
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.003931805 0.0501571 0.03629816 -0.5323365 4.611253 0.5987988
## ACF1
## Training set -0.003740269
31
# Registre la cantidad de diferenciacion lag-1 y diferenciación estacional
d <- 1
D <- 1
1.5
h02
1.0
0.5
32
# Calcule pronosticos a 2 años a partir de un mejor modelo
fit2 %>% forecast(h = 8) %>% autoplot()
Forecasts from ARIMA(0,1,3)(0,1,1)[4]
100
euretail
96
92
33
# Verifique que ambos modelos tengan residuos de ruido blanco
checkresiduals(fit1)
Residuals from ARIMA(1,0,1)(2,1,1)[4] with drift
0.3
0.2
0.1
0.0
−0.1
−0.2
−0.3
1990 1995 2000 2005
20
0.2
15
0.1
ACF
df$y
0.0 10
−0.1 5
−0.2
0
4 8 12 16 −0.2 0.0 0.2
Lag residuals
##
## Ljung-Box test
##
## data: Residuals from ARIMA(1,0,1)(2,1,1)[4] with drift
## Q* = 0.78311, df = 3, p-value = 0.8535
##
## Model df: 5. Total lags used: 8
checkresiduals(fit2)
34
Residuals from ETS(M,N,M)
0.15
0.10
0.05
0.00
−0.05
−0.10
−0.15
1990 1995 2000 2005
20
0.2
0.1 15
ACF
df$y
0.0 10
−0.1 5
−0.2
0
4 8 12 16 −0.1 0.0 0.1 0.2
Lag residuals
##
## Ljung-Box test
##
## data: Residuals from ETS(M,N,M)
## Q* = 6.3457, df = 3, p-value = 0.09595
##
## Model df: 6. Total lags used: 9
# Producir pronosticos para cada modelo
fc1 <- forecast(fit1, h = 25)
fc2 <- forecast(fit2, h = 25)
35
## Test set 0.53438371 0.680556
mejor_modelo <- fit2
Parece que el modelo ETS lo hizo mejor aquí.
36