Interpretando QQplot - Existe alguma regra de ouro para decidir pela não normalidade?

47

Eu li tópicos suficientes no QQplots aqui para entender que um QQplot pode ser mais informativo do que outros testes de normalidade. No entanto, eu sou inexperiente na interpretação de QQplots. Eu pesquisei muito; Encontrei muitos gráficos de QQplots não normais, mas nenhuma regra clara sobre como interpretá-los, além do que parece ser uma comparação com as distribuições conhecidas mais o "pressentimento".

Gostaria de saber se você tem (ou conhece) alguma regra geral para ajudá-lo a decidir por não normalidade.

Essa pergunta surgiu quando vi esses dois gráficos: gráfico 2 gráfico 1

Entendo que a decisão de não normalidade depende dos dados e do que eu quero fazer com eles; no entanto, minha pergunta é: geralmente, quando as saídas observadas da linha reta constituem evidência suficiente para tornar irracional a aproximação da normalidade?

Pelo que vale a pena, o teste de Shapiro-Wilk falhou em rejeitar a hipótese de não normalidade nos dois casos.

greymatter0
fonte
3
as faixas de confiança em torno da linha QQ são bem legais. Você pode compartilhar o código R que você usou para obtê-los?
user603
7
É apenas qqPlot () de {qualityTools} :)
greymatter0

Respostas:

43

Observe que o Shapiro-Wilk é um poderoso teste de normalidade.

A melhor abordagem é realmente ter uma boa idéia de quão sensível qualquer procedimento que você deseja usar é para vários tipos de não-normalidade (quão ruim não-normal é que deve ser dessa maneira para afetar sua inferência mais do que você pode aceitar).

Uma abordagem informal para analisar os gráficos seria gerar um número de conjuntos de dados que são realmente normais do mesmo tamanho de amostra que você possui - (por exemplo, digamos 24 deles). Plote seus dados reais em uma grade de tais gráficos (5x5 no caso de 24 conjuntos aleatórios). Se não é uma aparência especialmente incomum (por exemplo, a de pior aparência), é razoavelmente consistente com a normalidade.

insira a descrição da imagem aqui

A meu ver, o conjunto de dados "Z" no centro se parece aproximadamente com "o" e "v" e talvez até "h", enquanto "d" e "f" parecem um pouco piores. "Z" são os dados reais. Embora eu não acredite por um momento que seja realmente normal, não é particularmente incomum quando você o compara com dados normais.

[Editar: Acabei de realizar uma pesquisa aleatória - bem, perguntei à minha filha, mas em um período bastante aleatório - e sua escolha pelo menos como uma linha reta foi "d". Portanto, 100% dos pesquisados ​​consideraram "d" o mais estranho.]

Uma abordagem mais formal seria fazer um teste de Shapiro-Francia (que é efetivamente baseado na correlação no gráfico QQ), mas (a) não é tão poderoso quanto o teste de Shapiro Wilk e (b) o teste formal responde a pergunta (às vezes) para a qual você já deve saber a resposta (a distribuição da qual seus dados foram extraídos não é exatamente normal), em vez da pergunta que você precisa responder (o quanto isso importa?).


Conforme solicitado, codifique para a exibição acima. Nada sofisticado envolvido:

z = lm(dist~speed,cars)$residual
n = length(z)
xz = cbind(matrix(rnorm(12*n),nr=n),z,matrix(rnorm(12*n),nr=n))
colnames(xz) = c(letters[1:12],"Z",letters[13:24])

opar = par()
par(mfrow=c(5,5));
par(mar=c(0.5,0.5,0.5,0.5))
par(oma=c(1,1,1,1));

ytpos = (apply(xz,2,min)+3*apply(xz,2,max))/4
cn = colnames(xz)

for(i in 1:25) {
  qqnorm(xz[,i],axes=FALSE,ylab= colnames(xz)[i],xlab="",main="")
  qqline(xz[,i],col=2,lty=2)
  box("figure", col="darkgreen")
  text(-1.5,ytpos[i],cn[i])
}

par(opar)

