Calcolo del numero ottimale di bin in un istogramma


80

Sono interessato a trovare un metodo il più ottimale possibile per determinare quanti contenitori dovrei usare in un istogramma. I miei dati dovrebbero variare al massimo da 30 a 350 oggetti, e in particolare sto cercando di applicare il limite (come il metodo di Otsu) in cui gli oggetti "buoni", di cui dovrei avere un numero minore e che dovrebbero essere più distanziati, sono separati da " oggetti "cattivi", che dovrebbero avere un valore più denso. Un valore concreto avrebbe un punteggio di 1-10 per ogni oggetto. Avevo avuto 5-10 oggetti con punteggio 6-10 e 20-25 oggetti con punteggio 1-4. Vorrei trovare un modello di binning dell'istogramma che generalmente consente a qualcosa come il metodo di Otsu di soglie gli oggetti con punteggio basso. Tuttavia, nell'implementazione di Otsu che ho visto, la dimensione del cestino era 256 e spesso ho molti meno punti dati di 256, che per me suggerisce che 256 non è un buon numero di bin. Con così pochi dati, quali approcci dovrei adottare per calcolare il numero di bin da utilizzare?


Penso che la regola di Sturges possa essere usata per n <200; dove n è il numero di osservazioni
venkasub,

Risposte:


95

La regola di Freedman-Diaconis è molto solida e funziona bene nella pratica. La larghezza del cestino è impostata su . Quindi il numero di bin è , dove è il numero di osservazioni, max è il valore massimo e min è il valore minimo.h=2×IQR×n1/3(maxmin)/hn

Nella base R, puoi usare:

hist(x, breaks="FD")

Per le altre librerie di stampa senza questa opzione (ad esempio, ggplot2), è possibile calcolare la larghezza di binario come:

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

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

2
@nico. L'impostazione predefinita in R è pause = "Sturges" che non sempre dà buoni risultati.
Rob Hyndman,

4
Come si calcola IQR?
Kurt Mueller,

1
@KurtMueller IQR significa intervallo interquartile. Cerca il 1 ° quartile e il 3 ° quartile e la differenza è IQR. IQR viene già fornito con R in modo da poterlo utilizzare.
xiaodai,

4
Se non sbaglio, la risposta dovrebbe esserenum_bins <- diff(range(x)) / (2 * IQR(x) / length(x)^(1/3))
Jasha,

1
nclass.FDnon esisteva nove anni fa.
Rob Hyndman,

18

Se si utilizzano troppi bin, l'istogramma in realtà non descrive molto bene i dati. Se hai troppi cassonetti, ottieni un aspetto a pettine rotto, che non dà nemmeno un senso alla distribuzione.

Una soluzione è creare un grafico che mostri ogni valore. O un diagramma a punti o una distribuzione di frequenza cumulativa, che non richiede bin.

Se si desidera creare una distribuzione di frequenza con bin equidistanti, è necessario decidere quanti bin (o la larghezza di ciascuno). La decisione dipende chiaramente dal numero di valori. Se hai molti valori, il tuo grafico avrà un aspetto migliore e sarà più informativo se hai molti bin. Questa pagina di Wikipedia elenca diversi metodi per decidere la larghezza del cestino dal numero di osservazioni. Il metodo più semplice è impostare il numero di bin uguale alla radice quadrata del numero di valori che stai binning.

Questa pagina di Hideaki Shimazaki spiega un metodo alternativo. È un po 'più complicato da calcolare, ma sembra fare un ottimo lavoro. La parte superiore della pagina è un'app Java. Scorri oltre per vedere la teoria e la spiegazione, quindi continua a scorrere per trovare collegamenti ai documenti che spiegano il metodo.


Il link alla pagina di Hideaki è interrotto. Non sono sicuro che sia la stessa cosa: toyoizumilab.brain.riken.jp/hideaki/res/histogram.html
DarenW

9

Forse l'articolo " Variazioni sull'istogramma " di Denby e Mallows sarà di interesse:

Questo nuovo display che chiamiamo "dhist" (per istogramma con taglio diagonale) conserva le caratteristiche desiderabili sia dell'hist di uguale larghezza che dell'hist di uguale area. Mostrerà contenitori alti e stretti come l'hist hist quando ci sono picchi nei dati e mostrerà valori anomali isolati proprio come il solito istogramma.

Dicono anche che il codice in R è disponibile su richiesta.


5

Non sono sicuro che questo valga come una buona pratica, ma tendo a produrre più di un istogramma con diverse larghezze del cestino e scegliere l'istogramma quale istogramma usare in base all'istogramma adatto all'interpretazione che sto cercando di comunicare meglio. Mentre questo introduce un po 'di obiettività nella scelta dell'istogramma, lo giustifico sulla base del fatto che ho avuto molto più tempo per comprendere i dati rispetto alla persona a cui sto dando l'istogramma, quindi ho bisogno di dare loro un messaggio molto conciso.

Sono anche un grande fan della presentazione di istogrammi con lo stesso numero di punti in ciascun contenitore piuttosto che la stessa larghezza del contenitore. Di solito trovo che questi rappresentino i dati molto meglio della larghezza costante del cestino anche se sono molto difficili da produrre.


