Valutazione della distribuzione approssimativa dei dati basata su un istogramma


111

Supponiamo che io voglia vedere se i miei dati sono esponenziali in base a un istogramma (cioè inclinato a destra).

A seconda di come raggruppo o bin i dati, posso ottenere istogrammi selvaggiamente diversi.

Una serie di istogrammi farà sembrare che i dati siano esponenziali. Un altro set farà sembrare che i dati non siano esponenziali. Come posso definire in modo preciso le distribuzioni dagli istogrammi?


20
Perché non dimenticare gli istogrammi, perché i problemi che descrivi sono ben consolidati e considerano strumenti alternativi come grafici a qq e test di bontà di adattamento?
whuber

Risposte:


163

La difficoltà nell'uso degli istogrammi per inferire la forma

Mentre gli istogrammi sono spesso utili e talvolta utili, possono essere fuorvianti. Il loro aspetto può cambiare molto con i cambiamenti nelle posizioni dei confini del cestino.

Questo problema è noto da tempo *, anche se forse non così ampiamente come dovrebbe essere - raramente lo si vede menzionato nelle discussioni a livello elementare (anche se ci sono eccezioni).

* ad esempio, Paul Rubin [1] la dice così: " è risaputo che cambiare gli endpoint in un istogramma può alterare in modo significativo il suo aspetto ". .

Penso che sia un problema che dovrebbe essere discusso più ampiamente quando si introducono gli istogrammi. Darò alcuni esempi e discussioni.

Perché dovresti stare attento a fare affidamento su un singolo istogramma di un set di dati

Dai un'occhiata a questi quattro istogrammi:

Quattro istogrammi

Sono quattro istogrammi dall'aspetto molto diverso.

Se incolli i seguenti dati (sto usando R qui):

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)

Quindi puoi generarli tu stesso:

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)

Ora guarda questo grafico a strisce:

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 grafici a strisce

(Se non è ancora ovvio, vedi cosa succede quando sottrai i dati di Annie da ogni set head(matrix(x-Annie,nrow=40)):)

I dati sono stati semplicemente spostati a sinistra ogni volta di 0,25.

Eppure le impressioni che otteniamo dagli istogrammi - inclinazione destra, uniforme, inclinazione sinistra e bimodale - erano completamente diverse. La nostra impressione è stata interamente governata dalla posizione del primo bin-origine rispetto al minimo.

Quindi non solo 'esponenziale' vs 'non proprio esponenziale' ma 'inclinazione a destra' vs 'inclinazione a sinistra' o 'bimodale' vs 'uniforme' semplicemente spostando dove iniziano i tuoi contenitori.


Modifica: se si varia la larghezza del binario, è possibile ottenere cose del genere:

Skew vs bell

Sono le stesse 34 osservazioni in entrambi i casi, solo punti di interruzione diversi, uno con binwidth e l'altro con binwidth .0,810.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)

Nifty, eh?

Sì, quei dati sono stati generati deliberatamente per farlo ... ma la lezione è chiara: ciò che pensi di vedere in un istogramma potrebbe non essere un'impressione particolarmente accurata dei dati.

Cosa possiamo fare?

Gli istogrammi sono ampiamente utilizzati, spesso convenienti da ottenere e talvolta previsti. Cosa possiamo fare per evitare o mitigare tali problemi?

Come Nick Cox sottolinea in un commento a una domanda correlata : la regola empirica dovrebbe sempre essere che i dettagli robusti alle variazioni della larghezza del contenitore e dell'origine del contenitore siano verosimilmente veri; i dettagli fragili a tali sono probabilmente falsi o banali .

Almeno, dovresti sempre fare istogrammi su diverse binwidth o bin-origini diverse, o preferibilmente entrambi.

In alternativa, controlla una stima della densità del kernel con una larghezza di banda non troppo ampia.

Un altro approccio che riduce l'arbitrarietà degli istogrammi è rappresentato dagli istogrammi spostati medi ,

Istogramma spostato medio

(che è uno su quel set di dati più recente) ma se si fa questo sforzo, penso che si potrebbe anche usare una stima della densità del kernel.

Se sto realizzando un istogramma (li uso nonostante sia profondamente consapevole del problema), quasi sempre preferisco usare molti più contenitori di quelli che i valori predefiniti del programma tendono a dare e molto spesso mi piace fare diversi istogrammi con larghezza del cestino variabile (e, di tanto in tanto, origine). Se sono ragionevolmente coerenti nell'impressione, non è probabile che tu abbia questo problema, e se non sono coerenti, sai guardare più attentamente, forse provare una stima della densità del kernel, un CDF empirico, un diagramma QQ o qualcosa del genere simile.

