Avaliando a distribuição aproximada de dados com base em um histograma


111

Suponha que eu queira ver se meus dados são exponenciais com base em um histograma (ou seja, inclinado para a direita).

Dependendo de como agrupar ou agrupar os dados, posso obter histogramas totalmente diferentes.

Um conjunto de histogramas fará parecer que os dados são exponenciais. Outro conjunto fará parecer que os dados não são exponenciais. Como faço para definir distribuições determinantes a partir de histogramas bem definidas?


20
Por que não esquecer os histogramas, porque os problemas que você descreve estão bem estabelecidos e considerar ferramentas alternativas como gráficos qq e testes de qualidade de ajuste?
whuber

Respostas:


163

A dificuldade de usar histogramas para inferir forma

Embora os histogramas sejam frequentemente úteis e às vezes úteis, eles podem ser enganosos. Sua aparência pode alterar bastante com as mudanças nos locais dos limites da lixeira.

Esse problema é conhecido há muito tempo *, embora talvez não seja tão amplo quanto deveria - você raramente o vê mencionado em discussões de nível elementar (embora haja exceções).

* por exemplo, Paul Rubin [1] colocou desta maneira: " é sabido que alterar os pontos finais em um histograma pode alterar significativamente sua aparência ". .

Eu acho que é uma questão que deve ser discutida mais amplamente ao introduzir histogramas. Vou dar alguns exemplos e discussão.

Por que você deve ter cuidado com um único histograma de um conjunto de dados

Veja estes quatro histogramas:

Quatro histogramas

São quatro histogramas de aparência muito diferente.

Se você colar os seguintes dados (estou usando R aqui):

Annie <- c(3.15,5.46,3.28,4.2,1.98,2.28,3.12,4.1,3.42,3.91,2.06,5.53,
5.19,2.39,1.88,3.43,5.51,2.54,3.64,4.33,4.85,5.56,1.89,4.84,5.74,3.22,
5.52,1.84,4.31,2.01,4.01,5.31,2.56,5.11,2.58,4.43,4.96,1.9,5.6,1.92)
Brian <- c(2.9, 5.21, 3.03, 3.95, 1.73, 2.03, 2.87, 3.85, 3.17, 3.66, 
1.81, 5.28, 4.94, 2.14, 1.63, 3.18, 5.26, 2.29, 3.39, 4.08, 4.6, 
5.31, 1.64, 4.59, 5.49, 2.97, 5.27, 1.59, 4.06, 1.76, 3.76, 5.06, 
2.31, 4.86, 2.33, 4.18, 4.71, 1.65, 5.35, 1.67)
Chris <- c(2.65, 4.96, 2.78, 3.7, 1.48, 1.78, 2.62, 3.6, 2.92, 3.41, 1.56, 
5.03, 4.69, 1.89, 1.38, 2.93, 5.01, 2.04, 3.14, 3.83, 4.35, 5.06, 
1.39, 4.34, 5.24, 2.72, 5.02, 1.34, 3.81, 1.51, 3.51, 4.81, 2.06, 
4.61, 2.08, 3.93, 4.46, 1.4, 5.1, 1.42)
Zoe <- c(2.4, 4.71, 2.53, 3.45, 1.23, 1.53, 2.37, 3.35, 2.67, 3.16, 
1.31, 4.78, 4.44, 1.64, 1.13, 2.68, 4.76, 1.79, 2.89, 3.58, 4.1, 
4.81, 1.14, 4.09, 4.99, 2.47, 4.77, 1.09, 3.56, 1.26, 3.26, 4.56, 
1.81, 4.36, 1.83, 3.68, 4.21, 1.15, 4.85, 1.17)

Então você pode gerá-los você mesmo:

opar<-par()
par(mfrow=c(2,2))
hist(Annie,breaks=1:6,main="Annie",xlab="V1",col="lightblue")
hist(Brian,breaks=1:6,main="Brian",xlab="V2",col="lightblue")
hist(Chris,breaks=1:6,main="Chris",xlab="V3",col="lightblue")
hist(Zoe,breaks=1:6,main="Zoe",xlab="V4",col="lightblue")
par(opar)

