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:
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)
(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:
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 ,
(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)