Mentre gli istogrammi possono talvolta essere fuorvianti, i grafici a scatole sono ancora più inclini a tali problemi; con un diagramma a scatole non hai nemmeno la possibilità di dire "usa più contenitori". Vedi i quattro set di dati molto diversi in questo post , tutti con grafici a scatole identici e simmetrici, anche se uno dei set di dati è piuttosto distorto.

[1]: Rubin, Paul (2014) "Histogram Abuse!",
Blog post, O in un mondo OB , 23 gennaio 2014
link ... (link alternativo)


1
Praticamente ogni grafico di necessità raccoglie dati come questo. I bidoni sono abbastanza piccoli (la larghezza di un pixel lungo l'asse) che non importa?
AJMansfield,

1
@AJMansfield È un po 'come dire "ogni distribuzione è discreta" - mentre è letteralmente vera, oscura il problema rilevante. Un numero tipico di bin in uno stimatore di binn è notevolmente inferiore a un tipico numero di pixel ... e con qualsiasi grafica che faccia uso di anti-aliasing, il numero "effettivo" di pixel è maggiore (in quanto è potenzialmente possibile distinguere differenze di posizione tra i pixel)
Glen_b

2
Il problema fondamentale è che gli istogrammi dipendono fortemente dalle dimensioni del cestino. È difficile determinarlo a priori.

29

Un grafico di densità del kernel o logspline può essere un'opzione migliore rispetto a un istogramma. Ci sono ancora alcune opzioni che possono essere impostate con questi metodi, ma sono meno volubili degli istogrammi. Ci sono anche qqplot. Uno strumento utile per vedere se i dati sono abbastanza vicini a una distribuzione teorica è dettagliato in:

 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

La versione breve dell'idea (continua a leggere l'articolo per i dettagli) è che si generano dati dalla distribuzione nulla e si creano diversi grafici uno dei quali è i dati originali / reali e il resto è simulato dalla distribuzione teorica. Quindi presentare le trame a qualcuno (possibilmente te stesso) che non ha visto i dati originali e vedere se sono in grado di raccogliere i dati reali. Se non riescono a identificare i dati reali, allora non hai prove contro il null.

La vis.testfunzione nel pacchetto TeachingDemos per R aiuta a implementare una forma di questo test.

Ecco un breve esempio. Uno dei grafici seguenti è di 25 punti generati dalla distribuzione con 10 gradi di libertà, gli altri 8 sono generati da una distribuzione normale con la stessa media e varianza.

inserisci qui la descrizione dell'immagine

La vis.testfunzione ha creato questo grafico e quindi richiede all'utente di scegliere quale dei grafici ritengono diverso, quindi ripete il processo altre 2 volte (3 in totale).


@ScottStafford, ho aggiunto una copia della trama sopra. Questo utilizza qqplot ma la funzione genererà anche istogrammi o potrebbero essere programmati diagrammi di densità.
Greg Snow,

28

I diagrammi di distribuzione cumulativa [ MATLAB , R ] - in cui tracciate la frazione di valori di dati minori o uguali a un intervallo di valori - sono di gran lunga il modo migliore per esaminare le distribuzioni di dati empirici. Ecco, ad esempio, gli ECDF di questi dati , prodotti in R:

Trame ECDF di Alice, Brian, Chris e Zoe

Questo può essere generato con il seguente input R (con i dati sopra):

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")

Come puoi vedere, è visivamente ovvio che queste quattro distribuzioni sono semplicemente traduzioni l'una dell'altra. In generale, i vantaggi degli ECDF per la visualizzazione di distribuzioni empiriche di dati sono:

  1. Presentano semplicemente i dati nel momento in cui si verificano senza alcuna trasformazione oltre all'accumulazione, quindi non c'è possibilità di ingannare accidentalmente te stesso, come accade con gli istogrammi e le stime della densità del kernel, a causa del modo in cui stai elaborando i dati.
  2. Offrono un chiaro senso visivo della distribuzione dei dati poiché ogni punto è bufferizzato da tutti i dati prima e dopo di esso. Confrontalo con visualizzazioni di densità non cumulative, in cui l'accuratezza di ciascuna densità è naturalmente senza buffer, e quindi deve essere stimata mediante binning (istogrammi) o smoothing (KDE).
  3. Funzionano ugualmente bene indipendentemente dal fatto che i dati seguano una buona distribuzione parametrica, una certa miscela o una distribuzione non parametrica disordinata.

