Testes de normalidade inconsistentes: Kolmogorov-Smirnov vs Shapiro-Wilk

8

Atualmente, estou analisando alguns dados que foram produzidos por uma simulação de MC que escrevi - espero que os valores sejam normalmente distribuídos. Naturalmente, plotei um histograma e parece razoável (eu acho?):

[Canto superior esquerdo: histograma com dist.pdf(), canto superior direito: histograma cumulativo com dist.cdf(), inferior: gráfico QQ, datavs dist]

Então eu decidi dar uma olhada mais profunda nisso com alguns testes estatísticos. (Observe que dist = stats.norm(loc=np.mean(data), scale=np.std(data)).) O que fiz e o resultado que obtive foi o seguinte:

  1. Teste de Kolmogorov-Smirnov:

    scipy.stats.kstest(data, 'norm', args=(data_avg, data_sig))
    KstestResult(statistic=0.050096921447209564, pvalue=0.20206939857573536)
  2. Teste de Shapiro-Wilk:

    scipy.stats.shapiro(dat)
    (0.9810476899147034, 1.3054057490080595e-05)
    # where the first value is the test statistic and the second one is the p-value.
  3. QQ-plot:

    stats.probplot(dat, dist=dist)

Minhas conclusões disso seriam:

  • olhando para o histograma e o histograma cumulativo, eu definitivamente assumiria uma distribuição normal

  • O mesmo vale depois de analisar o gráfico QQ (isso nunca fica muito melhor?)

  • o teste KS diz: 'sim, esta é uma distribuição normal'

Minha confusão é: o teste SW diz que não é normalmente distribuído (valor p muito menor que a significância alpha=0.05, e a hipótese inicial era uma distribuição normal). Eu não entendo isso, alguém tem uma interpretação melhor? Eu estraguei tudo em algum momento?

rammelmueller
fonte
5
O QQplots para normalidade pode ser melhor que isso: tente plotar algumas normais aleatórias do mesmo tamanho de amostra para obter uma referência. Você tem uma leve não normalidade, conforme indicado pela curvatura sistemática no QQplot. Histogramas e gráficos de distribuição cumulativa são menos úteis para um trabalho preciso. Eu não privilegiaria KS aqui; tende a ser mais sensível no meio de uma distribuição do que nas caudas, que é o inverso do que você precisa. O SW é um teste e não mede (não pode!) Como a não normalidade é problemática.
Nick Cox
5
@ Nick Esta aplicação do KS é inválida, porque compara os dados a uma distribuição Normal com parâmetros determinados pelos dados : ele precisa da versão Lilliefors. (Eu sei que você sabe disso, mas parece que ignorou esse erro.) Consequentemente, seu valor-p é muito alto.
whuber
4
@ Nick Presumi que o aplicativo estivesse errado, com base em duas evidências: (1) o nome da função se refere a KS e (2) não há como argsargumentar se os parâmetros foram derivados dos dados ou não. A documentação não é clara , mas sua falta de menção a essas distinções sugere fortemente que ela não está realizando o teste de Lilliefors. Esse teste é descrito, com um exemplo de código, em stackoverflow.com/a/22135929/844723 .
whuber
1
Ah! Isso é algo que eu achei suspeito, mas não conhecia esse método - vou mudar isso imediatamente. Obrigado por apontar isso para @whuber!
rammelmueller
2
@ Nick Adoro o teste KS por várias razões: sua simplicidade, sua conexão direta com o gráfico QQ, sua flexibilidade e seu poder. Eu mantenho que todo teste estatístico pode ser visualizado e (quase) toda visualização sugere um teste correspondente - e este é um dos melhores exemplos dessa tese (especialmente se alguém plotar os resíduos em um gráfico QQ, visualmente mais poderoso) . Embora eu tenha implementado muitos outros testes GoF como SW e SF e AD, o KS sempre foi o meu teste para aquelas ocasiões (relativamente raras) em que era necessário um teste formal de distribuição.
whuber

Respostas:

6

Existem inúmeras maneiras pelas quais uma distribuição pode diferir de uma distribuição normal. Nenhum teste conseguiu capturar todos eles. Como resultado, cada teste difere em como verifica se sua distribuição corresponde à normal. Por exemplo, o teste KS analisa o quantil em que sua função de distribuição cumulativa empírica difere no máximo da função de distribuição cumulativa teórica do normal. Isso geralmente ocorre em algum lugar no meio da distribuição, que não é onde geralmente nos preocupamos com incompatibilidades. O teste SW concentra-se nas caudas, que é onde normalmente nos importamos se as distribuições são semelhantes. Como resultado, o SW é geralmente preferido. Além disso, o teste KW não é válido se você estiver usando parâmetros de distribuição estimados em sua amostra (consulte:Qual é a diferença entre o teste de normalidade Shapiro-Wilk e o teste de normalidade Kolmogorov-Smirnov? ) Você deve usar o SW aqui.

Mas as plotagens geralmente são recomendadas e os testes não (veja: O teste de normalidade é 'essencialmente inútil'? ). Você pode ver em todas as suas plotagens que possui uma cauda direita pesada e uma esquerda leve em relação a um verdadeiro normal. Ou seja, você tem um pouco de inclinação correta.

- Reinstate Monica
fonte
2

Você não pode escolher os testes de normalidade com base nos resultados. Nesse caso, você aceita a rejeição em qualquer teste realizado ou não os utiliza. O teste KS não é muito poderoso, não é um teste de normalidade "especializado". Se alguma coisa SW for provavelmente mais confiável neste caso.

Para mim, seu gráfico de QQ tem sinais de cauda direita gorda ou inclinação para a esquerda, ou ambos. Eu sugeriria usar a ferramenta de Tukey para estudar a gordura das caudas. Isso lhe dará uma indicação de como uma distribuição é normal ou Cauchy.

Aksakal
fonte
Como você conclui das plotagens QQ a gordura das caudas? E: qual distribuição você sugeriria?
rammelmueller
1
@rammelmuller, as caudas mais gordas mostrariam uma curva em forma de s, onde a esquerda se abaixa e a direita se abaixa. No seu caso, a esquerda também se inclina, o que pode ser um sinal de inclinação à esquerda.
Aksakal
Obrigado por apontar a ferramenta, vou dar uma olhada nela. Apenas por uma questão de completude: eu tenho outros conjuntos de dados e os resultados às vezes são ligeiramente diferentes: a cauda superior do gráfico QQ varia, mas a cauda inferior é consistentemente um pouco alta demais - um sinal de distorção?
rammelmueller
1
Eu acho que você precisa se perguntar o quão importante é o teste de normalidade para você, como sugeriu o @NickCox. Por que você está testando em primeiro lugar? Cauda curta e descida a longo prazo podem ser um sinal de caudas curtas. O mais importante é tudo isto pode ser irrelevante para você
Aksakal
1
Estou ciente de que posso ser decapitado após esta declaração, mas aqui vou: preciso que meus dados sejam "razoavelmente gaussianos" - se houvesse algo muito suspeito, ou seja, caudas extremamente gordas ou assimetria extrema, teria que caçar para algumas questões fundamentais. Este não parece ser o caso e o projeto está bem. A razão para a questão aqui era mais para verificar se não estou totalmente errado em meus fazendo (ou seja, interpretação de resultados e tal)
rammelmueller