Coleção series-temporais

Mann-Kendall

Mann-Kendall: a série tem tendência?

O que o bloco faz

Testa se a série tem TENDÊNCIA. É o teste de tendência mais usado em climatologia — chuva, vazão, temperatura —, e o que se espera encontrar num trabalho da área.

Ele conta, par a par, quantas vezes um valor posterior supera um anterior. Essa contagem é o S: positivo quando o futuro costuma estar acima, negativo quando costuma estar abaixo. A estatística Z é o S padronizado.

Não paramétrico

Não supõe distribuição nenhuma para a série. É por isso que ele é o padrão onde o dado não é normal, que é o caso da maior parte das variáveis ambientais. O O F da tendência (models/anova_table sobre a series/regression) responde à mesma pergunta, mas cobra normalidade do erro em troca; quando os dois concordam, a conclusão tem chão.

A tendência é MONOTÔNICA

É o limite que mais surpreende: o teste procura movimento em um sentido só. Uma série que sobe durante metade do período e desce na outra metade tem pares se cancelando e pode sair SEM tendência nenhuma — o que não quer dizer que nada aconteceu. Olhe o series/plot antes de acreditar num “não há evidência”.

A direção vem no sinal de Z

Rejeitar H0 não é só “há tendência”: Z positivo é tendência de AUMENTO, Z negativo é tendência de QUEDA, e é assim que a conclusão sai escrita.

Empates

Valor repetido não aponta direção nenhuma, e a variância é corrigida por isso. Sem a correção, uma série com muitos valores iguais — medição arredondada, uma corrida de zeros na chuva — sairia com um p-valor otimista demais. A nota diz quantos grupos de empate entraram na conta, junto do S.

O que sai

A estatística Z, o p-valor bilateral e a conclusão em palavras; o S vai na coluna extra do relatório. A decisão é a 5%. O p-valor vem da aproximação normal, que pede pelo menos dez observações — abaixo disso o bloco recusa em vez de devolver um número que a amostra não sustenta. Dez bastam porque a aproximação aqui corre sobre TODAS as n(n-1)/2 comparações par a par, e não sobre uma contagem de símbolos: dez observações já rendem quarenta e cinco comparações, enquanto o series/runs, que depende do corte pela mediana, só alcança a normal dele com quarenta observações.

Série autocorrelacionada: a Correção

O teste supõe observações independentes, e série ambiental quase nunca é: com autocorrelação positiva o S varia mais do que a fórmula diz, e o teste rejeita bem acima dos 5% nominais. Duas correções publicadas:

  • nenhuma — o teste de Mann (1945), como na dissertação. É o padrão.
  • hamed_rao — Hamed & Rao (1998): o mesmo S, com a variância multiplicada por n/n*, calculado das autocorrelações dos POSTOS da série sem a tendência de Sen, só as significativas a 5%. A nota traz o n/n*: acima de 1, a autocorrelação alargou a variância e o Z encolheu.
  • pre_branqueamento — Yue et al. (2002), o pré-branqueamento livre de tendência: tira a tendência de Sen, remove o AR(1) do resto pelo r1, devolve a tendência e testa a série resultante (uma observação a menos; pede 11). A nota traz o r1. Como no artigo (passos 1 a 4, p. 1822-1823), o AR(1) é removido sempre, significativo ou não; o r1 é o do acf (o do modifiedmk), n/(n − 1) vezes menor que o da eq. 14a do artigo.
  • bootstrap_blocos — o mesmo S, com o p-valor de um bootstrap de blocos móveis (Kundzewicz & Robson, 2004): a série é cortada em blocos de round(√n) observações seguidas, sorteados com reposição e emendados, 1999 vezes; o p é a fração das reamostras com |S*| ≥ |S|. Os blocos guardam a dependência de curto alcance e desmancham a tendência. Usa a semente do nó: o mesmo fluxo dá o mesmo p. A nota traz o tamanho do bloco.

No Nilo (datasets::Nile, 100 anos):

correção            Z        p-valor     nota
nenhuma           -4,128    3,7e-05     S = -1387
hamed_rao         -2,820    0,0048      n/n* = 2,143
pre_branqueamento -4,577    4,7e-06     r1 = 0,375, n = 99

As duas primeiras seguem o modifiedmk (mmkh e tfpwmk), conferidas contra ele. Nenhuma das duas devolve o nível nominal. Medido em série SEM tendência, erro AR(1), 2000 réplicas, rejeição a 5%:

phi   n     nenhuma   hamed_rao   pre_branqueamento
0     60      5,1%       8,5%          4,7%
0,3   60     13,5%      15,3%         15,6%
0,6   60     30,7%      21,1%         39,4%
0,6   120    33,4%      18,0%         43,1%

