Séries temporais e previsão em R
O R tem amplos recursos para analisar dados de séries temporais. Esta seção descreve a criação de uma série temporal, a decomposição sazonal, a modelagem com modelos exponenciais e ARIMA e a previsão com o pacote de previsão.
Criando uma série temporal
A função ts() converterá um vetor numérico em um objeto de série temporal do R. O formato é ts(vector, start=, end=, frequency=) em que start e end são os horários da primeira e da última observação e frequency é o número de observações por unidade de tempo (1=anual, 4=quartenal, 12=mensal etc.).
# save a numeric vector containing 72 monthly observations
# from Jan 2009 to Dec 2014 as a time series object
myts <- ts(myvector, start=c(2009, 1), end=c(2014, 12), frequency=12)
# subset the time series (June 2014 to December 2014)
myts2 <- window(myts, start=c(2014, 6), end=c(2014, 12))
# plot series
plot(myts)
Decomposição sazonal
Uma série temporal com tendência aditiva, componentes sazonais e irregulares pode ser decomposta usando a função stl(). Observe que uma série com efeitos multiplicativos pode, muitas vezes, ser transformada em uma série com efeitos aditivos por meio de uma transformação de log (ou seja, newts <- log(myts)).
# Seasonal decomposition
fit <- stl(myts, s.window="period")
plot(fit)
# additional plots
monthplot(myts)
library(forecast)
seasonplot(myts)
Modelos exponenciais
Tanto a função HoltWinters() na instalação básica quanto a função ets() no pacote de previsão podem ser usadas para ajustar modelos exponenciais.
# simple exponential - models level
fit <- HoltWinters(myts, beta=FALSE, gamma=FALSE)
# double exponential - models level and trend
fit <- HoltWinters(myts, gamma=FALSE)
# triple exponential - models level, trend, and seasonal components
fit <- HoltWinters(myts)
# predictive accuracy
library(forecast)
accuracy(fit)
# predict next three future values
library(forecast)
forecast(fit, 3)
plot(forecast(fit, 3))
Modelos ARIMA
A função arima() pode ser usada para ajustar um modelo de médias móveis integradas autorregressivas. Outras funções úteis incluem:
lag(ts, k) | versão defasada da série temporal, deslocada k observações para trás |
diff(ts, differences= d) | diferença da série temporal d vezes |
ndiffs(ts) | Número de diferenças necessárias para atingir a estacionariedade (do pacote de previsão ) |
acf(ts) | função de autocorrelação |
pacf(ts) | função de autocorrelação parcial |
adf.test(ts) | Teste Dickey-Fuller aumentado. A rejeição da hipótese nula sugere que uma série temporal é estacionária (do pacote tseries ) |
Box.test(x, type="Ljung-Box") | Teste de Pormanteau de que as observações no vetor ou na série temporal x são independentes |
Observe que o pacote forecast tem versões um pouco melhores de acf() e pacf(), chamadas Acf() e Pacf(), respectivamente.
# fit an ARIMA model of order P, D, Q
fit <- arima(myts, order=c(p, d, q)
# predictive accuracy
library(forecast)
accuracy(fit)
# predict next 5 observations
library(forecast)
forecast(fit, 5)
plot(forecast(fit, 5))
Previsão automatizada
O pacote de previsão fornece funções para a seleção automática de modelos exponenciais e ARIMA. A função ets() oferece suporte a modelos aditivos e multiplicativos. A função auto.arima() pode lidar com modelos ARIMA sazonais e não sazonais. Os modelos são escolhidos para maximizar um dos vários critérios de ajuste.
library(forecast)
# Automated forecasting using an exponential model
fit <- ets(myts)
# Automated forecasting using an ARIMA model
fit <- auto.arima(myts)
Indo além
Há muitos bons recursos on-line para você aprender a análise de séries temporais com o R. Entre eles estão A little book of R for time series (Um pequeno livro de R para séries temporais ), de Avril Chohlan, e o curso DataCamp's manipulating time series in R (Manipulação de séries temporais em R ), de Jeffrey Ryan.