L'unico trucco è imparare a leggere correttamente gli ECDF: le aree poco profonde indicano una distribuzione scarsa, le aree ripide significano una distribuzione densa. Una volta che hai imparato a leggerli, tuttavia, sono uno strumento meraviglioso per esaminare le distribuzioni di dati empirici.


È disponibile della documentazione per leggere i CDF? ad esempio cosa succede se la mia distribuzione di cdf come te ha mostrato sopra, allora come possiamo classificarla \ indovinarla in chisquare, distribuzione normale o altra in base agli sguardi
stats101

2

Suggerimento: gli istogrammi in genere assegnano solo i dati dell'asse x che si sono verificati nel punto medio del cestino e omettono le misure dell'asse x della posizione di maggiore precisione. L'effetto che ciò ha sui derivati ​​dell'adattamento può essere piuttosto grande. Facciamo un esempio banale. Supponiamo di prendere la derivazione classica di un delta di Dirac ma di modificarlo in modo da iniziare con una distribuzione di Cauchy in una posizione mediana arbitraria con una scala finita (larghezza massima a metà massimo). Quindi prendiamo il limite mentre la scala va a zero. Se utilizziamo la definizione classica di un istogramma e non cambiamo le dimensioni del cestino, non cattureremo né la posizione né la scala. Se tuttavia, utilizziamo una posizione mediana all'interno di bin di anche di larghezza fissa, acquisiremo sempre la posizione, se non la scala quando la scala è piccola rispetto alla larghezza del cestino.

Per adattare i valori in cui i dati sono distorti, l'uso di punti medi bin fissi sposta l'asse x dell'intero segmento di curva in quella regione, che credo si riferisca alla domanda sopra.

histo divertenten=8in ciascuna categoria di istogrammi e li ha appena visualizzati come valore medio dell'asse x da ciascun cestino. Poiché ogni cestino dell'istogramma ha un valore di 8, le distribuzioni sembrano tutte uniformi e ho dovuto spostarle verticalmente per mostrarle. Il display non è la risposta corretta, ma non è privo di informazioni. Ci dice correttamente che esiste un offset dell'asse x tra i gruppi. Ci dice anche che la distribuzione effettiva sembra essere leggermente a forma di U. Perché? Si noti che la distanza tra i valori medi è più lontana nei centri e più vicina ai bordi. Quindi, per renderlo una rappresentazione migliore, dovremmo prendere in prestito interi campioni e quantità frazionarie di ciascun campione al contorno bin per rendere equidistanti tutti i valori medi dei bin sull'asse x. Risolvere questo problema e visualizzarlo correttamente richiederebbe un po 'di programmazione. Ma, potrebbe essere solo un modo per creare istogrammi in modo che visualizzino effettivamente i dati sottostanti in un formato logico. La forma cambierà comunque se cambiamo il numero totale di bin che coprono l'intervallo dei dati, ma l'idea è quella di risolvere alcuni dei problemi creati dal binning arbitrariamente.

PASSO 2 Quindi iniziamo a prendere in prestito tra i bidoni per cercare di rendere i mezzi più equamente distanziati.inserisci qui la descrizione dell'immagine

Ora possiamo vedere la forma degli istogrammi che iniziano a emergere. Ma la differenza tra i mezzi non è perfetta in quanto abbiamo solo un numero intero di campioni da scambiare tra i contenitori. Per rimuovere la restrizione dei valori interi sull'asse y e completare il processo di creazione di valori medi equidistanti dell'asse x, dobbiamo iniziare a condividere le frazioni di un campione tra i bin.

Passaggio 3: condivisione di valori e parti di valori. histo3

Come si può vedere, la condivisione di parti di un valore in un cestino può migliorare l'uniformità della distanza tra i valori medi. Sono riuscito a farlo con tre cifre decimali con i dati forniti. Tuttavia, non credo che la distanza tra i valori medi non sia esattamente uguale in generale, poiché la grossolanità dei dati non lo permetterà.

Si può, tuttavia, fare altre cose come usare la stima della densità del kernel .

Qui vediamo i dati di Annie come una densità del kernel limitata usando smoothings gaussiani di 0,1, 0,2 e 0,4. Gli altri soggetti avranno funzioni spostate dello stesso tipo, purché uno faccia la stessa cosa che ho fatto io, vale a dire utilizzare i limiti inferiore e superiore di ciascun set di dati. Quindi, questo non è più un istogramma, ma un PDF e ha lo stesso ruolo di un istogramma senza alcune verruche.

kernelsmooth

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.