Calcular el número óptimo de contenedores en un histograma

80

Estoy interesado en encontrar un método lo más óptimo posible para determinar cuántos contenedores debo usar en un histograma. Mis datos deben oscilar entre 30 y 350 objetos como máximo, y en particular estoy tratando de aplicar un umbral (como el método de Otsu) donde los objetos "buenos", de los que debería tener menos y deberían estar más separados, están separados de " "malos", que deberían tener un valor más denso. Un valor concreto tendría una puntuación de 1-10 para cada objeto. Tenía 5-10 objetos con puntajes 6-10 y 20-25 objetos con puntajes 1-4. Me gustaría encontrar un patrón de agrupación de histograma que generalmente permita que algo como el método de Otsu limite los objetos de baja puntuación. Sin embargo, en la implementación de Otsu que he visto, el tamaño del contenedor era 256 y, a menudo, tengo muchos menos puntos de datos que 256, lo que para mí sugiere que 256 no es un buen número de contenedor. Con tan pocos datos, ¿qué enfoques debo tomar para calcular la cantidad de contenedores a usar?

Tony Stark
fuente
Creo que la regla de Sturges se puede usar para n <200; donde n es el número de observaciones
venkasub

Respuestas:

95

La regla de Freedman-Diaconis es muy robusta y funciona bien en la práctica. El ancho del contenedor se establece en . Entonces, el número de contenedores es , donde es el número de observaciones, max es el valor máximo y min es el valor mínimo.h=2×IQR×n1/3(maxmin)/hn

En la base R, puedes usar:

hist(x, breaks="FD")

Para otras bibliotecas de trazado sin esta opción (p. Ej. ggplot2), Puede calcular el ancho de bin como:

bw <- 2 * IQR(x) / length(x)^(1/3)

### for example #####
ggplot() + geom_histogram(aes(x), binwidth = bw)
Rob Hyndman
fuente
2
@nico. El valor predeterminado en R es breaks = "Sturges", que no siempre da buenos resultados.
Rob Hyndman
44
¿Cómo se calcula IQR?
Kurt Mueller
1
@KurtMueller IQR significa rango intercuartil. Busque el primer cuartil y el tercer cuartil y la diferencia es IQR. IQR ya viene con R para que pueda usarlo.
xiaodai
44
Si no me equivoco, la respuesta debería leersenum_bins <- diff(range(x)) / (2 * IQR(x) / length(x)^(1/3))
Jasha
1
nclass.FDNo existía hace nueve años.
Rob Hyndman
18

Si usa muy pocos contenedores, el histograma realmente no representa muy bien los datos. Si tienes demasiados contenedores, obtienes un aspecto de peine roto, que tampoco da una idea de la distribución.

Una solución es crear un gráfico que muestre cada valor. Ya sea un gráfico de puntos o una distribución de frecuencia acumulativa, que no requiere ningún bin.

Si desea crear una distribución de frecuencia con bins igualmente espaciados, debe decidir cuántos bins (o el ancho de cada uno). La decisión depende claramente del número de valores. Si tiene muchos valores, su gráfico se verá mejor y será más informativo si tiene muchos contenedores. Esta página de wikipedia enumera varios métodos para decidir el ancho del contenedor a partir del número de observaciones. El método más simple es establecer el número de contenedores igual a la raíz cuadrada del número de valores que está agrupando.

Esta página de Hideaki Shimazaki explica un método alternativo. Es un poco más complicado de calcular, pero parece hacer un gran trabajo. La parte superior de la página es una aplicación Java. Desplácese para ver la teoría y la explicación, luego siga desplazándose para encontrar enlaces a los documentos que explican el método.

Harvey Motulsky
fuente
El enlace a la página de Hideaki está roto. No estoy seguro de si esto es lo mismo: toyoizumilab.brain.riken.jp/hideaki/res/histogram.html
DarenW
9

Quizás el documento " Variaciones sobre el histograma " de Denby y Mallows sea de interés:

Esta nueva pantalla que llamamos "dhist" (para histograma de corte diagonal) conserva las características deseables tanto del hist de igual ancho como del hist de área igual. Mostrará contenedores altos y estrechos como el hist cuando hay picos en los datos y mostrará valores atípicos aislados al igual que el histograma habitual.

También mencionan que el código en R está disponible a pedido.

ars
fuente
5

No estoy seguro de que esto cuente como estrictamente una buena práctica, pero tiendo a producir más de un histograma con diferentes anchos de bin y elegir el histograma que histgram usar en función de qué histgram se ajusta a la interpretación que estoy tratando de comunicar mejor. Si bien esto introduce cierta objetividad en la elección del histograma, lo justifico porque he tenido mucho más tiempo para comprender los datos que la persona a la que le estoy dando el histograma, por lo que debo enviarles un mensaje muy conciso.

También soy un gran admirador de presentar histogramas con el mismo número de puntos en cada bin en lugar del mismo ancho de bin. Por lo general, encuentro que estos representan los datos mucho mejor que el ancho constante del contenedor, aunque son mucho más difíciles de producir.

