Teste de Ljung-Box

O teste de Ljung-Box verifica se os resíduos de um modelo de série temporal ajustado são ruído branco: não correlacionados em todas as defasagens. Um resultado significativo significa que o modelo não capturou toda a estrutura de autocorrelação dos dados e precisa de refinamento.

Contexto: quando este teste é usado?

Depois de ajustar um modelo de série temporal (ARIMA, suavização exponencial, regressão com erros de série temporal), os resíduos devem ser não correlacionados. Se não forem, o modelo está mal especificado: ele está deixando estrutura previsível nos erros, o que significa que previsões e erros padrão são pouco confiáveis.

O teste de Ljung-Box formaliza essa verificação diagnóstica. Ele não é usado para testar se dados brutos são autocorrelacionados (use a ACF para isso), mas para testar se os resíduos de um modelo ajustado são.

Estatística do teste

A estatística de Ljung-Box agrupa as autocorrelações amostrais em todas as \(m\) defasagens testadas em um único número:

\[Q = n(n+2) \sum_{k=1}^{m} \frac{\hat{r}_k^2}{n-k}\]

em que \(n\) é o número de observações, \(m\) é o número de defasagens testadas, e \(\hat{r}_k\) é a autocorrelação amostral na defasagem \(k\). Sob \(H_0\) (nenhuma autocorrelação), \(Q \sim \chi^2(m - p - q)\), em que \(p\) e \(q\) são as ordens AR e MA do modelo ajustado (ambas 0 se testando dados brutos).

A estatística de Ljung-Box é uma soma ponderada de autocorrelações ao quadrado, dando mais peso a defasagens com menos observações (\(n-k\) no denominador). Isso a torna mais sensível do que a estatística original de Box-Pierce, que usa \(n\sum \hat{r}_k^2\) sem a correção.

Hipóteses: \(H_0\): os resíduos são distribuídos de forma independente (nenhuma autocorrelação em qualquer defasagem até \(m\)). \(H_1\): pelo menos uma autocorrelação \(\hat{r}_k\) é diferente de zero.

O gráfico ACF: o complemento visual

O teste de Ljung-Box dá um único valor-p para todas as defasagens até \(m\). O gráfico ACF mostra as autocorrelações individuais em cada defasagem, facilitando ver onde está a estrutura. Sempre use os dois juntos.

Dois gráficos ACF lado a lado: um para resíduos de ruído branco e outro para resíduos autocorrelacionados

Barras vermelhas excedem as bandas de confiança de 95% (linhas tracejadas azuis). Resíduos de ruído branco não têm barras significativas e um valor-p grande. Resíduos autocorrelacionados mostram um padrão claro decaindo a partir da defasagem 1, com um valor-p muito pequeno.

Exemplo completo: diagnóstico de modelo ARIMA

Números mensais de passageiros de companhias aéreas (conjunto de dados Box-Jenkins, \(n = 144\)) são ajustados com um modelo ARIMA(1,1,1)(1,1,1)[12]. O teste de Ljung-Box é aplicado aos resíduos.

ACF dos resíduos do modelo ARIMA para dados de companhias aéreas com valores-p do teste de Ljung-Box em diferentes defasagens

Todos os valores-p estão bem acima de 0,05: os resíduos não mostram autocorrelação significativa. O modelo capturou adequadamente a estrutura dos dados.

Escolhendo o número de defasagens \(m\)

O valor de \(m\) é uma troca genuína entre capturar autocorrelação em defasagens maiores e manter poder suficiente para detectá-la:

⚠️ A escolha de m importa e não há uma única resposta correta

Testar poucas defasagens demais deixa passar autocorrelações em defasagens maiores. Testar demais reduz o poder porque a distribuição qui-quadrado tem mais graus de liberdade, tornando mais difícil detectar qualquer autocorrelação significativa individual.

Regras práticas comuns:

  • Para séries não sazonais: \(m = \min(10, n/5)\).
  • Para séries sazonais com período \(s\): \(m = 2s\) (por exemplo, \(m = 24\) para dados mensais).
  • Para modelos ARIMA\((p,d,q)\): use \(gl = m - p - q\) graus de liberdade na distribuição qui-quadrado.

No R, Box.test(..., fitdf = p + q) aplica a correção de graus de liberdade automaticamente.

Executando o teste em R

Box.test() aplica a correção de graus de liberdade automaticamente uma vez que você passa as ordens AR e MA do modelo ajustado:

# After fitting an ARIMA model
fit <- arima(x, order = c(1, 1, 1))
resid <- residuals(fit)

# Ljung-Box test with degrees of freedom correction
Box.test(resid, lag = 10, type = "Ljung-Box", fitdf = 2)  # fitdf = p + q

# Multiple lags at once
sapply(c(6, 12, 18, 24), function(m)
  Box.test(resid, lag = m, type = "Ljung-Box", fitdf = 2)$p.value)

# ACF plot for visual inspection
acf(resid, lag.max = 24)

💡 Interpretando o resultado no contexto

Um resultado significativo de Ljung-Box (\(p \leq 0{,}05\)) significa que o modelo tem autocorrelação residual. Próximos passos típicos:

  • Inspecionar a ACF e a PACF dos resíduos para identificar quais defasagens são significativas.
  • Aumentar a ordem AR ou MA do modelo.
  • Para padrões sazonais, adicionar termos AR ou MA sazonais.
  • Se tudo mais falhar, considerar uma classe de modelo diferente (por exemplo, GARCH para retornos financeiros com agrupamento de volatilidade).

Um resultado não significativo não garante que o modelo esteja correto: ele apenas diz que os resíduos são consistentes com ruído branco até a defasagem \(m\).