Agora, veja este gráfico:

x<-c(Annie,Brian,Chris,Zoe)
g<-rep(c('A','B','C','Z'),each=40)
stripchart(x~g,pch='|')
abline(v=(5:23)/4,col=8,lty=3)
abline(v=(2:5),col=6,lty=3)

4 gráficos de tira

(Se ainda não for óbvio, veja o que acontece quando você subtrai os dados de Annie de cada conjunto head(matrix(x-Annie,nrow=40)):)

Os dados foram simplesmente deslocados para a esquerda de cada vez em 0,25.

No entanto, as impressões que obtemos dos histogramas - inclinação direita, uniforme, inclinação esquerda e bimodal - eram totalmente diferentes. Nossa impressão foi inteiramente governada pela localização da primeira origem no depósito em relação ao mínimo.

Portanto, não apenas 'exponencial' vs 'não-exponencial', mas 'inclinação à direita' vs 'inclinação à esquerda' ou 'bimodal' vs 'uniforme' apenas movendo-se para onde suas caixas começam.


Edit: Se você variar a largura da lixeira, poderá obter coisas como esta:

Skew vs bell

10.8

x <- c(1.03, 1.24, 1.47, 1.52, 1.92, 1.93, 1.94, 1.95, 1.96, 1.97, 1.98, 
  1.99, 2.72, 2.75, 2.78, 2.81, 2.84, 2.87, 2.9, 2.93, 2.96, 2.99, 3.6, 
  3.64, 3.66, 3.72, 3.77, 3.88, 3.91, 4.14, 4.54, 4.77, 4.81, 5.62)
hist(x,breaks=seq(0.3,6.7,by=0.8),xlim=c(0,6.7),col="green3",freq=FALSE)
hist(x,breaks=0:8,col="aquamarine",freq=FALSE)

Bacana, hein?

Sim, esses dados foram deliberadamente gerados para fazer isso ... mas a lição é clara - o que você acha que vê em um histograma pode não ser uma impressão particularmente precisa dos dados.

O que podemos fazer?

Os histogramas são amplamente utilizados, frequentemente fáceis de obter e às vezes esperados. O que podemos fazer para evitar ou mitigar esses problemas?

Como Nick Cox aponta em um comentário para uma pergunta relacionada : A regra geral sempre deve ser que detalhes robustos a variações na largura e na origem do escaninho provavelmente sejam genuínos; detalhes frágeis a esses provavelmente são espúrios ou triviais .

No mínimo, você deve sempre fazer histogramas em várias larguras de caixas ou origens de caixas diferentes, ou preferencialmente ambas.

Como alternativa, verifique uma estimativa de densidade do kernel com uma largura de banda não muito ampla.

Uma outra abordagem que reduz a arbitrariedade dos histogramas é a média dos histogramas deslocados ,

Histograma médio desviado

(esse é um dos dados mais recentes), mas se você fizer esse esforço, acho que pode usar uma estimativa de densidade do kernel.

Se estou fazendo um histograma (eu os uso apesar de estar ciente do problema), quase sempre prefiro usar consideravelmente mais compartimentos do que os padrões típicos do programa costumam dar, e muitas vezes gosto de fazer vários histogramas com largura de compartimento variável (e, ocasionalmente, origem). Se eles são razoavelmente consistentes na impressão, é provável que você não tenha esse problema, e se eles não forem consistentes, você deve observar com mais cuidado, talvez tente uma estimativa da densidade do kernel, um CDF empírico, um gráfico de QQ ou algo assim semelhante.

Embora os histogramas às vezes sejam enganosos, os boxplots são ainda mais propensos a esses problemas; com um boxplot, você nem tem a capacidade de dizer "use mais caixas". Veja os quatro conjuntos de dados muito diferentes nesta postagem , todos com gráficos de caixa simétricos e idênticos, mesmo que um dos conjuntos de dados esteja bastante inclinado.

[1]: Rubin, Paul (2014) "Abuso de histograma!",
Publicação no blog, OU em um mundo OB , 23 de janeiro de 2014
link ... (link alternativo)


1
Praticamente todo gráfico de necessidade armazena dados como este. Os compartimentos são pequenos o suficiente (a largura de um pixel ao longo do eixo) e isso não importa?
AJMansfield

