R - QQPlot: como ver se os dados são normalmente distribuídos

47

Eu plotei isso depois de fazer um teste de normalidade Shapiro-Wilk. O teste mostrou que é provável que a população esteja normalmente distribuída. No entanto, como ver esse "comportamento" nesse enredo?insira a descrição da imagem aqui

ATUALIZAR

Um histograma simples dos dados:

insira a descrição da imagem aqui

ATUALIZAR

O teste de Shapiro-Wilk diz:

insira a descrição da imagem aqui

Le Max
fonte
6
Re edição: o resultado do teste SW rejeita a hipótese de que esses dados foram extraídos independentemente de uma distribuição normal comum: o valor p é muito pequeno. (Isso é aparente tanto no gráfico qq, que exibe uma cauda esquerda curta, quanto no histograma, que exibe assimetria positiva.) Isso sugere que você interpretou mal o teste. Quando você interpreta o teste corretamente, você ainda tem uma pergunta a fazer?
whuber
4
Pelo contrário: o software e todas as parcelas são consistentes no que dizem. O gráfico qq e o histograma mostram maneiras específicas pelas quais os dados se desviam da normalidade; o teste SW diz que é improvável que esses dados tenham origem em uma distribuição normal.
whuber
1
Por que as parcelas dizem que não é normalmente distribuído? O qqplot cria uma linha reta e o histograma também parece distribuído normalmente? Eu não entendo; (
Le Max
7
O gráfico qq claramente não é reto e o histograma claramente não é simétrico (que é talvez o mais básico dos muitos critérios que um histograma normalmente distribuído deve atender). A resposta de Sven Hohenstein explica como ler o gráfico qq.
whuber
1
Você pode achar útil gerar um vetor normal do mesmo tamanho e criar um gráfico QQ com os dados normais para ver como eles podem aparecer quando os dados, de fato, vêm de uma distribuição normal.
StatsStudent

Respostas:

31

" O teste mostrou que é provável que a população esteja normalmente distribuída " .

Não; não mostrou isso.

Os testes de hipótese não informam a probabilidade do nulo. Na verdade, você pode apostar que esse nulo é falso.

O gráfico QQ não fornece uma forte indicação de não normalidade (o gráfico é razoavelmente reto); talvez haja uma cauda esquerda ligeiramente mais curta do que você esperaria, mas isso realmente não importa muito.

O histograma como está provavelmente também não diz muito; também sugere uma cauda esquerda ligeiramente mais curta. Mas veja aqui

A distribuição populacional da qual seus dados são não será exatamente normal. No entanto, o gráfico QQ mostra que a normalidade é provavelmente uma aproximação razoavelmente boa.

Se o tamanho da amostra não fosse muito pequeno, provavelmente a falta de rejeição do Shapiro-Wilk estaria dizendo o mesmo.

Atualização: sua edição para incluir o valor real de Shapiro-Wilk é importante porque, de fato, isso indica que você rejeitaria o nulo em níveis significativos típicos. Esse teste indica que seus dados não são normalmente distribuídos e a assimetria leve indicada pelas plotagens é provavelmente o que está sendo detectado pelo teste. Para procedimentos típicos que podem assumir a normalidade da própria variável (o teste t de uma amostra é aquele que vem à mente), no que parece ser um tamanho de amostra razoavelmente grande, essa não normalidade moderada quase não terá consequências todos - um dos problemas com os testes de qualidade dos ajustes é mais provável que eles rejeitem exatamente quando não importa (quando o tamanho da amostra é grande o suficiente para detectar alguma modesta não normalidade); da mesma forma, é mais provável que deixem de rejeitar quando mais importa (quando o tamanho da amostra é pequeno).

Glen_b
fonte
De fato, isso me fez interpretar mal a afirmação do OP: pensei que ele disse improvável. Nota que eu ligeiramente discordar de você: enquanto um teste normalmente diz-lhe como improvável uma observação seria se a hipótese nula fosse verdade, nós usamos isso para argumentar que desde que nós fizemos obter esta observação, a hipótese nula é improvável que seja verdade.
Nick Sabbe
Obrigado pela sua resposta! Estou um pouco confuso com todas as declarações que vão na outra direção. Para dizer claramente, meu exercício é fazer uma declaração sobre a normalidade da amostra. Então, o que você sugeriria para responder ao meu professor? E como mostrar normalidade até mesmo o tamanho da amostra é enorme; S?
Le Max
2
O mais forte que você poderia dizer seria algo como - "O gráfico QQ é razoavelmente consistente com a normalidade, mas a cauda esquerda é um pouco 'curta'; há uma leve indicação de assimetria".
Glen_b
37

Se os dados são normalmente distribuídos, os pontos no gráfico QQ-normal ficam em uma linha diagonal reta. Você pode adicionar essa linha ao gráfico de QQ com o comando qqline(x), onde xé o vetor de valores.

Exemplos de distribuição normal e não normal:

Distribuição normal

set.seed(42)
x <- rnorm(100)

O gráfico QQ-normal com a linha:

qqnorm(x); qqline(x)

insira a descrição da imagem aqui

Os desvios da linha reta são mínimos. Isso indica distribuição normal.

O histograma:

hist(x)

insira a descrição da imagem aqui

Distribuição não-normal (gama)

y <- rgamma(100, 1)

O gráfico QQ-normal:

qqnorm(y); qqline(y)

insira a descrição da imagem aqui

Os pontos seguem claramente outra forma além da linha reta.

O histograma confirma a não normalidade. A distribuição não tem a forma de sino, mas é inclinada positivamente (ou seja, a maioria dos pontos de dados está na metade inferior). Histogramas de distribuições normais mostram a maior frequência no centro da distribuição.

hist(y)

insira a descrição da imagem aqui

Sven Hohenstein
fonte
Acho que colocar os intervalos de confiança no qqplot é útil. Nada é "perfeitamente" normal e o tamanho da amostra pode levar até onde algo pode ser inexato e ainda estar dentro do normal.
EngrStudent - Restabelece Monica
@EngrStudent Você tem um código para compartilhar para incluir o intervalo de confiança no qqplot?
Danno
1
@danno Confira a qqPlotfunção no carpacote.
Sven Hohenstein
@danno - veja "qqPlot" na biblioteca "car". Já existe há algum tempo, e não consegui. Ele adiciona os intervalos de confiança. Você também pode especificar a distribuição base para algumas distribuições não normais. Está na minha resposta abaixo.
EngrStudent - Restabelece Monica
1
approximately
23

Algumas ferramentas para verificar a validade da suposição de normalidade em R

library(moments)
library(nortest)
library(e1071)

set.seed(777)
x <- rnorm(250,10,1)

# skewness and kurtosis, they should be around (0,3)
skewness(x)
kurtosis(x)

# Shapiro-Wilks test
shapiro.test(x)

# Kolmogorov-Smirnov test
ks.test(x,"pnorm",mean(x),sqrt(var(x)))

# Anderson-Darling test
ad.test(x)

# qq-plot: you should observe a good fit of the straight line
qqnorm(x)
qqline(x)

# p-plot: you should observe a good fit of the straight line
probplot(x, qdist=qnorm)

# fitted normal density
f.den <- function(t) dnorm(t,mean(x),sqrt(var(x)))
curve(f.den,xlim=c(6,14))
hist(x,prob=T,add=T)
Andres Henestrosa
fonte
11

Embora seja uma boa ideia verificar visualmente se sua intuição corresponde ao resultado de algum teste, você não pode esperar que isso seja fácil o tempo todo. Se as pessoas que tentam detectar o Bóson de Higgs confiariam apenas em seus resultados se pudessem avaliá-los visualmente, precisariam de um olho muito aguçado.

Especialmente com grandes conjuntos de dados (e, portanto, geralmente com poder crescente), as estatísticas tendem a captar a menor das diferenças, mesmo quando elas dificilmente são discerníveis a olho nu.

Dito isto: por normalidade, seu gráfico de QQ deve mostrar uma linha reta: eu diria que não. Existem curvas claras nas caudas e, mesmo perto do meio, há comoção. Visualmente, eu ainda posso estar disposto a dizer (dependendo do objetivo de verificar a normalidade) que esses dados são "razoavelmente" normais.

Observe no entanto: para a maioria dos propósitos em que você deseja verificar a normalidade, você precisa apenas da normalidade dos meios, em vez da normalidade das observações, portanto o teorema do limite central pode ser suficiente para resgatá-lo. Além disso: embora a normalidade seja frequentemente uma suposição de que você precisa verificar "oficialmente", muitos testes demonstraram ser bastante insensíveis a não ter essa suposição cumprida.

Nick Sabbe
fonte
2

Gosto da versão do carro da biblioteca 'R' porque ela fornece não apenas a tendência central, mas também os intervalos de confiança. Fornece orientação visual para ajudar a confirmar se o comportamento dos dados é consistente com a distribuição hipotética.

library(car)

qqPlot(lm(prestige ~ income + education + type, data=Duncan), 
       envelope=.99)

alguns links:

EngrStudent - Restabelecer Monica
fonte