Calculer le nombre optimal de bacs dans un histogramme


80

Je suis intéressé à trouver une méthode optimale pour déterminer le nombre de casiers à utiliser dans un histogramme. Mes données devraient aller de 30 à 350 objets au maximum, et en particulier j'essaie d'appliquer un seuillage (comme la méthode d'Otsu) où les "bons" objets, pour lesquels je devrais avoir moins d'éléments et qui devraient être plus dispersés, sont séparés " "mauvais" objets, dont la valeur devrait être plus dense. Une valeur concrète aurait un score de 1-10 pour chaque objet. J'avais eu 5-10 objets avec des scores 6-10, et 20-25 objets avec des scores 1-4. J'aimerais trouver un modèle de regroupement d'histogrammes qui permette généralement à une méthode comme la méthode d'Otsu de définir un seuil pour les objets à faible score. Cependant, dans l'implémentation d'Otsu que j'ai vue, la taille de la corbeille était de 256, et souvent j'ai beaucoup moins de points de données que 256, ce qui pour moi suggère que 256 n'est pas un bon numéro de casier. Avec si peu de données, quelles approches dois-je adopter pour calculer le nombre de bacs à utiliser?


Je pense que la règle de Sturges peut être utilisée pour n <200; où n est le nombre d'observations
venkasub le

Réponses:


95

La règle Freedman-Diaconis est très robuste et fonctionne bien dans la pratique. La largeur de la corbeille est définie sur . Le nombre de cases est donc , où est le nombre d'observations, max la valeur maximale et min la valeur minimale.h=2×IQR×n1/3(maxmin)/hn

En base R, vous pouvez utiliser:

hist(x, breaks="FD")

Pour les autres bibliothèques de traçage sans cette option (par exemple, ggplot2), vous pouvez calculer binwidth comme suit:

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

### for example #####
ggplot() + geom_histogram(aes(x), binwidth = bw)

2
@Nico. La valeur par défaut dans R est breaks = "Sturges", ce qui ne donne pas toujours de bons résultats.
Rob Hyndman le

4
Comment calcule-t-on IQR?
Kurt Mueller

1
@KurtMueller IQR signifie gamme interquartile. Recherchez le premier quartile et le troisième quartile et la différence est IQR. IQR est déjà fourni avec R, vous pouvez donc l'utiliser.
xiaodai

4
Si je ne me trompe pas, la réponse devrait être la suivantenum_bins <- diff(range(x)) / (2 * IQR(x) / length(x)^(1/3))
Jasha

1
nclass.FDn'existait pas il y a neuf ans.
Rob Hyndman

18

Si vous utilisez trop peu de bacs, l'histogramme ne représente pas vraiment les données. Si vous avez trop de bacs, vous obtenez un aspect de peigne cassé, ce qui ne donne pas non plus une idée de la répartition.

Une solution consiste à créer un graphique qui montre chaque valeur. Soit un diagramme en points, ou une distribution de fréquence cumulative, qui ne nécessite pas de bacs.

Si vous souhaitez créer une distribution de fréquence avec des cases équidistantes, vous devez décider du nombre de cases (ou de la largeur de chacune). La décision dépend clairement du nombre de valeurs. Si vous avez beaucoup de valeurs, votre graphique aura une meilleure apparence et sera plus informatif si vous avez beaucoup de bacs. Cette page wikipedia répertorie plusieurs méthodes pour choisir la largeur de la corbeille à partir du nombre d'observations. La méthode la plus simple consiste à définir le nombre de bacs égal à la racine carrée du nombre de valeurs que vous binz.

Cette page de Hideaki Shimazaki explique une méthode alternative. Le calcul est un peu plus compliqué, mais semble faire un excellent travail. La partie supérieure de la page est une application Java. Faites défiler la page pour voir la théorie et l'explication, puis continuez à faire défiler pour trouver des liens vers les articles expliquant la méthode.


Le lien vers la page de Hideaki est cassé. Je ne suis pas sûr que ce soit la même chose: toyoizumilab.brain.riken.jp/hideaki/res/histogram.html
DarenW

9

Peut-être le papier " Variations sur l'histogramme " de Denby et Mallows sera-t-il intéressant:

Ce nouvel affichage que nous appelons "dhist" (pour un histogramme coupé en diagonale) préserve les caractéristiques souhaitables des hist de même largeur et de même zone. Il montrera des bacs hauts et étroits comme ea hist quand il y a des pics dans les données et montrera des valeurs éloignées isolées, tout comme l'histogramme habituel.

Ils mentionnent également que le code en R est disponible sur demande.


5

Je ne suis pas sûr que cela soit considéré comme une bonne pratique, mais j’ai tendance à produire plus d’un histogramme avec des largeurs de corbeille différentes et à choisir l’histogramme que l’histgram doit utiliser en fonction du histogramme qui correspond à l’interprétation que je cherche à mieux communiquer. Bien que cela introduise une certaine objectivité dans le choix de l'histogramme, je le justifie par le fait que j'ai eu beaucoup plus de temps pour comprendre les données que la personne à laquelle je donne l'histogramme. J'ai donc besoin de leur donner un message très concis.

Je suis également un grand fan de présenter des histogrammes avec le même nombre de points dans chaque bac plutôt que la même largeur de bac. Je trouve généralement que ceux-ci représentent les données bien mieux que la largeur de corbeille constante bien qu'ils soient difficiles à produire.


1
désolé, j'aurais dû mentionner que je dois le faire de manière automatisée. l'option de "le faire plusieurs fois jusqu'à ce que je trouve celui qui convient le mieux à mes objectifs" ne fonctionnera pas pour moi. doit être fait par ordinateur ...
Tony Stark

4
Je suis d’accord avec l’idée qu’il existe une largeur «optimale» des bacs est une hypothèse simplificatrice énorme.
Hadley

5

Avez-vous vu la méthode Shimazaki-Shinomoto ?

Bien que cela semble coûteux en calcul, il peut vous donner de bons résultats. Cela vaut la peine d'essayer si le temps de calcul n'est pas votre problème. Il existe quelques implémentations de cette méthode en java, MATLAB, etc., dans le lien suivant, qui fonctionne assez vite: interface web


3

Si je dois déterminer le nombre de bacs par programme, je commence généralement par un histogramme qui contient beaucoup plus de bacs que nécessaire. Une fois que l'histogramme est rempli, je combine les bacs jusqu'à ce que je dispose d'assez d'entrées pour la méthode que j'utilise, par exemple si je veux modéliser les incertitudes de Poisson dans une expérience de comptage avec des incertitudes d'une distribution normale jusqu'à obtenir plus que 10 les entrées.


2

Veuillez voir cette réponse en complément de la réponse de M. Rob Hyndman .

Afin de créer des tracés d'histogramme avec exactement les mêmes intervalles ou «binwidths» à l'aide de la règle Freedman – Diaconis avec R de base ou ggplot2package, nous pouvons utiliser l'une des valeurs de hist()function à savoir breaks. Supposons que nous voulions créer un histogramme à qsecpartir de mtcarsdonnées en utilisant la règle Freedman – Diaconis. En base R, nous utilisons

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

En attendant, dans le ggplot2paquet que nous utilisons

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

Ou bien

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

Tous génèrent des tracés d'histogramme avec exactement les mêmes intervalles et le même nombre de bacs que prévu.


-5

J'ai 600 observations pour Au g / t. La taille du bac 1 me donne ceci:entrez la description de l'image ici

La sélection automatique (omettre la plage de casiers) donne ceci:entrez la description de l'image ici

Les données ressemblent à O'K sur les premier et deuxième graphiques, comme s'il n'y avait aucun problème d'intégrité des données. Seule la taille de cellule 0,1 (g / t) répond à la question: les mesures étaient à la fois inexactes et imprécisesentrez la description de l'image ici

Mon jugement: 1. Il n'y a pas de technique de mesure sur Terre pour montrer la vraie valeur d'un phénomène naturel. Toutes les mesures sont approximatives, certaines étant proches de la valeur réelle. Cela dépend du plan d'échantillonnage, du calibrage, des qualifications humaines, etc. 2. C'est pourquoi la distribution est asymétrique plutôt que symétrique. 3. Néanmoins, la forme de la distribution devrait ressembler à une section "en forme de cloche", au moins approximativement. Une cloche à la fois (sauf s'il existe plusieurs environnements géologiques). 4.La distribution de fréquence avec la manipulation de la taille de la corbeille peut aider à révéler un modèle de précision et d'exactitude si les mesures avaient été effectuées. Il faut donc expérimenter la taille de la corbeille plutôt qu’une règle taillée dans la pierre.


2
Ceci est plus un commentaire qu'une réponse sauf si vous énoncez la morale. Je dirais que la morale est la suivante: toutes les règles sont des règles empiriques, certaines ont plus de bases statistiques que d’autres, mais la plupart des règles ne font peut-être pas ce que vous voulez si les distributions ont une asymétrie ou un kurtosis très élevé. Alors, utilisez votre jugement aussi.
Nick Cox

2
Vous avez ajouté des commentaires, mais je ne suis pas certain que ceux-ci apportent de nouveaux détails utiles au sujet. 1. est bien pour moi mais pas le problème ici. 2. ne découle pas de 1. car certaines distributions sont presque symétriques. 3. est douteux: il existe de nombreuses situations où des formes autres que des cloches sont attendues. 4. est également douteux, car la qualité des mesures initiales ne ressort souvent pas d'un histogramme, mais il vaut souvent mieux l'examiner en portant une attention particulière à la structure très fine d'une distribution.
Nick Cox

2. Symétriquement proche n'est pas symétrique. Vous ne pouvez pas être presque enceinte: enceinte ou non.
Sergo Cusiani

2
Bien sûr, mais la symétrie exacte des données est si rare que, si j'avais dit «symétrique», quelqu'un pourrait raisonnablement s'y opposer également. Il est très facile d'être presque symétrique; c'est pourquoi et comment nous avons des mesures d'asymétrie.
Nick Cox

1
Notez, mais votre commentaire était général et manquait du contexte que vous donnez maintenant. A mon tour, j'ai dit "douteux", pas "mal". Mon commentaire principal reste que votre réponse n'ajoute pas grand chose au fil sur la manière de choisir la taille du bac ou un nombre équivalent de bacs. Avoir un autre exemple dans lequel c'est difficile est une réponse à la question, pas vraiment une réponse.
Nick Cox
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.