Observe que isso foi apenas para fins de ilustração; Eu queria um pequeno conjunto de dados que parecesse levemente normal, e é por isso que usei os resíduos de uma regressão linear nos dados dos carros (o modelo não é muito apropriado). No entanto, se eu estivesse realmente gerando uma exibição desse tipo para um conjunto de resíduos para uma regressão, regrediria todos os 25 conjuntos de dados com os mesmos 's do modelo e exibia gráficos QQ de seus resíduos, pois os resíduos têm alguns estrutura não presente em números aleatórios normais.x

(Eu tenho feito conjuntos de parcelas como essa desde pelo menos os anos 80. Como você pode interpretar parcelas se não estiver familiarizado com o modo como elas se comportam quando as suposições são válidas - e quando não?)

Ver mais:

Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne, DF e Wickham, H. (2009) Inferência Estatística para análise exploratória de dados e diagnóstico de modelos Phil. Trans. R. Soc. A 2009 367, 4361-4383 doi: 10.1098 / rsta.2009.0120

Glen_b
fonte
8
+1. Eu realmente gosto da idéia de comparar os gráficos QQ da sua amostra com os gerados aleatoriamente!
amigos estão dizendo sobre clínica de reabilitação
Obrigado @Glen_b. Posso perguntar como você produziu a grade de gráficos?
precisa saber é o seguinte
3
Acabei de descobrir que nunca respondi à sua solicitação, greymatter0. Não há realmente espaço para colocar todo o meu roteiro, mas vou descrever a essência dele. Joguei com as opções de enredo - opar=par(); par(mfrow=c(5,5)); par(mar=c(0.5,0.5,0.5,0.5)); par(oma=c(1,1,1,1))então, em um loop over i, fiz qqnorm(xz[,i],axes=FALSE,ylab= colnames(xz)[i],xlab="",main=""); qqline(xz[,i],col=2,lty=2); box("figure", col="darkgreen")no final par(opar)para definir as opções de volta ao que eram antes. Isso deixa de fora alguns detalhes, mas você deve ser capaz de gerenciar a partir daí.
Glen_b
@ greymatter0 ... e agora descubro que não fiz o ping corretamente antes, quando finalmente respondi. Me desculpe.
Glen_b
Não se preocupe Glen_b, muito obrigado por lembrar!
precisa saber é o seguinte
22

Sem contradizer nenhuma das excelentes respostas aqui, tenho uma regra geral que é muitas vezes (mas nem sempre) decisiva. (Um comentário passageiro na resposta de @Dante também parece pertinente.)

Às vezes parece óbvio demais, mas aqui está você.

Fico feliz em chamar uma distribuição de não normal, se achar que posso oferecer uma descrição diferente que seja claramente mais apropriada.

Portanto, se houver uma pequena curvatura e / ou irregularidade nas caudas de um gráfico quantil-quantil normal, mas uma linearidade aproximada em um gráfico quantil-quantil gama, posso dizer "Isso não é bem caracterizado como normal; é mais como um gamma "

Não é por acaso que isso ecoa um argumento padrão na história e na filosofia da ciência, para não mencionar a prática científica geral, de que uma hipótese é mais clara e efetivamente refutada quando você tem uma melhor para colocar em seu lugar. (Sugestão: alusões a Karl Popper, Thomas S. Kuhn e assim por diante.)

É verdade que para iniciantes, e de fato para todos, existe uma gradação suave entre "Isso é normal, exceto por pequenas irregularidades que sempre esperamos" e "Isso é muito diferente do normal, exceto por alguma semelhança grosseira que geralmente obtemos "

Envelopes de confiança (semelhantes a) e várias amostras simuladas podem ajudar bastante, e eu uso e recomendo ambos, mas isso também pode ser útil. (Aliás, comparar com um portfólio de simulações é uma reinvenção recente e repetida, mas remonta pelo menos até Shewhart em 1931.)

Vou ecoar minha linha superior. Às vezes, nenhuma distribuição de nome de marca parece se encaixar e você precisa avançar da melhor maneira possível.

Nick Cox
fonte
12

Como o @Glen_b disse, você pode comparar seus dados com os que você tem certeza de que são normais - os dados que você mesmo gerou e depois confiar no seu pressentimento :)

A seguir, um exemplo do livro de estatísticas do OpenIntro Statistics

Vamos dar uma olhada neste QQ Plot:

qq1

Isso é normal? Vamos comparar com dados normalmente distribuídos:

qq2

Este parece melhor que nossos dados, portanto, nossos dados não parecem normais. Vamos nos certificar simulando-o várias vezes e plotando lado a lado

qq3

Portanto, nosso instinto nos diz que a amostra provavelmente não será distribuída normalmente.

Aqui está o código R para fazer isso

load(url("http://www.openintro.org/stat/data/bdims.RData"))
fdims = subset(bdims, bdims$sex == 0)

qqnorm(fdims$wgt, col=adjustcolor("orange", 0.4), pch=19)
qqline(fdims$wgt)

qqnormsim = function(dat, dim=c(2,2)) {
  par(mfrow=dim)
  qqnorm(dat, col=adjustcolor("orange", 0.4), 
         pch=19, cex=0.7, main="Normal QQ Plot (Data)")
  qqline(dat)
  for (i in 1:(prod(dim) - 1)) {
    simnorm = rnorm(n=length(dat), mean=mean(dat), sd=sd(dat))
    qqnorm(simnorm, col=adjustcolor("orange", 0.4), 
           pch=19, cex=0.7,
           main="Normal QQ Plot (Sim)")
    qqline(simnorm)
  }
  par(mfrow=c(1, 1))
}
qqnormsim(fdims$wgt)
Alexey Grigorev
fonte
9

Existem muitos testes de normalidade. Geralmente, concentra-se na hipótese nula , a saber, " ". No entanto, pouca atenção é dada à hipótese alternativa : "contra o quê"?H0:F=Normal

Normalmente, testes que consideram qualquer outra distribuição como hipótese alternativa têm baixa potência quando comparados com testes com a hipótese alternativa correta (consulte, por exemplo, 1 e 2 ).

Existe um pacote R interessante com a implementação de vários testes de normalidade não paramétricos ('nortest' http://cran.r-project.org/web/packages/nortest/index.html). Como mencionado nos artigos acima, o teste da razão de verossimilhança, com hipótese alternativa apropriada, é mais poderoso que esses testes.

A idéia mencionada por @Glen_b sobre a comparação de sua amostra com amostras aleatórias do seu modelo (ajustado) é mencionada na minha segunda referência. Eles são chamados de "QQ-Envelopes" ou "QQ-Fans". Isso implica implicitamente ter um modelo para gerar os dados e, conseqüentemente, uma hipótese alternativa.

Dante
fonte
4

Ao ensinar meu curso de estratégias de modelagem de regressão, esse tópico sempre incomoda meus alunos e eu. Digo a eles que nossas avaliações gráficas são sempre subjetivas e tenho a tendência de me preocupar com os gráficos mais cedo do que tarde, quando estou cansado. A adição de testes estatísticos formais não ajuda o suficiente: os testes podem captar a não normalidade trivial para tamanhos de amostra muito grandes e perder a não normalidade importante para pequenos . Prefiro usar métodos que não assumem normalidade eficiente, por exemplo, regressão ordinal para contínuo .YnY

Frank Harrell
fonte
1
+1. Se você tiver cinco minutos do @Franck, poderá dar uma olhada neste tópico: stats.meta.stackexchange.com/questions/4743 e pesar lá? Trata-se de nossas tags para ordinal / ordenado / probit - há um monte ou tags relacionadas e alguma inconsistência em como a tag [ordinal] é usada, por isso estou sugerindo que essas tags sejam arrumadas. Seria ótimo saber sua opinião sobre a melhor maneira de organizá-los.
Ameba diz Reinstate Monica
1
Comece com o post sobre a função rms orm com um exemplo para um contínuo . Não pode encontrá-lo no momento ...Y
Frank Harrell