Calculando o número ideal de caixas em um histograma

Estou interessado em encontrar o método ideal que puder para determinar quantas caixas devo usar em um histograma. Meus dados devem variar de 30 a 350 objetos no máximo e, em particular, estou tentando aplicar limiares (como o método de Otsu) onde objetos “bons”, dos quais eu deveria ter menos e mais espalhados, são separados de objetos “ruins”, que deveriam ser mais densos em valor. Um valor concreto teria uma pontuação de 1-10 para cada objeto. Eu “tinha 5-10 objetos com pontuações de 6 a 10 e 20 a 25 objetos com pontuações de 1-4. Eu gostaria de encontrar um padrão de categorização de histograma que geralmente permita algo como o método de Otsu para limitar os objetos de pontuação baixa. No entanto, na implementação do Otsu “s que vi, o tamanho do compartimento era 256 e, frequentemente, tenho muito menos pontos de dados do que 256, o que para mim sugere que 256 não é um bom número de compartimento. Com tão poucos dados, que abordagem devo adotar para calcular o número de caixas a serem usadas?

Comentários

  • Acho que Sturges ‘ a regra pode ser usada para n < 200; onde n é o número de observações

Resposta

O A regra Freedman-Diaconis é muito robusta e funciona bem na prática. A largura do compartimento é definida como $ h = 2 \ times \ text {IQR} \ times n ^ {- 1/3} $ . Portanto, o número de caixas é $ (\ max- \ min) / h $ , onde $ n $ é o número de observações, max é o valor máximo e min é o valor mínimo.

Na base R, você pode usar:

 hist(x, breaks="FD")  

Para outras bibliotecas de plotagem sem essa opção (por exemplo, ggplot2), você pode calcular a largura do bin como:

 bw <- 2 * IQR(x) / length(x)^(1/3) ### for example ##### ggplot() + geom_histogram(aes(x), binwidth = bw)  

Comentários

  • @nico. O padrão em R é quebras = ” Sturges “, o que nem sempre dá bons resultados.
  • Como? calcular IQR?
  • @KurtMueller IQR significa intervalo interquartil. Procure o 1º quartil e o 3º quartil e a diferença é IQR. IQR já vem com R, então você pode usá-lo.
  • Se não me engano, a resposta deve ser num_bins <- diff(range(x)) / (2 * IQR(x) / length(x)^(1/3))
  • nclass.FD não existia nove anos atrás.

Resposta

Se você usar muito poucas caixas, o histograma não retrata realmente os dados muito bem. Se você tiver muitas caixas, terá uma aparência de pente quebrado, o que também não dá uma noção da distribuição.

Um solução é criar um gráfico que mostra todos os valores. Tanto um gráfico de pontos quanto uma distribuição de frequência cumulativa, que não requer nenhuma caixa.

Se você deseja criar uma distribuição de frequência com caixas igualmente espaçadas, você precisa decidir quantas caixas (ou a largura de cada). A decisão depende claramente do número de valores. Se você tiver muitos valores, seu gráfico terá uma aparência melhor e será mais informativo se você tiver muitos bins. Isso A página da Wikipedia lista vários métodos para decidir a largura do compartimento a partir do número de observações. O método mais simples é definir o número de compartimentos igual à raiz quadrada do número de valores que você está classificando.

Esta página de Hideaki Shimazaki explica um método alternativo. É um pouco mais complicado de calcular, mas parece funcionar muito bem. A parte superior da página é um aplicativo Java. Role além dele para ver a teoria e a explicação e, em seguida, continue rolando para encontrar links para os documentos que explicam o método.

Comentários

Resposta

Talvez o artigo “ Variações no histograma “de Denby e Mallows serão de interesse:

Esta nova exibição que denominamos” dhist “(para diagonal -cut histogram) preserva as características desejáveis tanto do hist de largura igual quanto do hist de área igual. Ele mostrará caixas altas e estreitas como o ea hist quando houver picos nos dados e mostrará valores discrepantes isolados, assim como o histograma normal.

Eles também mencionam esse código em R está disponível mediante solicitação.

Resposta

Você viu o Método Shimazaki-Shinomoto ?

Embora pareça caro do ponto de vista computacional, pode dar bons resultados. Vale a pena tentar se o tempo computacional não for o seu problema.Existem algumas implementações desse método em java, MATLAB, etc, no link a seguir, que é executado rápido o suficiente: interface da web

Comentários

  • Aqui está uma implementação: gist.github.com/salotz/0158a99a75078b47538452111ec0faa2 . E sim, é mais caro, pois você escolhe um intervalo para o número de caixas e deve fazer um histograma para cada um e, em seguida, calcular um custo e, em seguida, escolher o de custo mínimo.

Resposta

Não tenho certeza se isso conta como uma prática estritamente boa, mas tendo a produzir mais de um histograma com larguras de caixa diferentes e escolher o histograma para qual histograma use com base no histograma que se encaixa na interpretação que estou tentando comunicar melhor. Embora isso introduza alguma subjetividade na escolha do histograma, eu justifico com base em que tive muito mais tempo para entender os dados do que a pessoa a quem estou fornecendo o histograma, então preciso dar a ela uma mensagem muito concisa.

