A análise de séries temporais é uma técnica estatística utilizada para estudar dados coletados ao longo do tempo, com o objetivo de identificar padrões, tendências, sazonalidades e realizar previsões futuras. Neste trabalho, analisaremos duas séries temporais clássicas disponíveis no R:
Para cada uma dessas séries, serão aplicadas as seguintes etapas de análise:
Essas etapas são fundamentais para entender o comportamento das séries. A seguir, apresentamos cada uma dessas análises de forma prática e interpretativa.
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(tseries)
library(ggplot2)
data(sunspot.year)
data(austres)
sunspots <- sunspot.year
austres <- austres
# ACF sunspots
acf(sunspots, main = "Autocorrelação - Sunspots")
# ACF austres
acf(austres, main = "Autocorrelação - Austres")
# Teste ADF
adf.test(sunspots)
## Warning in adf.test(sunspots): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: sunspots
## Dickey-Fuller = -4.7561, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
adf.test(austres)
##
## Augmented Dickey-Fuller Test
##
## data: austres
## Dickey-Fuller = -2.5512, Lag order = 4, p-value = 0.3493
## alternative hypothesis: stationary
# Diferenciação
dsunspots <- diff(sunspots)
daustres <- diff(austres)
# ACF após diferenciação
acf(dsunspots, main = "ACF - Sunspots Diferenciada")
acf(daustres, main = "ACF - Austres Diferenciada")
# Teste ADF após diferença
adf.test(dsunspots)
## Warning in adf.test(dsunspots): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: dsunspots
## Dickey-Fuller = -14.549, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
adf.test(daustres)
##
## Augmented Dickey-Fuller Test
##
## data: daustres
## Dickey-Fuller = -1.9115, Lag order = 4, p-value = 0.6125
## alternative hypothesis: stationary
# Log (somente austres, pois sunspots tem zero)
log_austres <- log(austres)
# Box-Cox (requer valores positivos)
boxcox_sunspots <- BoxCox.lambda(sunspots)
## Warning in guerrero(x, lower, upper): Guerrero's method for selecting a Box-Cox
## parameter (lambda) is given for strictly positive data.
boxcox_austres <- BoxCox.lambda(austres)
# Aplicar transformações
sunspots_boxcox <- BoxCox(sunspots, boxcox_sunspots)
austres_boxcox <- BoxCox(austres, boxcox_austres)
# Plotar transformações
ts.plot(sunspots_boxcox, main = "Sunspots - Box-Cox", col = "blue")
ts.plot(austres_boxcox, main = "Austres - Box-Cox", col = "red")
# Média móvel simples (12 anos)
mov_avg <- ma(sunspots, order = 12)
# Plotar
ts.plot(sunspots, mov_avg, col = c("black", "red"), lty = 1:2,
main = "Sunspots com Média Móvel (12)")
legend("topright", legend = c("Original", "Média Móvel"), col = c("black", "red"), lty = 1:2)
Com base nas análises acima, observamos que ambas as séries não são estacionárias originalmente, exigindo diferenciação para aplicar modelos como ARIMA. A transformação Box-Cox e a suavização auxiliaram na redução da variância e no alisamento das séries para melhor interpretação.