O Hamed-Rao reduz o excesso quando a autocorrelação é forte, mas não o elimina e custa um pouco em ruído branco; o pré-branqueamento livre de tendência PIORA o nível, como Hamed (2009) já apontava — a tendência de Sen estimada na série autocorrelacionada volta somada. Use-o para reproduzir um trabalho que o aplicou, não como remédio. Em raros casos (até 1% das réplicas acima) a soma do Hamed-Rao sai negativa e o bloco recusa em vez de devolver NaN.

O bootstrap_blocos é a correção que mais se aproxima do nível, e ainda assim não o alcança com autocorrelação forte. Medido em série SEM tendência, AR(1), 1000 réplicas por caso (erro de Monte Carlo de 0.7 a 0.9 ponto), rejeição a 5%:

phi   n     nenhuma   bootstrap_blocos
0.3   60     16.0%        7.2%
0.3   120    13.6%        5.5%
0.6   60     31.0%        9.0%
0.6   120    31.2%        7.7%

Com autocorrelação moderada e série de uns cem pontos ele devolve o nível; com phi de seis décimos, reduz o excesso de 31% para 8% a 9%, sem zerá-lo. O preço é poder: com uma tendência de 1.8 desvio do ruído ao longo da série, ele detecta em 77% (phi 0.3, n = 60), 96% (phi 0.3, n = 120), 43% (phi 0.6, n = 60) e 66% (phi 0.6, n = 120) das vezes — menos que o teste sem correção, cujo poder aparente vem em parte do nível inflado. A regra de bloco do modifiedmk::bbsmk (autocorrelações significativas seguidas, mais um) dá blocos de 3 a 4 e rejeitou 17% a 19% com phi 0.6 (300 réplicas); por isso o bloco aqui é √n. Com autocorrelação forte, prefira modelar o erro (series/regression com Erro = arma e o models/anova_table).

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.
Tendência
O movimento de longo prazo de uma série, de subida ou de descida, separado das oscilações de curto prazo e da sazonalidade.

Quando usar

Teste se há tendência monotônica ao longo do tempo sem exigir uma forma linear. O teste avalia ordenação, não o tamanho da mudança.

Pressupostos

  • Com Correção nenhuma, sob H0 as observações são independentes (sem autocorrelação). Autocorrelação positiva, comum em série ambiental, faz o teste rejeitar bem mais que o nível nominal.

    Verificar:Correlograma (ACF)Ljung-Box

    Se falhar: Troque a Correção para bootstrap_blocos (p por bootstrap de blocos móveis; o que mais se aproxima do nível), hamed_rao (variância corrigida pelas autocorrelações dos postos) ou pre_branqueamento (remove o AR(1) antes do teste).

  • Com hamed_rao, a dependência está nas autocorrelações significativas dos postos da série sem a tendência de Sen; com pre_branqueamento, ela é um AR(1) e a tendência é linear (Sen). Nenhuma das duas devolve o nível nominal: medido sem tendência, AR(1) phi = 0,6, n = 60, rejeitam a 5% em 21% (hamed_rao) e 39% (pre_branqueamento, pior que os 31% sem correção; Hamed 2009). Com bootstrap_blocos, a dependência é de curto alcance (cabe em blocos de √n): medido, 5,5% com phi = 0,3 e n = 120, mas 7,7% a 9,0% com phi = 0,6 (n = 120 e 60).

    Verificar:Correlograma (ACF)Autocorrelação parcial (PACF)

    Se falhar: Com autocorrelação forte, modele o erro: series/regression com Erro = arma e o F da tendência (series/regression → models/anova_table).

  • A tendência procurada é monótona (um sentido só). Uma série que sobe e depois desce pode sair sem tendência nenhuma.

    Verificar:Série no tempo

    Se falhar: Separe os trechos (series/window) ou procure o ponto de mudança com o series/pettitt.

  • A variável é contínua: empates são raros. Os empatados saem da conta (ou corrigem a variância), e com muitos o teste perde informação.

  • Pelo menos 10 observações para a aproximação normal de S.

Configuração

  • Correção para autocorrelação — nenhuma (padrão), hamed_rao, pre_branqueamento ou bootstrap_blocos.

Uma entrada: serie.

Exemplo

Série de exemplo
Mann-Kendall
Mann-Kendall
library(trama)

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

tr_flow(reg) |>
  tr_add("nilo", "series/example", dataset = "Nile") |>
  tr_add("mk", "series/mann_kendall", from = "nilo") |>
  tr_add("mk_hr", "series/mann_kendall", correcao = "hamed_rao", from = "nilo")

Como interpretar

Um teste (data/test), com o S 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.