1
scusate, avrei dovuto menzionare che devo farlo in modo automatizzato. l'opzione di "farlo più volte finché non trovo quello più adatto al mio scopo" non funzionerà per me. deve essere fatto a livello computazionale ...
Tony Stark,

4
Sono d'accordo - l'idea che esista una larghezza del contenitore "ottimale" è un'enorme ipotesi di semplificazione.
Hadley,

5

Hai visto il metodo Shimazaki-Shinomoto ?

Anche se sembra essere computazionalmente costoso, può darti buoni risultati. Vale la pena provare se il tempo di calcolo non è un tuo problema. Ci sono alcune implementazioni di questo metodo in java, MATLAB, ecc. Nel seguente link, che funziona abbastanza velocemente: interfaccia web


3

Se devo determinare il numero di bin a livello di codice, di solito inizio con un istogramma che ha molti più bin del necessario. Una volta riempito l'istogramma, quindi combino i bin fino a quando non ho abbastanza voci per bin per il metodo che sto usando, ad esempio se voglio modellare le incertezze di Poisson in un esperimento di conteggio con incertezze da una distribuzione normale fino a quando ho più di qualcosa come 10 inserimenti.


2

Si prega di vedere questa risposta come complementare alla risposta di Mr. Rob Hyndman .

Al fine di creare grafici di istogrammi con gli stessi identici intervalli o 'binwidths' usando la regola di Freedman-Diaconis con R o ggplot2pacchetto di base, possiamo usare uno dei valori della hist()funzione breaks. Supponiamo di voler creare un istogramma qsecdai mtcarsdati usando la regola di Freedman-Diaconis. Nella R base usiamo

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

Nel frattempo, nel ggplot2pacchetto usiamo

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

Oppure, in alternativa

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

Tutti generano grafici di istogrammi con gli stessi intervalli e il numero di bin esatti previsti.


-5

Ho 600 osservazioni per Au g / t. La dimensione del cestino 1 mi dà questo:inserisci qui la descrizione dell'immagine

La selezione automatica (ometti l'intervallo del cestino) fornisce questo:inserisci qui la descrizione dell'immagine

I dati sembrano O'K sul primo e sul secondo grafico, come se non ci fossero problemi con l'integrità dei dati. Solo la dimensione del contenitore 0,1 (g / t) risponde alla domanda: le misurazioni erano sia imprecise che impreciseinserisci qui la descrizione dell'immagine

Il mio giudizio: 1. Non esiste una tecnica di misurazione sulla Terra per mostrare il vero valore del fenomeno naturale. Tutte le misurazioni sono approssimative, alcune vicine al valore reale. Dipende dal design del campionamento, dalla calibrazione, dalle qualifiche umane, ecc. 2. Ecco perché la distribuzione è distorta piuttosto che simmetrica. 3. Tuttavia, la forma della distribuzione dovrebbe assomigliare ad una sezione "a campana", almeno approssimativamente. Una campana alla volta (a meno che non ci siano diversi ambienti geologici). 4.La distribuzione della frequenza con la manipolazione delle dimensioni del contenitore può aiutare a rivelare lo schema di quanto siano state eseguite le misurazioni in modo accurato e preciso. In modo che uno ha bisogno di un pickup sperimentale della dimensione del cestino piuttosto che una regola tagliata sulla pietra.


2
Questo è più un commento che una risposta, a meno che non si spieghi la morale. Direi che la morale è questa: tutte le regole sono regole empiriche, alcune hanno più basi statistiche di altre, ma la maggior parte delle regole potrebbe non fare ciò che desideri se le distribuzioni hanno un'inclinazione o una curtosi molto alte. Quindi, usa anche il tuo giudizio.
Nick Cox,

2
Hai aggiunto commenti, ma non sono chiaro che eventuali contributi apportino utili nuovi dettagli alla discussione. 1. va bene per me, ma non qui il problema. 2. non segue da 1. poiché alcune distribuzioni sono quasi simmetriche. 3. è dubbio: ci sono molte situazioni in cui sono previste forme diverse dalle campane. 4. è anche dubbio poiché la qualità delle misurazioni originali spesso non è evidente da nessun istogramma, ma spesso è meglio esaminarla con attenzione alla struttura molto fine di una distribuzione.
Nick Cox,

2. Quasi simmetrico non è simmetrico. Non puoi essere quasi incinta: incinta o no.
Sergo Cusiani,

2
Certo, ma la simmetria esatta nei dati è così rara che se avessi detto "simmetrico" qualcuno potrebbe ragionevolmente obiettare anche a quello. È molto facile essere quasi simmetrici; questo è il motivo e il modo in cui abbiamo misure di asimmetria.
Nick Cox,

1
Notato, ma il tuo commento era generale e mancava del contesto che ora dai. A mia volta ho detto "dubbia" non "sbagliata". Il mio commento principale rimane che la tua risposta non aggiunge molto al thread su come scegliere la dimensione del cestino o il numero equivalente di bin. Avere un altro esempio in cui è difficile è un giro sulla domanda, non proprio una risposta.
Nick Cox,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.