Coleção series-temporais

Sazonalidade (Kruskal-Wallis)

Kruskal-Wallis: a série tem sazonalidade?

O que o bloco faz

Testa se a série tem SAZONALIDADE sem supor distribuição nenhuma. Põe todas as observações em POSTOS — o menor valor da série inteira vira posto 1, o maior vira o posto N — e compara a soma dos postos de cada estação. Se janeiro é sempre alto e julho é sempre baixo, as somas se afastam e o H cresce. H0 é “as estações têm a mesma distribuição” — sem sazonalidade —, e rejeitar é concluir que há.

É o irmão não paramétrico do F da sazonalidade (models/anova_table sobre a series/regression), que responde à mesma pergunta pedindo erro normal em troca.

Sazonalidade determinística

O que este teste enxerga é o padrão que se repete IGUAL todo ciclo: janeiro sempre alto, julho sempre baixo. A sazonalidade ESTOCÁSTICA — a que vai mudando de ano para ano — não tem um “nível de janeiro” fixo para o posto encontrar, e passa por aqui sem ser vista. A dissertação separa as duas na seção 3.4: para a estocástica o caminho é a diferença sazonal do series/diff.

Tendência atrapalha, e o log não salva

É o ponto que mais engana desta página, e ele se mede no caso de livro. O AirPassengers é A série sazonal dos manuais, e ela NÃO rejeita aqui:

Kruskal-Wallis chi-squared = 11.148, df = 11, p-value = 0.4309

Não é defeito do bloco: é a TENDÊNCIA. A série quase triplica ao longo dos doze anos, então os postos altos são todos dos anos finais e se espalham por todas as estações — cada mês recebe um valor baixo do começo da série e um alto do fim, e as somas de postos acabam empatando. O padrão sazonal existe; o posto o perde por baixo do crescimento.

Passar um log ANTES não muda NADA, e isso costuma surpreender: o log torna a sazonalidade multiplicativa em aditiva, sim, mas este teste é de POSTOS e o log é monotônico — ele não troca a ordem de valor nenhum, então o H e o p-valor saem idênticos aos de cima, dígito por dígito. O series/transform serve para estabilizar a variância; para este teste ele é inócuo.

O que resolve é tirar a TENDÊNCIA. Uma diferença simples do series/diff antes do bloco, e o mesmo AirPassengers rejeita com folga:

Kruskal-Wallis chi-squared = 119.2, df = 11, p-value = 2.623e-20

Ou seja: um “não rejeita H0” numa série que você SABE que é sazonal é quase sempre a tendência falando. Olhe a série no series/seasonal_plot ou no series/subseries antes de concluir que não há estação.

A série precisa ter estação

Série com frequência 1 é cartão vermelho, e não um card verde dizendo que não há sazonalidade: sem ciclo declarado não existem estações para comparar, e o teste seria mandado comparar um grupo só. Declare a frequência no nó que cria a série. Menos de TRÊS ciclos completos também é recusado, e não dois como nos outros blocos sazonais. Com duas observações por estação, o maior H possível — as estações perfeitamente separadas — não chega ao valor crítico, então o teste não teria como rejeitar e o veredito estaria decidido antes de ler o dado:

frequência   ciclos   maior H possível   corte a 5%
4            2          6.667              7.815
4            3         10.385              7.815
2            2          2.400              3.841
2            3          3.857              3.841
12           2         22.880             19.675

A mensal até rejeitaria com dois ciclos, mas o piso é o mesmo para todas as frequências: uma regra só, ao custo de um ano de dado.

O que sai

A estatística H, o p-valor e a conclusão em palavras; os graus de liberdade — o número de estações menos um — vão numa coluna extra, porque é com eles que se lê o H contra a tabela do qui-quadrado. A decisão é a 5%. A cauda é a SUPERIOR: é o H grande que derruba H0, ao contrário dos testes de tendência da coleção. A nota diz quantas estações entraram e quantas observações cada uma tem — ciclo incompleto na ponta deixa umas com uma observação a mais, e é o que explica um H diferente do da mesma série fechada no último ciclo.