1
@AJMansfield Isso é um pouco como dizer "toda distribuição é discreta" - embora literalmente verdade, oculta o problema relevante. Um número típico de compartimentos em um estimador binned é muito menor do que um número típico de pixels ... e com qualquer gráfico que faça uso de suavização de serrilhado, o número "efetivo" de pixels é maior (na medida em que é potencialmente possível distinguir diferenças de posições entre pixels)
Glen_b 12/07/2013

2
A questão fundamental é que os histogramas dependem muito do tamanho da lixeira. É difícil determinar isso a priori.

29

Uma densidade de kernel ou um gráfico de linha de logs pode ser uma opção melhor em comparação com um histograma. Ainda existem algumas opções que podem ser definidas com esses métodos, mas são menos voláteis que os histogramas. Existem qqplots também. Uma boa ferramenta para verificar se os dados estão próximos o suficiente de uma distribuição teórica é detalhada em:

 Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne,
 D.F and Wickham, H. (2009) Statistical Inference for exploratory
 data analysis and model diagnostics Phil. Trans. R. Soc. A 2009
 367, 4361-4383 doi: 10.1098/rsta.2009.0120

A versão curta da idéia (ainda leia o artigo para obter detalhes) é que você gera dados a partir da distribuição nula e cria vários gráficos, um dos quais são os dados originais / reais e o restante é simulado a partir da distribuição teórica. Em seguida, você apresenta os gráficos a alguém (possivelmente a si mesmo) que não viu os dados originais e vê se eles conseguem selecionar os dados reais. Se eles não conseguirem identificar os dados reais, você não terá evidências contra o nulo.

A vis.testfunção no pacote TeachingDemos para R ajuda a implementar uma forma deste teste.

Aqui está um exemplo rápido. Um dos gráficos abaixo é de 25 pontos gerados na distribuição com 10 graus de liberdade, os outros 8 são gerados a partir de uma distribuição normal com a mesma média e variância.

insira a descrição da imagem aqui

A vis.testfunção criou esse gráfico e, em seguida, solicita que o usuário escolha qual dos gráficos que considera diferentes e repita o processo mais 2 vezes (3 no total).


@ ScottStafford, adicionei uma cópia da trama acima. Este usa qqplots, mas a função também gera histogramas ou gráficos de densidade podem ser programados.
Greg neve

28

Gráficos de distribuição cumulativa [ MATLAB , R ] - onde você plota a fração de valores de dados menor ou igual a um intervalo de valores - são de longe a melhor maneira de analisar as distribuições de dados empíricos. Aqui, por exemplo, estão os ECDFs desses dados , produzidos em R:

Parcelas do ECDF de Alice, Brian, Chris e Zoe

Isso pode ser gerado com a seguinte entrada R (com os dados acima):

plot(ecdf(Annie),xlim=c(min(Zoe),max(Annie)),col="red",main="ECDFs")
lines(ecdf(Brian),col="blue")
lines(ecdf(Chris),col="green")
lines(ecdf(Zoe),col="orange")

Como você pode ver, é visualmente óbvio que essas quatro distribuições são simplesmente traduções uma da outra. Em geral, os benefícios dos ECDFs para visualizar distribuições empíricas de dados são:

  1. Eles simplesmente apresentam os dados como realmente ocorrem com nenhuma transformação além da acumulação, portanto não há possibilidade de enganar-se acidentalmente, como ocorre com os histogramas e as estimativas de densidade do kernel, por causa de como você está processando os dados.
  2. Eles dão uma noção visual clara da distribuição dos dados, pois cada ponto é armazenado em buffer por todos os dados antes e depois deles. Compare isso com visualizações de densidade não cumulativa, onde a precisão de cada densidade é naturalmente inalterada e, portanto, deve ser estimada por binning (histogramas) ou suavização (KDEs).
  3. Eles funcionam igualmente bem, independentemente de os dados seguirem uma boa distribuição paramétrica, alguma mistura ou uma distribuição não paramétrica confusa.

