9.1 Estacionariedade e Diferenciação
Uma série temporal estacionária é aquela cuja as propriedades estatísticas não dependem do momento em que a série é observada.14 Assim, séries temporais com tendências ou com sazonalidade não são estacionárias — a tendência e a sazonalidade afetarão o valor da série temporal em diferentes momentos. Por outro lado, uma série de ruído branco é estacionária — não importa quando você a observa, ela deve parecer praticamente a mesma série em qualquer ponto no tempo.
Alguns casos podem ser confusos — uma série temporal com comportamento cíclico (mas sem tendência ou sazonalidade) é estacionária. Isso ocorre porque os ciclos não têm um comprimento fixo, então, antes de observarmos a série, não podemos ter certeza de onde estarão os picos e os vales dos ciclos.
Em geral, uma série temporal estacionária não apresentará padrões previsíveis no longo prazo. Os gráficos de tempo mostrarão a série como sendo aproximadamente horizontal (embora algum comportamento cíclico seja possível), com variância constante.
Figura 9.1: Quais dessas séries são estacionárias? (a) Preços de fechamento das ações da Google em 2015; (b) Variação diária nos preços das ações da Google em 2015; (c) Número anual de greves nos EUA; (d) Vendas mensais de novas casas unifamiliares vendidas nos EUA; (e) Preços anuais da dúzia de ovos nos EUA (em dólares constantes); (f) Total mensal de porcos abatidos em Victoria, Austrália; (g) Total anual de peles de lince canadense comercializadas pela Hudson Bay Company; (h) Produção trimestral de cerveja na Austrália; (i) Produção mensal de gás na Austrália.
Considere as nove séries plotadas na Figura 9.1. Quais delas você acha que são estacionárias?
Obviamente as regras de sazonalidade excluem as séries (d), (h) e (i). Tendências e mudanças nos níveis excluem as séries (a), (c), (e), (f) e (i). A variância crescente também exclui a série (i). Assim, sobra apenas as séries (b) e (g) como estacionárias.
À primeira vista, os ciclos fortes na série (g) podem parecer torná-la não estacionária. Mas esses ciclos são aperiódicos — eles ocorrem quando a população de linces se torna grande demais para a quantidade de alimento disponível, o que faz com que parem de se reproduzir e a população reduza. Então, a regeneração das suas fontes de alimento permite que a população cresça novamente, e assim por diante. No longo prazo, o momento que esses ciclos ocorem não é previsível. Portanto, a série é estacionária.
Diferenciação
Na Figura 9.1, observe que o preço das ações do Google era não estacionário no painel (a), mas as mudanças diárias eram estacionárias no painel (b). Isso mostra uma maneira de tornar uma série temporal não estacionária em estacionária — calcular as diferenças entre observações consecutivas. Isso é conhecido como diferenciação.
Transformações, como logaritmos, podem ajudar a estabilizar a variância de uma série temporal. A diferenciação pode ajudar a estabilizar a média de uma série temporal, removendo mudanças no nível da série, e, assim, eliminando (ou reduzindo) a tendência e a sazonalidade.
Além do gráfico temporal dos dados, o gráfico da ACF também é útil para identificar séries temporais não estacionárias. Para uma série temporal estacionária, a ACF cairá para zero relativamente rápido, enquanto a ACF de dados não estacionários diminui lentamente. Além disso, para dados não estacionários, o valor de \(r_1\) é frequentemente grande e positivo.
google_2015 |> ACF(Close) |>
autoplot() + labs(subtitle = "Preços de fechamento do Google")
google_2015 |> ACF(difference(Close)) |>
autoplot() + labs(subtitle = "Mudanças nos preços de fechamento do Google")
Figura 9.2: O ACF da preço de fechamento das ações do Google em 2015 (esquerda) e dos retornos diários da preço de fechamento das ações do Google em 2015 (direita).
google_2015 |>
mutate(diff_close = difference(Close)) |>
features(diff_close, ljung_box, lag = 10)
#> # A tibble: 1 × 3
#> Symbol lb_stat lb_pvalue
#> <chr> <dbl> <dbl>
#> 1 GOOG 7.91 0.637A ACF do preço das ações do Google diferenciada se parece com a de uma série de ruído branco. Apenas uma autocorrelação está fora dos limites de 95%, e a estatística Ljung-Box \(Q^*\) tem um valor-p de 0.637 (para \(h=10\)). Isso sugere que a mudança diária no preço das ações do Google é essencialmente um valor aleatório que não está correlacionado com o dos dias anteriores.
Modelo de passeio aleatório
A série diferenciada é a mudança entre observações consecutivas na série original e pode ser escrita como \[ y'_t = y_t - y_{t-1}. \] A série diferenciada terá apenas \(T-1\) valores, uma vez que não é possível calcular uma diferença \(y_1'\) para a primeira observação.
Quando a série diferenciada é ruído branco, o modelo para a série original pode ser escrito como \[ y_t - y_{t-1} = \varepsilon_t, \] onde \(\varepsilon_t\) denota o ruído branco. Reorganizado teremos o modelo de “passeio aleatório” \[ y_t = y_{t-1} + \varepsilon_t. \] Os modelos de passeio aleatório são amplamente utilizados para dados não estacionários, particularmente dados financeiros e econômicos. Passeios aleatórios normalmente apresentam:
- longos períodos de aparentes tendências para cima ou para baixo;
- mudanças súbitas e imprevisíveis de direção.
As previsões de um modelo de passeio aleatório são iguais à última observação, uma vez que os movimentos futuros são imprevisíveis e têm igual probabilidade de serem para cima ou para baixo. Assim, o modelo de passeio aleatório fundamenta previsões ingênuas, introduzidas pela primeira vez na Seção 5.2.
Um modelo estreitamente relacionado permite que as diferenças tenham uma média diferente de zero. Então
\[ y_t - y_{t-1} = c + \varepsilon_t\quad\text{or}\quad {y_t = c + y_{t-1} + \varepsilon_t}\: . \] O valor de \(c\) é a média das mudanças entre observações consecutivas. Se \(c\) for positivo, então a mudança média é um aumento no valor de \(y_t\). Assim, \(y_t\) tenderá a aumentar. No entanto, se \(c\) for negativo, \(y_t\) tenderá a diminuir.
Este é o modelo por trás do método Drift, também discutido na Seção 5.2.
Diferenciação de segunda ordem
Ocasionalmente, os dados diferenciados podem não parecer estacionários, e pode ser necessário diferenciar os dados uma segunda vez para obter uma série estacionária: \[\begin{align*} y''_{t} &= y'_{t} - y'_{t - 1} \\ &= (y_t - y_{t-1}) - (y_{t-1}-y_{t-2})\\ &= y_t - 2y_{t-1} +y_{t-2}. \end{align*}\] Nesse caso, \(y_t''\) terá \(T-2\) valores. Então, modelaríamos a “mudança nas mudanças” dos dados originais. Na prática, quase nunca é necessário ir além das diferenças de segunda ordem.
Diferenciação sazonal
Uma diferença sazonal é a diferença entre uma observação e a observação anterior do mesmo período sazonal. Assim, \[ y'_t = y_t - y_{t-m}, \] onde \(m=\) é o número de períodos. Essas também são chamadas de “diferenças com defasagem (”lag”) \(m\)“, pois subtraímos a observação após um”lag” de \(m\) períodos.
Se os dados com diferenciação sazonal parecem ser ruído branco, então um modelo apropriado para os dados originais é \[ y_t = y_{t-m}+\varepsilon_t. \] As previsões deste modelo são iguais à última observação do período sazonal relevante. Ou seja, este modelo fornece previsões sazonais ingênuas, introduzidas na Seção 5.2.
O painel inferior da Figura 9.3 mostra as diferenças sazonais do logaritmo dos scripts mensais para medicamentos A10 (antidiabéticos) vendidos na Austrália. A transformação e a diferenciação fizeram a série parecer relativamente estacionária.
Figura 9.3: Diferenças em log e sazonais dos dados de vendas de A10 (antidiabéticos). Os logaritmos estabilizam a variância, enquanto a diferença sazonal remove a sazonalidade e a tendência
Para distinguir as diferenças sazonais das diferenças ordinárias, às vezes nos referimos às diferenças ordinárias como “primeiras diferenças”, significando diferenças com “lag” 1.
Algumas vezes, é necessário fazer tanto uma diferença sazonal quanto uma primeira diferença para obter dados estacionários. A Figura 9.4 plota as vendas de medicamentos corticosteroides na Austrália ($AUD) (painel superior). Aqui, primeiramente os dados são transformados usando logaritmos (segundo painel), em seguida, as diferenças sazonais são calculadas (terceiro painel). Os dados ainda parecem um tanto não estacionários, e assim uma nova série de primeiras diferenças é aplicada (painel inferior).
PBS |>
filter(ATC2 == "H02") |>
summarise(Cost = sum(Cost)/1e6) |>
transmute(
`Sales ($million)` = Cost,
`Log sales` = log(Cost),
`Annual change in log sales` = difference(log(Cost), 12),
`Doubly differenced log sales` =
difference(difference(log(Cost), 12), 1)
) |>
pivot_longer(-Month, names_to="Type", values_to="Sales") |>
mutate(
Type = factor(Type, levels = c(
"Sales ($million)",
"Log sales",
"Annual change in log sales",
"Doubly differenced log sales"))
) |>
ggplot(aes(x = Month, y = Sales)) +
geom_line() +
facet_grid(vars(Type), scales = "free_y") +
labs(title = "Vendas de medicamentos corticosteroides", y = NULL)
Figura 9.4: Painel superior: Venda de medicamentos corticosteroides ($AUD). Os outros paineis mostram os mesmos dados após a transformação e diferenciação.
Há um grau de subjetividade na seleção de quais diferenciações aplicar. Os dados com diferenciação sazonal na Figura 9.3 não mostram um comportamento substancialmente diferente dos dados com diferenciação sazonal na Figura 9.4. No segundo caso, poderíamos ter decidido parar com os dados com diferenciação sazonal e não realizar uma rodada extra de diferenciação. No primeiro caso, poderíamos ter decidido que os dados não estavam suficientemente estacionários e feito uma rodada extra de diferenciação. Alguns testes formais para diferenciação são discutidos abaixo, mas sempre há algumas escolhas a serem feitas no processo de modelagem, e diferentes analistas podem fazer escolhas diferentes.
Se \(y'_t = y_t - y_{t-m}\) denota uma série com diferenciação sazonal, então a série diferenciada duas vezes é \[\begin{align*} y''_t &= y'_t - y'_{t-1} \\ &= (y_t - y_{t-m}) - (y_{t-1} - y_{t-m-1}) \\ &= y_t -y_{t-1} - y_{t-m} + y_{t-m-1}\: \end{align*}\]
Quando ambas as diferenciações, sazonal e primeira, são aplicadas, não faz diferença qual é feita primeiro — o resultado será o mesmo. No entanto, se os dados tiverem um padrão sazonal forte, recomendamos que a diferenciação sazonal seja feita primeiro, pois a série resultante às vezes será estacionária e não haverá necessidade de uma primeira diferenciação adicional. Se a primeira diferenciação for feita primeiro, ainda haverá sazonalidade presente.
Tenha cuidado ao aplicar mais diferenciações do que o necessário, pois isso pode induzir dinâmicas ou autocorrelações falsas que não existem realmente na série temporal. Portanto, faça o mínimo de diferenciações necessário para obter uma série estacionária.
É importante que, se a diferenciação for utilizada, as diferenças sejam interpretáveis. As primeiras diferenças são a mudança entre uma observação e a seguinte. As diferenças sazonais são a mudança de um ano para o outro. Outros intervalos de “lag” provavelmente não terão muito sentido interpretativo e devem ser evitados.
Testes de raiz unitária
Uma maneira de determinar de forma mais objetiva se a diferenciação é necessária é usar um teste de raiz unitária. Esses são testes de hipótese estatística de estacionaridade, projetados para determinar se a diferenciação é necessária.
Há vários testes de raiz unitária disponíveis, que são baseados em diferentes suposições e podem levar a respostas conflitantes. Em nossa análise, usamos o teste de Kwiatkowski-Phillips-Schmidt-Shin (KPSS) (Kwiatkowski et al., 1992). Neste teste, a hipótese nula é que os dados são estacionários, e procuramos evidências de que a hipótese nula é falsa. Consequentemente, valores-p pequenos (por exemplo, menores que 0,05) sugerem que a diferenciação é necessária. O teste pode ser calculado usando a função unitroot_kpss().
Por exemplo, vamos aplicá-lo aos dados de preços das ações do Google.
google_2015 |>
features(Close, unitroot_kpss)
#> # A tibble: 1 × 3
#> Symbol kpss_stat kpss_pvalue
#> <chr> <dbl> <dbl>
#> 1 GOOG 3.56 0.01O valor-p é reportado como 0,01 se for menor que 0,01, e como 0,1 se for maior que 0,1. Neste caso, a estatística do teste (3.56) é maior que o valor crítico de 1%, então o valor-p é menor que 0,01, indicando que a hipótese nula é rejeitada. Ou seja, os dados não são estacionários. Podemos diferenciar os dados e aplicar o teste novamente.
google_2015 |>
mutate(diff_close = difference(Close)) |>
features(diff_close, unitroot_kpss)
#> # A tibble: 1 × 3
#> Symbol kpss_stat kpss_pvalue
#> <chr> <dbl> <dbl>
#> 1 GOOG 0.0989 0.1Desta vez, a estatística do teste é muito pequena e está bem dentro da faixa que esperaríamos para dados estacionários, então o valor-p é maior que 0,1. Podemos concluir que os dados diferenciados parecem estacionários.
Esse processo de usar uma sequência de testes KPSS para determinar o número apropriado de primeiras diferenciações é realizado usando o recurso unitroot_ndiffs().
google_2015 |>
features(Close, unitroot_ndiffs)
#> # A tibble: 1 × 2
#> Symbol ndiffs
#> <chr> <int>
#> 1 GOOG 1Como vimos nos testes KPSS acima, uma diferenciação é necessária para tornar os dados google_2015 estacionários.
Uma funcionalidade semelhante para determinar se a diferenciação sazonal é necessária é unitroot_nsdiffs(), que usa a medida de força sazonal introduzida na Seção 4.3 para determinar o número apropriado de diferenciações sazonais necessárias. Nenhuma diferenciação sazonal é sugerida se \(F_S<0.64\), caso contrário, uma diferenciação sazonal é sugerida.
Podemos aplicar unitroot_nsdiffs() ao total mensal de vendas no varejo na Austrália.
aus_total_retail <- aus_retail |>
summarise(Turnover = sum(Turnover))
aus_total_retail |>
mutate(log_turnover = log(Turnover)) |>
features(log_turnover, unitroot_nsdiffs)
#> # A tibble: 1 × 1
#> nsdiffs
#> <int>
#> 1 1
aus_total_retail |>
mutate(log_turnover = difference(log(Turnover), 12)) |>
features(log_turnover, unitroot_ndiffs)
#> # A tibble: 1 × 1
#> ndiffs
#> <int>
#> 1 1Como unitroot_nsdiffs() retorna 1 (indicando que uma diferenciação sazonal é necessária), aplicamos a função unitroot_ndiffs() aos dados diferenciados sazonalmente. Essas funções sugerem que devemos fazer tanto uma diferenciação sazonal quanto uma primeira diferenciação.
Bibliografia
Mais precisamente, se \({y_t}\) é uma série temporal estacionária, então para todo \(s\), a distribuição de \((y_t,\dots,y_{t+s})\) não depende de \(t\).↩︎