Faltantes

Este bloco não aceita faltantes: série com buraco põe o nó em vermelho. Ligue um series/interpolate antes, ou recorte a parte cheia com series/window.

Antes de continuar

Termos que esta página usa, em poucas palavras. As definições completas estão no glossário.

Hipótese nula
A afirmação que o teste põe à prova, em geral a de que não há efeito ou diferença (médias iguais, ausência de tendência). O teste mede o quanto os dados são incompatíveis com ela; não rejeitá-la não prova que ela é verdadeira.
p-valor
A probabilidade de obter um resultado tão extremo quanto o observado, ou mais, se a hipótese nula fosse verdadeira. p-valor pequeno indica dados pouco compatíveis com a hipótese nula; ele não é a probabilidade de a hipótese nula ser verdadeira nem mede o tamanho do efeito.
Teste não paramétrico
Um teste que não supõe uma distribuição específica (como a normal) para os dados; muitos trabalham com a ordem (os postos) das observações. É útil quando os pressupostos de um teste paramétrico falham, em geral com algum custo de poder quando eles valem.
Autocorrelação
A correlação de uma série com ela mesma deslocada no tempo: o valor de hoje parecido com o de ontem. É o padrão que os modelos de séries descrevem, e o que torna inválidos os testes que supõem observações independentes.
Sazonalidade
Um padrão que se repete em intervalos fixos do calendário, como mais chuva em janeiro ou mais vendas em dezembro. O período sazonal é o comprimento do ciclo: 12 para dados mensais com ciclo anual.

Quando usar

Compare a distribuição das observações entre posições do ciclo para verificar sazonalidade. A comparação é não paramétrica e depende da frequência da série.

Pressupostos

  • A série não tem tendência: com tendência os postos altos ficam todos nos anos finais, espalhados por todas as estações, e a sazonalidade some do teste.

    Verificar:Série no tempoMann-Kendall

    Se falhar: Tire a tendência antes com series/diff (o log de series/transform não muda nada: o teste é de postos).

  • Sob H0 as observações são independentes (sem autocorrelação). A autocorrelação dentro de cada estação (o janeiro de um ano parecido com o do seguinte) torna o p-valor otimista.

    Verificar:Correlograma (ACF)Ljung-Box

    Se falhar: Olhe a series/acf da série sem a tendência (resto do series/stl via series/component). Este teste não tem versão para dado autocorrelacionado: leia o p-valor como otimista e, para tendência, use o series/mann_kendall com Correção hamed_rao ou pre_branqueamento.

  • A sazonalidade é determinística (o mesmo padrão em todo ciclo) e o ciclo declarado é o verdadeiro.

    Verificar:Gráfico sazonalSubséries sazonaisPeriodicidade (Fisher)

    Se falhar: Sazonalidade que muda de ano para ano: diferença sazonal (series/diff).

  • Pelo menos três ciclos; o H segue o qui-quadrado aproximado com estações − 1 graus de liberdade.

Configuração

Nenhum. Uma entrada: serie, que precisa ter frequência maior que 1.

Exemplo

Fluxo 1

Série de exemplo
Sazonalidade (Kruskal-Wallis)

Fluxo 2

Série de exemplo
Diferença
Sazonalidade (Kruskal-Wallis)
library(trama)

reg <- tr_registry()
tr_use("trama.series", registry = reg)

tr_flow(reg) |>
  tr_add("pax", "series/example") |>
  tr_add("kw", "series/seasonality_kw", from = "pax")

tr_flow(reg) |>
  tr_add("pax", "series/example") |>
  tr_add("d", "series/diff", from = "pax") |>
  tr_add("kw", "series/seasonality_kw", from = "d")

Como interpretar

Um teste (data/test), com os graus de liberdade numa coluna extra. Ligado numa entrada de tabela, ele vira UMA linha de relatório: um data/bind_rows junta vários testes num só quadro.