O único truque é aprender a ler os ECDFs corretamente: áreas pouco inclinadas significam distribuição esparsa, áreas muito inclinadas significam distribuição densa. Porém, quando você os lê, eles são uma ferramenta maravilhosa para analisar distribuições de dados empíricos.


Existe alguma documentação disponível para ler CDFs? por exemplo, o que acontece se minha distribuição cdf como você mostrou acima, então como podemos classificam \ guesstimate-lo em qui-quadrado, distribuição normal ou outros com base na aparência
stats101

2

Sugestão: Os histogramas geralmente atribuem apenas os dados do eixo x que ocorreram no ponto médio da bandeja e omitem as medidas do eixo x de localização com maior precisão. O efeito que isso tem sobre os derivados do ajuste pode ser bastante grande. Vamos dar um exemplo trivial. Suponha que tomemos a derivação clássica de um delta de Dirac, mas a modifiquemos para que comecemos com uma distribuição de Cauchy em algum local mediano arbitrário com uma escala finita (largura máxima até a metade). Então tomamos o limite quando a escala chega a zero. Se usarmos a definição clássica de um histograma e não mudarmos o tamanho da lixeira, não capturaremos nem o local nem a escala. Se, no entanto, usarmos um local mediano dentro de compartimentos com largura fixa uniforme, sempre capturaremos o local, se não a escala quando a escala for pequena em relação à largura da bandeja.

Para valores de ajuste em que os dados são inclinados, o uso de pontos médios da bandeja fixa deslocará o eixo x de todo o segmento de curva naquela região, que acredito estar relacionado à pergunta acima.

histo engraçadon=8em cada categoria de histograma e apenas os exibiu como o valor médio do eixo x de cada compartimento. Como cada compartimento do histograma tem um valor 8, todas as distribuições parecem uniformes e eu tive que compensá-las verticalmente para mostrá-las. O visor não é a resposta correta, mas não deixa de ter informações. Ele nos diz corretamente que há um deslocamento do eixo x entre os grupos. Também nos diz que a distribuição real parece ter um pouco de formato de U. Por quê? Observe que a distância entre os valores médios é mais afastada nos centros e mais próxima nas bordas. Portanto, para tornar essa representação melhor, devemos emprestar amostras inteiras e quantidades fracionárias de cada amostra de limite de posição para fazer todos os valores médios de posição no equidistante do eixo x. Corrigir e exibi-lo corretamente exigiria um pouco de programação. Mas, pode ser apenas uma maneira de criar histogramas para que eles realmente exibam os dados subjacentes em algum formato lógico. A forma ainda mudará se alterarmos o número total de posições que abrangem o intervalo de dados, mas a idéia é resolver alguns dos problemas criados pela classificação arbitrária.

PASSO 2 Então, vamos começar a pedir emprestado entre caixas para tentar tornar os meios mais espaçados.insira a descrição da imagem aqui

Agora, podemos ver a forma dos histogramas começando a emergir. Mas a diferença entre médias não é perfeita, pois só temos um número inteiro de amostras para trocar entre caixas. Para remover a restrição de valores inteiros no eixo y e concluir o processo de obtenção de valores médios equidistantes do eixo x, precisamos começar a compartilhar frações de uma amostra entre os compartimentos.

Etapa 3 O compartilhamento de valores e partes de valores. histo3

Como se pode ver, o compartilhamento de partes de um valor em um limite de posição pode melhorar a uniformidade da distância entre os valores médios. Consegui fazer isso com três casas decimais com os dados fornecidos. No entanto, não creio que não seja possível estabelecer uma distância entre valores médios exatamente iguais em geral, pois a grosseria dos dados não permitirá isso.

Pode-se, no entanto, fazer outras coisas, como usar a estimativa de densidade do kernel .

Aqui vemos os dados de Annie como uma densidade limitada de kernel usando suavizações gaussianas de 0,1, 0,2 e 0,4. Os outros assuntos terão funções deslocadas do mesmo tipo, desde que se faça a mesma coisa que eu, ou seja, use os limites inferior e superior de cada conjunto de dados. Portanto, isso não é mais um histograma, mas um PDF, e tem o mesmo papel que um histograma sem algumas verrugas.

kernelsmooth

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.