Ian Turner
fuente
1
lo siento, debería haber mencionado que necesito hacer esto de manera automatizada. la opción de "hacerlo varias veces hasta que encuentre el que mejor se adapte a mi propósito" no me funciona. tiene que hacerse computacionalmente ...
Tony Stark
44
Estoy de acuerdo: la idea de que hay un ancho de contenedor "óptimo" es una gran suposición simplificadora.
Hadley
5

¿ Viste el método Shimazaki-Shinomoto ?

Aunque parece ser computacionalmente costoso, puede darle buenos resultados. Vale la pena intentarlo si el tiempo computacional no es su problema. Hay algunas implementaciones de este método en java, MATLAB, etc., en el siguiente enlace, que se ejecuta lo suficientemente rápido: interfaz web

Girardi
fuente
3

Si necesito determinar la cantidad de contenedores mediante programación, generalmente comienzo con un histograma que tiene muchos más contenedores de los necesarios. Una vez que se completa el histograma, combino bins hasta que tenga suficientes entradas por bin para el método que estoy usando, por ejemplo, si quiero modelar incertidumbres de Poisson en un experimento de conteo con incertidumbres de una distribución normal hasta que tenga más de 10 entradas.

Benjamin Bannier
fuente
2

Vea esta respuesta como un complemento de la respuesta del Sr. Rob Hyndman .

Para crear gráficos de histograma con exactamente los mismos intervalos o 'anchuras de contenedor' utilizando la regla de Freedman-Diaconis, ya sea con R básico o ggplot2paquete, podemos usar uno de los valores de la hist()función, a saber breaks. Supongamos que queremos crear un histograma de qsecde mtcarsdatos utilizando la regla Freedman-Diaconis. En R básico usamos

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

Mientras tanto, en el ggplot2paquete usamos

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

O alternativamente

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

Todos ellos generan gráficos de histograma con exactamente los mismos intervalos y el número de contenedores como se esperaba.

Anastasiya-Romanova 秀
fuente
-5

Tengo 600 observaciones para Au g / t. El tamaño de la papelera 1 me da esto:ingrese la descripción de la imagen aquí

La selección automática (omitir el rango de bin) da esto:ingrese la descripción de la imagen aquí

Los datos se ven O'K en el primer y segundo gráfico, como si no hubiera ningún problema con la integridad de los datos. Solo el tamaño del contenedor 0.1 (g / t) responde a la pregunta: las mediciones fueron imprecisas e imprecisasingrese la descripción de la imagen aquí

Mi opinión: 1. No existe una técnica de medición en la Tierra para mostrar el verdadero valor del fenómeno natural. Todas las medidas son aproximadas, algunas están cerca del valor verdadero. Depende del diseño de muestreo, la calibración, las calificaciones humanas, etc. 2. Es por eso que la distribución es sesgada en lugar de simétrica. 3. Sin embargo, la forma de la distribución debe parecerse a una sección "similar a una campana", al menos aproximadamente. Una campana a la vez (a menos que haya varios entornos geológicos). 4. La distribución de frecuencias con la manipulación del tamaño del contenedor puede ayudar a revelar un patrón sobre la precisión y precisión de las mediciones realizadas. Por lo tanto, uno necesita una recolección experimental del tamaño del contenedor en lugar de una regla cortada en piedra.

Sergo Cusiani
fuente
2
Esto es más un comentario que una respuesta a menos que deletree la moraleja. Diría que la moraleja es esta: todas las reglas son reglas generales, algunas tienen más bases estadísticas que otras, pero la mayoría de las reglas pueden no hacer lo que usted desea si las distribuciones tienen un sesgo o curtosis muy alto. Entonces, usa tu juicio también.
Nick Cox
2
Has agregado comentarios, pero no tengo claro que ninguno contribuya con nuevos detalles útiles al hilo. 1. está bien para mí, pero no es el problema aquí. 2. no se sigue de 1. ya que algunas distribuciones son casi simétricas. 3. es dudoso: hay muchas situaciones en las que se esperan formas distintas a las campanas. 4. también es dudoso ya que la calidad de las mediciones originales a menudo no es evidente en ningún histograma, pero a menudo se examina mejor con atención a la estructura muy fina de una distribución.
Nick Cox
2. Casi simétrico no es simétrico. No puede estar casi embarazada: ya sea embarazada o no.
Sergo Cusiani
2
Claro, pero la simetría exacta en los datos es tan rara que si hubiera dicho "simétrica" ​​alguien podría objetar razonablemente eso también. Es muy fácil ser casi simétrico; Por eso y cómo tenemos medidas de asimetría.
Nick Cox
1
Tomó nota, pero su comentario fue general y careció del contexto que ahora da. A su vez dije "dudoso", no "equivocado". Mi comentario principal sigue siendo que su respuesta realmente no agrega mucho al hilo sobre cómo elegir el tamaño del contenedor o el número equivalente de contenedores. Tener otro ejemplo en el que es difícil es dar un giro a la pregunta, no realmente una respuesta.
Nick Cox