Introdução

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:

  1. Gráfico de autocorrelação (ACF);
  2. Teste de estacionaridade (Dickey-Fuller);
  3. Diferenciação e novo teste de estacionaridade;
  4. Transformações logarítmica e Box-Cox;
  5. Suavização por média móvel (apenas para a série sunspots).

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.

Pacotes e séries utilizadas

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

Gráfico de Autocorrelação

# ACF sunspots
acf(sunspots, main = "Autocorrelação - Sunspots")

# ACF austres
acf(austres, main = "Autocorrelação - Austres")

Teste de Estacionaridade

# 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 e novo teste de estacionaridade

# 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

Transformações: Logarítmica e Box-Cox

# 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")

Suavização por Média Móvel (Sunspots)

# 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)

Conclusão

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.