Previsão com modelos ARIMA
em R com o pacote TSA
ARIMA
ARIMA -> Média móvel integrada autorregressiva
O benefício de usar modelos ARIMA sobre regressão linear, suavização exponencial, holt-winters etc. é que os modelos ARIMA podem reduzir uma série não estacionária a uma série estacionária usando uma sequência de etapas de diferenciação .
Para fazer inferências estatísticas ou previsões de processos aleatórios com base em registros observados, é muito importante que a suposição de estacionaridade seja atendida.
O que é uma série estacionária ?
A ideia básica da estacionariedade é que a probabilidade de comportamentos do processo não muda com o tempo, e espera-se que o processo esteja em equilíbrio estatístico .
Um processo {Yt} é considerado estritamente estacionário se a distribuição conjunta de Yt1,Yt2,… Ytn é a mesma que a distribuição conjunta de Yt1 — k Yt2 — k,…, Ytn — k para todas as escolhas de pontos de tempo t1, t2,…, tn e todas as opções de intervalo de tempo k.
Algumas definições
- {Yt} é um processo de séries temporais de observações ao longo do tempo, t =1, t =2, t…
- Uma distribuição conjunta de Yt1,Yt2,… refere-se aos deslocamentos de tempo nos processos de séries temporais que se relacionarão com períodos de tempo de t(1-k), t(2-k), …
- intervalo de tempo k refere-se ao intervalo de tempo e é conhecido como intervalo de tempo.
- stationary — Qualquer série temporal sem uma média constante ao longo do tempo é não estacionária
Diferenciando?
Os valores da série temporal original são subtraídos dos valores da série temporal deslocados por um determinado número de períodos de tempo. Essa transformação remove a tendência e a sazonalidade dos dados, deixando apenas o componente estacionário aleatório.
Vejamos um exemplo:
library(tidyverse)
library(broom)
library(forecast)
library(scales)
data <- read.delim("C:/Data/oilspills.txt")
data %>% head()
data.ts <- ts(data$TotalSpills,freq=12,start=c(1970,1))
plot(data.ts, type='o',cex=0.5, main = "Time series plot", col = "steelblue")
Podemos verificar gráficos de autocorrelação e autocorrelação parcial
par(mfrow = c(1,2))
acf(data.ts,main = "Autocorrealtion plot")
pacf(data.ts,main = "")
title(main = "Partial autocorrelation plot")
As barras verticais no gráfico ACF mostram autocorrelação significativa porque estão acima da linha tracejada azul.
Aplicarei a diferenciação com a função diff()
diff=diff(data.ts)
plot(diff, ylab='Difference of internet users', type='b',cex=0.5, col = "darkcyan")
title(main = "Differenced time-series")
Precisamos encontrar a ordem do nosso modelo ARIMA?
O objetivo da seleção do modelo é encontrar o modelo ARIMA que melhor se ajusta aos dados da série temporal.
p,d,q -> ARIMA (p,d,q) -> ARIMA (AR,d,MA)
Existem alguns métodos diferentes para selecionar os valores pdq para um modelo ARIMA:
- Inspeção dos gráficos ACF e PACF: Os gráficos ACF e PACF podem ser usados para identificar a ordem dos componentes autorregressivos (AR) e de média móvel (MA) no modelo. O atraso no qual o gráfico ACF ou PACF “corta” pode sugerir a ordem dos respectivos componentes.
- Seleção automatizada de modelos:
auto.arima(). Esta função usa uma abordagem para estimar o melhor modelo com base no valor AIC. - Ferramentas de diagnóstico: gráfico EACF
- O operador de retrocesso (1 — phi * B) * (1 — B)² = (1 + teta * B)
Existem vários métodos que podem obter esses valores, mas é importante observar que a seleção do modelo não é um processo único. A adequação do modelo selecionado deve ser avaliada por meio de testes de diagnóstico e visualizações.
Podemos usar um gráfico eacf (função de correlação automática estendida), que é uma ferramenta gráfica usada para ajudar a determinar a ordem de um modelo ARIMA.
eacf(diff)
Parece que este modelo pode ser um modelo AR = 1 e MA = 0.
O gráfico EACF é apenas uma ferramenta para determinar a ordem apropriada de um modelo ARIMA, e a inspeção visual, bem como testes estatísticos, também devem ser empregados para encontrar a ordem do modelo.
Vamos criar o primeiro modelo:
arima1 <- arima(data.ts, order=c(1,0,0))
arima1
- parcela residual
- Shapiro Wilks
- Gráfico de QQ normal
parcela residual
plot(arima1$res,xlab='Time',ylab='Residuals',main='')
abline(h=0,col='red')
shapiro.test(arima1$res)
Neste caso os resíduos do modelo ARIMA não são normalmente distribuídos.
Gráfico de QQ normal
qqnorm(arima1$res)
qqline(arima1$res)
Vou tentar outro modelo:
Posso executar auto.arima , isso pode ajudar!
auto.arima(data.ts)
arima2 <-arima(x = diff, order = c(1, 1, 0))
shapiro.test(arima2$res)
qqnorm(arima2$res)
qqline(arima2$res)
resíduos
plot(arima2$res,xlab='Time',ylab='Residuals',main='Arima2 model')
abline(h=0,col='red')
Vamos prever com o modelo arima2:
pred <- predict(arima2,n.ahead=5)
pred
Conclusão
Uma grande parte da modelagem arima nos preocupa em encontrar a transformação correta que os dados precisam. Neste exemplo, tivemos que diferenciar os dados porque o gráfico ACF mostrou sinais claros do requisito. Há casos em que os dados podem precisar de uma transformação de log, mas o conceito importante a ser lembrado é que precisamos fazer alguns testes estatísticos. Precisamos olhar para as parcelas e determinar o que parece melhor.
O gráfico EACF não é de forma alguma um gráfico fácil de ler, auto.arima parece muito mais simples. Observar os gráficos de resíduos também é muito importante e, no caso da modelagem arima, ter uma série temporal estacionária em que leis de probabilidade semelhantes regem o processo ao longo do tempo é um princípio fundamental. Depois de criarmos a estacionariedade por diferenciação, registro ou ambos, podemos ajustar o modelo apropriado e criar algumas previsões!
Espero que você tenha gostado do artigo e tenha achado útil.
Siga-me para mais artigos sobre R, Julia, Python e estatística aplicada!





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)