Também sou um grande fã de apresentar histogramas com o mesmo número de pontos em cada compartimento, em vez da mesma largura de compartimento. Eu geralmente acho que eles representam os dados muito melhor do que a largura constante do compartimento, embora sejam mais difíceis de produzir.

Comentários

  • desculpe, eu deveria ter mencionado que preciso fazer isso de forma automatizada. a opção de ” fazê-lo várias vezes até encontrar aquele que melhor atende ao meu propósito ” won ‘ não funciona para mim. tem que ser feito computacionalmente …
  • Eu concordo – a ideia de que existe um ” ótimo ” bin largura é uma suposição bastante simplificadora.

Resposta

Se eu precisar determinar o número de caixas de forma programática, normalmente comece com um histograma que tem muito mais caixas do que o necessário. Depois que o histograma é preenchido, eu combino as caixas até ter entradas suficientes por caixa para o método que estou usando, por exemplo, se eu quiser modelar incertezas de Poisson em um experimento de contagem com incertezas de uma distribuição normal até que eu tenha algo como 10 entradas.

Resposta

Veja esta resposta como um complemento do Sr. Resposta de Rob Hyndman .

Para criar gráficos de histograma com exatamente os mesmos intervalos ou “binwidths” usando a regra Freedman-Diaconis com R básico ou pacote ggplot2, podemos usar um dos valores da função hist(), a saber breaks. Suponha que queiramos criar um histograma de qsec de mtcars dados usando a regra Freedman – Diaconis. No R básico, usamos

x <- mtcars$qsec hist(x, breaks = "FD") 

Enquanto isso, em ggplot2 pacote que usamos

h <- hist(x, breaks = "FD", plot = FALSE) qplot(x, geom = "histogram", breaks = h$breaks, fill = I("red"), col = I("white")) 

Ou, alternativamente,

ggplot(mtcars, aes(x)) + geom_histogram(breaks = h$breaks, col = "white") 

Todos eles geram gráficos de histograma com exatamente os mesmos intervalos e número de caixas como pretendido.

Resposta

I tenho 600 observações para Au g / t. Bin size 1 me dá o seguinte: insira a descrição da imagem aqui

A seleção automática (omitir o intervalo de bin) dá o seguinte: insira a descrição da imagem aqui

Os dados parecem O “K no primeiro e no segundo gráficos, como se não há problema com a integridade dos dados. Apenas o tamanho da caixa 0,1 (g / t) responde à pergunta: as medições eram imprecisas e imprecisas insira a descrição da imagem aqui

Meu julgamento: 1. Existe nenhuma técnica de medição na Terra para mostrar o verdadeiro valor do fenômeno natural. Todas as medidas são aproximadas, algumas perto do valor verdadeiro. Depende do desenho da amostra, calibração, qualificações humanas, etc. 2. É por isso que a distribuição é enviesada em vez de simétrica. 3. No entanto, a forma da distribuição deve se assemelhar a uma seção em forma de sino, pelo menos aproximadamente. Um sino de cada vez (a menos que haja vários ambientes geológicos). 4. A distribuição de frequência com a manipulação do tamanho do compartimento pode ajudar a revelar o padrão de quão exatas e precisas as medições foram feitas. Portanto, é necessário uma seleção experimental do tamanho do depósito em vez de uma regra cortada na pedra.

Comentários

  • Isso é mais um comentário do que um responder a menos que você soletre a moral. Eu ‘ d diria que a moral é esta: Todas as regras são regras básicas, algumas têm mais base estatística do que outras, mas a maioria das regras pode não fazer o que você deseja se as distribuições tiverem assimetria muito alta ou curtose. Portanto, use seu julgamento também.
  • Você adicionou comentários, mas não estou certo de que algum contribua com novos detalhes úteis para o tópico. 1está bom para mim, mas não é o problema aqui. 2. não ‘ t segue de 1. porque algumas distribuições são quase simétricas. 3. é duvidoso: há muitas situações em que se esperam formas diferentes de sinos. 4. também é duvidosa, pois a qualidade das medições originais muitas vezes não é evidente em nenhum histograma, mas é melhor examinada com atenção à estrutura muito fina de uma distribuição.
  • 2. Quase simétrico não é simétrico. Você não pode estar quase grávida: grávida ou não.
  • Claro, mas a simetria exata nos dados é tão rara que se eu tivesse dito ” simétrica ” alguém também pode se opor a isso. É ‘ ser quase simétrico muito facilmente; é por isso e como temos medidas de assimetria.
  • Observado, mas seu comentário era geral e não tinha o contexto que você fornece. Por sua vez, eu disse ” duvidoso ” não ” errado “. Meu principal comentário continua sendo que sua resposta não ‘ realmente acrescenta muito ao tópico sobre como escolher o tamanho da caixa ou o número equivalente de caixas. Ter outro exemplo em que é ‘ é difícil é um giro na pergunta, não realmente uma resposta.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *