Este tutorial apresenta uma abordagem prática para análise de séries temporais, com foco na estimativa de modelos ARIMA utilizando a metodologia Box-Jenkins. Inicialmente, ele define séries temporais e descreve o modelo ARIMA, que combina componentes autorregressivos, diferenciais e de médias móveis. A metodologia Box-Jenkins é explicada em quatro etapas: identificação, estimação, diagnóstico e previsão. O tutorial inclui exemplo prático usando dados reais.
1 Conceitos
1.1 Séries Temporais
Uma série temporal é uma sequência de dados observados em intervalos de tempo sucessivos, como, por exemplo, valores mensais de um indicador econômico.
1.2 Modelo ARIMA
O ARIMA (AutoRegressive Integrated Moving Average) é um modelo preditivo que combina três componentes:
- AR (AutoRegressivo): relaciona a série atual com seus próprios valores passados.
- I (Integrado): trata da diferenciação para tornar a série estacionária.
- MA (Média Móvel): utiliza os resíduos dos modelos de médias móveis para ajustar a previsão.
1.3 Metodologia Box-Jenkins
Os passos principais da metodologia Box-Jenkins são: 1. Identificação: Tornar a série estacionária (diferenciação) e identificar os parâmetros AR e MA.
2. Estimação: Ajustar o modelo.
3. Diagnóstico: Verificar resíduos.
4. Previsão: Fazer previsões com o modelo ajustado.
A metodologia Box-Jenkins é um processo recursivo que se baseia na iteração entre três etapas principais: identificação, estimação e diagnóstico. Após cada ciclo de ajuste do modelo, os resíduos são analisados para verificar a adequação do modelo. Se problemas forem detectados, como autocorrelações nos resíduos ou inadequação na captura da estrutura da série, o modelo é reavaliado e ajustado novamente, retornando à fase de identificação. Esse ciclo continua até que o modelo apresente um bom ajuste, capturando as características essenciais da série temporal, como estacionariedade e ausência de correlação nos resíduos, garantindo assim previsões confiáveis. Essa natureza recursiva permite melhorias contínuas no modelo ao longo das iterações.
2 Exemplo Prático: Estimativa de Modelo ARIMA
2.1 Preparação do dados
Na preparação de dados para análise de séries temporais, a leitura dos dados envolve carregar a série temporal em um formato apropriado, como ts no R, a partir de fontes como arquivos CSV ou Excel. A visualização gráfica inicial permite identificar padrões visuais, como tendência ou sazonalidade, geralmente usando gráficos simples (plot) que mostram a evolução dos dados ao longo do tempo.
Para lidar com a remoção da sazonalidade, que é importante em muitas séries temporais, utilizamos técnicas como a decomposição sazonal ou ajustamos sazonalmente com pacotes como seasonal, que remove flutuações periódicas. Isso ajuda a evidenciar a tendência e a parte não sazonal dos dados, facilitando a modelagem subsequente.
# Carregando os pacotes necessárioslibrary(forecast)library(tseries)library(seasonal)library(readxl)# Carregar a série AirPassengersdata("AirPassengers")plot(AirPassengers, main="Série AirPassengers", ylab="Passageiros", xlab="Ano")
# usando a série sazonalmente ajustadapassageiros_sa <-final(seas(AirPassengers))# Visualizando a série temporalplot(passageiros_sa, main="Passageiros Aéreos Sazonalmente Ajustada", ylab="Produção", xlab="Ano")
# Leitura dos dados da Produção Industrialdados <-read_excel("tabela8888.xlsx")# Preparando a série temporalpimpf <-ts(dados$pimpf, start=c(2002,1), frequency=12)# Visualizando a série temporalplot(pimpf, main="Produção Industrial Brasileira", ylab="Produção", xlab="Ano")
# usando a série sazonalmente ajustadapimpf_sa <-final(seas(pimpf))# Visualizando a série temporalplot(pimpf_sa, main="Produção Industrial Brasileira Sazonalmente Ajustada", ylab="Produção", xlab="Ano")
2.2 Identificação
Na etapa de identificação da metodologia Box-Jenkins, o objetivo é determinar se a série temporal é estacionária e identificar os parâmetros iniciais do modelo ARIMA (AutoRegressivo, Integrado e de Médias Móveis). O primeiro passo é avaliar a estacionariedade, que pode ser feita visualmente ou com testes formais, como o teste de Dickey-Fuller Aumentado. Se a série não for estacionária, aplicam-se transformações como a diferenciação para remover tendência ou sazonalidade.
Após tornar a série estacionária, analisam-se os correlogramas (ACF e PACF) para entender as dependências temporais. O gráfico de ACF ajuda a identificar o número de termos MA (média móvel) e o PACF auxilia na escolha dos parâmetros AR (auto regressivos). Esses gráficos fornecem uma base para determinar os valores dos parâmetros ( p ), ( d ) e ( q ) do modelo ARIMA, que serão refinados nas próximas etapas.
# Verificando estacionariedade -Teste de Dickey-Fuller Aumentadoadf.test(passageiros_sa)
Augmented Dickey-Fuller Test
data: passageiros_sa
Dickey-Fuller = -2.0735, Lag order = 5, p-value = 0.5458
alternative hypothesis: stationary
adf.test(pimpf_sa)
Augmented Dickey-Fuller Test
data: pimpf_sa
Dickey-Fuller = -2.2612, Lag order = 6, p-value = 0.4659
alternative hypothesis: stationary
# Fazendo o teste na primeira diferençaadf.test(diff(passageiros_sa))
Augmented Dickey-Fuller Test
data: diff(passageiros_sa)
Dickey-Fuller = -5.2999, Lag order = 5, p-value = 0.01
alternative hypothesis: stationary
adf.test(diff(pimpf_sa))
Augmented Dickey-Fuller Test
data: diff(pimpf_sa)
Dickey-Fuller = -6.7233, Lag order = 6, p-value = 0.01
alternative hypothesis: stationary
# Função de autocorrelação e autocorrelação parcialacf(diff(passageiros_sa), main="FAC")
pacf(diff(passageiros_sa), main="FACP")
acf(diff(pimpf_sa), main="FAC")
pacf(diff(pimpf_sa), main="FACP")
2.3 Estimação
A etapa de estimação na metodologia Box-Jenkins envolve ajustar os parâmetros do modelo ARIMA selecionado na fase de identificação. A função auto.arima() no R automatiza essa etapa, identificando os melhores valores para os parâmetros (p) (auto regressivo), (d) (diferenciação), e (q) (média móvel) do modelo ARIMA, otimizando critérios como o AIC (Critério de Informação de Akaike).
A auto.arima() testa diferentes combinações de parâmetros e seleciona o modelo que melhor se ajusta à série temporal, considerando também a presença de sazonalidade (caso o parâmetro seasonal = TRUE). A função realiza automaticamente a diferenciação da série, ajusta modelos AR e MA, e retorna o modelo com o menor AIC, indicando o equilíbrio entre qualidade do ajuste e complexidade do modelo. Este processo economiza tempo e evita erros manuais na seleção dos parâmetros.
O comando auto.arima() ajusta automaticamente o modelo ARIMA mais adequado com base na série temporal fornecida, e o summary() exibe os detalhes do modelo escolhido.
# Usando auto.arima para identificar os melhores parâmetrosmodelo_arima_pass <-auto.arima(passageiros_sa,seasonal =FALSE)summary(modelo_arima_pass)
Series: passageiros_sa
ARIMA(0,1,1) with drift
Coefficients:
ma1 drift
-0.1861 2.5591
s.e. 0.0918 0.3690
sigma^2 = 29.7: log likelihood = -444.39
AIC=894.78 AICc=894.95 BIC=903.67
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set -0.0005787515 5.392888 4.057481 -0.1725203 1.622041 0.1281636
ACF1
Training set 0.01246298
Series: pimpf_sa
ARIMA(0,1,0)
sigma^2 = 4.407: log likelihood = -581.17
AIC=1164.34 AICc=1164.35 BIC=1167.93
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set 0.04620561 2.095283 0.8978374 0.02222935 0.8924903 0.192969
ACF1
Training set 0.03086195
2.4 Diagnóstico
A etapa de diagnóstico no processo Box-Jenkins verifica a adequação do modelo ajustado, garantindo que os resíduos (erros) sejam aleatórios e sem padrões, o que é crucial para a confiabilidade das previsões. No R, a função checkresiduals(), do pacote forecast, facilita essa análise, realizando uma série de testes e visualizações.
Ao usar checkresiduals(), o objetivo é verificar se os resíduos do modelo seguem um comportamento de “ruído branco”, ou seja, sem autocorrelação significativa e distribuídos de forma aproximadamente normal. A função fornece:
Gráfico dos resíduos: Mostra os resíduos ao longo do tempo, ajudando a visualizar padrões residuais.
ACF dos resíduos: Exibe o correlograma dos resíduos, que deve mostrar que eles não são autocorrelacionados (os pontos devem estar dentro das bandas de confiança).
Teste de Ljung-Box: Avalia a hipótese nula de que não há autocorrelação nos resíduos. Um p-valor alto (geralmente > 0.05) sugere que os resíduos são independentes.
Histograma com curva de densidade: Indica se os resíduos seguem uma distribuição normal.
Se os resíduos não forem independentes ou mostrarem autocorrelações significativas, isso sugere que o modelo precisa ser revisado e ajustado.
O comando checkresiduals() executa o diagnóstico sobre os resíduos do modelo ajustado fornecendo gráficos e testes para ajudar a avaliar a qualidade do ajuste.
# Diagnóstico de resíduoscheckresiduals(modelo_arima_pass)
Ljung-Box test
data: Residuals from ARIMA(0,1,1) with drift
Q* = 37.642, df = 23, p-value = 0.02782
Model df: 1. Total lags used: 24
checkresiduals(modelo_arima_pim)
Ljung-Box test
data: Residuals from ARIMA(0,1,0)
Q* = 42.584, df = 24, p-value = 0.01109
Model df: 0. Total lags used: 24
2.5 Retornando ao início
A verificação de outliers é uma etapa crucial na análise de séries temporais, pois outliers podem distorcer significativamente os resultados de modelagem e previsão. Outliers são valores anômalos que se desviam drasticamente do padrão geral da série, podendo ser causados por eventos únicos, erros de medição ou variações inesperadas.
Se os outliers não forem identificados e tratados adequadamente, eles podem afetar a estimativa dos parâmetros do modelo, levar à superestimação ou subestimação nas previsões, e dificultar a análise de componentes como tendência e sazonalidade. Além disso, outliers podem aumentar a variabilidade nos resíduos, tornando mais difícil validar o modelo.
Por isso, é essencial detectar e lidar com esses pontos fora da curva. Métodos como a função tsoutliers() no R, ou pacotes como anomalize, podem identificar outliers e propor soluções, como substituição por valores interpolados ou ajuste específico. Após a correção, a série torna-se mais confiável para modelagem e previsão, resultando em estimativas mais robustas e precisas.
# Verificando estacionariedade -Teste de Dickey-Fuller Aumentadoadf.test(pimpf_sa_clean)
Augmented Dickey-Fuller Test
data: pimpf_sa_clean
Dickey-Fuller = -2.3566, Lag order = 6, p-value = 0.4258
alternative hypothesis: stationary
# Fazendo o teste na primeira diferençaadf.test(diff(pimpf_sa_clean))
Augmented Dickey-Fuller Test
data: diff(pimpf_sa_clean)
Dickey-Fuller = -3.9245, Lag order = 6, p-value = 0.01324
alternative hypothesis: stationary
# Fazendo o teste na segunda diferençaadf.test(diff(diff(pimpf_sa_clean)))
Augmented Dickey-Fuller Test
data: diff(diff(pimpf_sa_clean))
Dickey-Fuller = -8.6923, Lag order = 6, p-value = 0.01
alternative hypothesis: stationary
# Função de autocorrelação e autocorrelação parcialacf(diff(pimpf_sa_clean), main="FAC")
pacf(diff(pimpf_sa_clean), main="FACP")
2.5.2 Estimação
# Usando auto.arima para identificar os melhores parâmetrosmodelo_arima_pim <-auto.arima(pimpf_sa_clean,seasonal =FALSE)summary(modelo_arima_pim)
Series: pimpf_sa_clean
ARIMA(2,2,2)
Coefficients:
ar1 ar2 ma1 ma2
-0.0095 0.4604 -0.9109 -0.0698
s.e. 0.1685 0.0586 0.1976 0.1877
sigma^2 = 0.4797: log likelihood = -281.08
AIC=572.16 AICc=572.39 BIC=590.12
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set -0.02543919 0.6848883 0.5162394 -0.02013386 0.4830226 0.1349548
ACF1
Training set -0.008365072
2.5.3 Diagnóstico
# Diagnóstico de resíduoscheckresiduals(modelo_arima_pim)
Ljung-Box test
data: Residuals from ARIMA(2,2,2)
Q* = 41.624, df = 20, p-value = 0.003095
Model df: 4. Total lags used: 24
2.6 Previsão
A previsão é a etapa final da metodologia Box-Jenkins, onde o modelo ajustado (como ARIMA ou SARIMA) é utilizado para prever os valores futuros da série temporal. O objetivo da previsão é estimar a evolução da série com base nas tendências, padrões sazonais e relações autorregressivas identificadas no modelo.
Uma vez que o modelo foi ajustado e diagnosticado como adequado (resíduos comportando-se como ruído branco), a função forecast() no R pode ser usada para gerar previsões para períodos futuros. Essa função retorna tanto os valores previstos quanto os intervalos de confiança, que indicam a incerteza associada às previsões.
A precisão da previsão é avaliada com métricas como RMSE (Root Mean Squared Error), MAE (Mean Absolute Error) e MAPE (Mean Absolute Percentage Error), que indicam o quão próximo o modelo está dos valores observados. A verificação contínua dessas previsões ajuda a garantir a robustez e utilidade do modelo ajustado para tomadas de decisão baseadas em dados.
# Previsão para os próximos 12 mesesprevisao_arima_pim <-forecast(modelo_arima_pim, h=12)plot(previsao_arima_pim)
# Comparação dos valores previstos e reaisaccuracy(previsao_arima_pim)
ME RMSE MAE MPE MAPE MASE
Training set -0.02543919 0.6848883 0.5162394 -0.02013386 0.4830226 0.1349548
ACF1
Training set -0.008365072
2.7 Considerações sobre previsão com modelos ARIMA
Em termos de previsão, os modelos ARIMA também apresentam algumas limitações importantes que afetam sua eficácia em certos contextos:
Desempenho em Longo Prazo: ARIMA tende a funcionar bem em previsões de curto prazo, mas seu desempenho pode se deteriorar significativamente em previsões de longo prazo. Isso ocorre porque ele depende muito dos padrões observados nos dados recentes, e não consegue prever mudanças estruturais ou eventos futuros inesperados.
Previsões Constantes a Longo Prazo: Como o ARIMA é um modelo linear e estacionário, quando a série temporal é diferenciada e estabilizada, ele tende a prever valores futuros que convergem para uma média ou tendência linear, sem levar em conta mudanças sazonais ou tendências complexas de longo prazo.
Sensibilidade a Mudanças nas Tendências: O ARIMA pode ter dificuldade em se ajustar rapidamente a mudanças repentinas nas tendências da série temporal, como mudanças econômicas abruptas, crises ou inovações tecnológicas que alteram a dinâmica subjacente dos dados.
Falta de Integração com Variáveis Externas: O ARIMA clássico não incorpora variáveis exógenas que possam influenciar a série temporal. Para séries temporais que dependem de fatores externos (como taxas de câmbio, inflação, clima, etc.), o ARIMA não pode modelar diretamente essas influências, a menos que se use extensões como o ARIMAX (ARIMA com variáveis exógenas).
Suposição de Estabilidade Estrutural: ARIMA assume que a estrutura da série temporal permanecerá estável no futuro, ou seja, que os padrões observados no passado (de autocorrelação, tendência, e sazonalidade) continuarão a existir. No entanto, eventos disruptivos ou mudanças estruturais significativas podem invalidar essa suposição e levar a previsões imprecisas.
Impacto de Outliers nas Previsões: Como o ARIMA é sensível a outliers, eles podem distorcer as previsões se não forem adequadamente identificados e tratados. Um ou mais outliers podem levar a previsões errôneas, especialmente em períodos mais longos.
Não Capta Comportamentos Cíclicos Complexos: Embora o ARIMA possa capturar algumas repetições sazonais simples (no caso de SARIMA), ele não lida bem com comportamentos cíclicos mais complexos ou variáveis, como padrões com mudanças na amplitude ou frequência ao longo do tempo.
Essas limitações fazem com que o ARIMA, apesar de ser uma ferramenta poderosa, seja mais apropriado para previsões de curto prazo e séries temporais com padrões relativamente estáveis. Em situações onde há influências externas significativas ou mudanças estruturais frequentes, outros modelos, como redes neurais, modelos híbridos ou com variáveis exógenas, podem ser mais eficazes.