Abschätzung der ungefähren Verteilung von Daten anhand eines Histogramms


111

Angenommen, ich möchte anhand eines Histogramms sehen, ob meine Daten exponentiell sind (dh nach rechts verschoben sind).

Abhängig davon, wie ich die Daten gruppiere oder bin, kann es zu sehr unterschiedlichen Histogrammen kommen.

Ein Satz von Histogrammen wird den Anschein erwecken, dass die Daten exponentiell sind. Ein anderer Satz wird den Anschein erwecken, dass Daten nicht exponentiell sind. Wie kann ich Verteilungen anhand von Histogrammen genau definieren?


20
Warum vergessen Sie nicht die Histogramme, da die von Ihnen beschriebenen Probleme gut bekannt sind und Sie alternative Tools in Betracht ziehen, wie z.
Whuber

Antworten:


163

Die Schwierigkeit bei der Verwendung von Histogrammen, um die Form abzuleiten

Während Histogramme oft nützlich und nützlich sind, können sie irreführend sein. Ihr Aussehen kann sich sehr stark ändern, wenn sich die Positionen der Behältergrenzen ändern.

Dieses Problem ist seit langem bekannt *, aber vielleicht nicht so weit verbreitet wie es sein sollte - es wird in Diskussionen auf Elementarebene nur selten erwähnt (obwohl es Ausnahmen gibt).

* Paul Rubin [1] hat es beispielsweise so ausgedrückt: " Es ist allgemein bekannt, dass das Ändern der Endpunkte in einem Histogramm das Erscheinungsbild erheblich verändern kann ." .

Ich denke, es ist ein Thema, das bei der Einführung von Histogrammen ausführlicher erörtert werden sollte. Ich werde einige Beispiele und Diskussionen geben.

Warum Sie sich nicht auf ein einzelnes Histogramm eines Datensatzes verlassen sollten

Schauen Sie sich diese vier Histogramme an:

Vier Histogramme

Das sind vier sehr unterschiedlich aussehende Histogramme.

Wenn Sie die folgenden Daten einfügen (ich verwende hier R):

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)

Dann können Sie sie selbst generieren:

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)

Schauen Sie sich nun dieses Streifendiagramm an:

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 Streifendiagramme

(Wenn es immer noch nicht klar ist, was passiert , wenn Sie Annies Daten aus jedem Satz subtrahieren: head(matrix(x-Annie,nrow=40)))

Die Daten wurden einfach jedes Mal um 0,25 nach links verschoben.

Die Eindrücke, die wir von den Histogrammen erhalten - rechte Neigung, gleichmäßige Neigung, linke Neigung und bimodale Neigung - waren jedoch völlig unterschiedlich. Unser Eindruck war gänzlich von der Position des ersten Binursprungs im Verhältnis zum Minimum abhängig.

Also nicht nur 'exponentiell' gegen 'nicht-wirklich-exponentiell', sondern 'rechtes Versatz' gegen 'linkes Versatz' oder 'bimodal' gegen 'Uniform', indem Sie sich einfach dorthin bewegen, wo Ihre Behälter beginnen.


Bearbeiten: Wenn Sie die binwidth variieren, können Sie Sachen wie diese passieren:

Versatz gegen Glocke

Das sind in beiden Fällen die gleichen 34 Beobachtungen, nur unterschiedliche Haltepunkte, einer mit der Binwidth und der andere mit der 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, was?

Ja, diese Daten wurden absichtlich erstellt, um dies zu tun ... aber die Lektion ist klar - was Sie in einem Histogramm zu sehen glauben, ist möglicherweise kein besonders genauer Eindruck der Daten.

Was können wir tun?

Histogramme sind weit verbreitet, häufig leicht zu erhalten und manchmal zu erwarten. Was können wir tun, um solche Probleme zu vermeiden oder zu lindern?

Wie Nick Cox in einem Kommentar zu einer verwandten Frage ausführt : Die Faustregel sollte immer lauten, dass Details, die gegenüber Variationen der Behälterbreite und des Behälterursprungs robust sind, wahrscheinlich echt sind. Details, die für solche fragil sind, sind wahrscheinlich falsch oder trivial .

Zumindest sollten Sie immer Histogramme mit mehreren verschiedenen Binbreiten oder Binursprüngen oder vorzugsweise mit beiden erstellen.

Alternativ können Sie eine Schätzung der Kerneldichte bei nicht zu großer Bandbreite überprüfen.

Ein anderer Ansatz, der die Beliebigkeit von Histogrammen verringert, sind gemittelte verschobene Histogramme .

Durchschnittliches verschobenes Histogramm

(das ist eines der aktuellsten Daten), aber wenn Sie sich darum bemühen, können Sie auch eine Schätzung der Kerneldichte verwenden.

Wenn ich ein Histogramm mache (ich benutze sie, obwohl ich mir des Problems sehr bewusst bin), bevorzuge ich fast immer die Verwendung von wesentlich mehr Behältern als es die typischen Standardeinstellungen des Programms bieten, und sehr oft mache ich gerne mehrere Histogramme mit unterschiedlicher Behälterbreite (und gelegentlich Herkunft). Wenn die Impressionen einigermaßen konsistent sind, ist es unwahrscheinlich, dass Sie dieses Problem haben. Wenn sie nicht konsistent sind, sollten Sie genauer hinschauen. Versuchen Sie es mit einer Schätzung der Kerneldichte, einer empirischen CDF, einem QQ-Diagramm oder etwas anderem ähnlich.

Während Histogramme manchmal irreführend sein können, sind Boxplots für solche Probleme noch anfälliger. Mit einem Boxplot können Sie nicht einmal sagen, dass Sie mehr Behälter verwenden möchten. Sehen Sie sich die vier sehr unterschiedlichen Datensätze in diesem Beitrag an , alle mit identischen, symmetrischen Boxplots, obwohl einer der Datensätze ziemlich schief ist.

[1]: Rubin, Paul (2014) "Histogram Abuse!",
Blogbeitrag ODER in einer OB-Welt , 23. Januar 2014
Link ... (alternativer Link)


1
Praktisch jedes Diagramm der Notwendigkeit fasst solche Daten ab. Die Fächer sind gerade klein genug (die Breite eines Pixels entlang der Achse), dass es keine Rolle spielt?
AJMansfield

1
@AJMansfield Dies ist ein bisschen so, als würde man sagen "Jede Distribution ist diskret" - obwohl dies buchstäblich zutrifft, verdeckt es das relevante Problem. Eine typische Anzahl von Bins in einem Binned Estimator ist erheblich kleiner als eine typische Anzahl von Pixeln ... und bei allen Grafiken, die Anti-Aliasing verwenden, ist die "effektive" Anzahl von Pixeln größer (da möglicherweise eine Unterscheidung möglich ist) Positionsunterschiede zwischen Pixeln)
Glen_b

2
Das grundlegende Problem ist, dass Histogramme stark von der Behältergröße abhängen. Es ist schwierig, dies a priori zu bestimmen.

29

Eine Kerneldichte- oder Logspline-Darstellung ist möglicherweise eine bessere Option als ein Histogramm. Es gibt noch einige Optionen, die mit diesen Methoden festgelegt werden können, aber sie sind weniger launisch als Histogramme. Es gibt auch qqplots. Ein nützliches Tool, um festzustellen, ob die Daten nah genug an einer theoretischen Verteilung liegen, finden Sie 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

Die Kurzversion der Idee (lesen Sie noch das Papier für Details) ist, dass Sie Daten aus der Nullverteilung generieren und mehrere Diagramme erstellen, von denen eines die Original- / Realdaten sind und der Rest aus der theoretischen Verteilung simuliert wird. Anschließend präsentieren Sie die Diagramme jemandem (möglicherweise sich selbst), der die Originaldaten nicht gesehen hat, und prüfen, ob er die tatsächlichen Daten heraussuchen kann. Wenn sie die realen Daten nicht identifizieren können, haben Sie keine Beweise gegen die Null.

Die vis.testFunktion im TeachingDemos-Paket für R hilft beim Implementieren einer Form dieses Tests.

Hier ist ein kurzes Beispiel. Eine der folgenden Darstellungen besteht aus 25 Punkten, die bei einer Verteilung mit 10 Freiheitsgraden generiert wurden, die anderen 8 werden aus einer Normalverteilung mit dem gleichen Mittelwert und der gleichen Varianz generiert.

Bildbeschreibung hier eingeben

Die vis.testFunktion hat dieses Diagramm erstellt und fordert den Benutzer auf, auszuwählen, welches der Diagramme seiner Meinung nach unterschiedlich ist, und wiederholt den Vorgang dann noch zweimal (insgesamt 3).


@ScottStafford, ich habe eine Kopie der obigen Handlung hinzugefügt. Dieser verwendet qqplots, aber die Funktion erzeugt auch Histogramme oder Dichtediagramme können programmiert werden.
Greg Snow

28

Kumulative Verteilungsdiagramme [ MATLAB , R ] - bei denen Sie den Bruchteil von Datenwerten darstellen, der kleiner oder gleich einem Wertebereich ist - sind bei weitem die beste Methode, um Verteilungen empirischer Daten zu betrachten. Hier sind zum Beispiel die ECDFs dieser Daten , die in R erstellt wurden:

Die ECDF-Pläne von Alice, Brian, Chris und Zoe

Dies kann mit dem folgenden R-Eingang (mit den obigen Daten) erzeugt werden:

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

Wie Sie sehen, ist es visuell offensichtlich, dass diese vier Distributionen nur Übersetzungen voneinander sind. Die Vorteile von ECDFs für die Visualisierung empirischer Datenverteilungen sind im Allgemeinen:

  1. Sie stellen die Daten einfach so dar, wie sie tatsächlich ohne andere Transformation als Akkumulation auftreten, sodass es keine Möglichkeit gibt, sich selbst versehentlich zu täuschen, wie dies bei Histogrammen und Kerneldichteschätzungen der Fall ist, da Sie die Daten verarbeiten.
  2. Sie geben einen klaren visuellen Eindruck von der Verteilung der Daten, da jeder Punkt von allen Daten davor und danach gepuffert wird. Vergleichen Sie dies mit nicht kumulativen Dichtevisualisierungen, bei denen die Genauigkeit jeder Dichte von Natur aus ungepuffert ist und daher entweder durch Binning (Histogramme) oder Glätten (KDEs) geschätzt werden muss.
  3. Sie funktionieren gleichermaßen gut, unabhängig davon, ob die Daten einer guten parametrischen Verteilung, einer Mischung oder einer chaotischen nicht parametrischen Verteilung folgen.

Der einzige Trick besteht darin, zu lernen, wie man ECDFs richtig liest: Flache geneigte Bereiche bedeuten eine spärliche Verteilung, steile geneigte Bereiche bedeuten eine dichte Verteilung. Sobald Sie die Möglichkeit haben, sie zu lesen, sind sie ein hervorragendes Werkzeug, um die Verteilung empirischer Daten zu untersuchen.


Gibt es eine Dokumentation zum Lesen von CDFs? Beispiel: Was ist, wenn meine PDF-Distribution, wie Sie sie oben gezeigt haben, wie können wir \ guesstimate nach Aussehen in eine chisquare, normale oder andere Distribution
einteilen

2

Vorschlag: Histogramme weisen in der Regel nur die X-Achsendaten zu, die in der Mitte des Bin aufgetreten sind, und lassen die X-Achsendaten für Orte mit größerer Genauigkeit weg. Der Effekt, den dies auf die Anpassungsableitungen hat, kann ziemlich groß sein. Nehmen wir ein einfaches Beispiel. Nehmen wir an, wir nehmen die klassische Ableitung eines Dirac-Deltas, modifizieren sie jedoch so, dass wir mit einer Cauchy-Verteilung an einer beliebigen mittleren Stelle mit einer endlichen Skala (Halbmaximum in voller Breite) beginnen. Dann nehmen wir die Grenze, wenn die Skala auf Null geht. Wenn wir die klassische Definition eines Histogramms verwenden und die Behältergröße nicht ändern, erfassen wir weder die Position noch den Maßstab. Wenn wir jedoch eine mittlere Position innerhalb von Behältern mit gerader fester Breite verwenden, erfassen wir immer die Position und nicht den Maßstab, wenn der Maßstab im Verhältnis zur Behälterbreite klein ist.

Wenn Sie Werte anpassen, bei denen die Daten schief sind, wird durch die Verwendung fester Bin-Mittelpunkte die x-Achse des gesamten Kurvensegments in diesem Bereich verschoben, von dem ich glaube, dass er sich auf die obige Frage bezieht.

SCHRITT 1 lustiges histoHier ist eine fast Lösung. Ich haben=8in jeder Histogrammkategorie und zeigte diese nur als den mittleren x-Achsenwert von jedem Fach an. Da jedes Histogrammfach einen Wert von 8 hat, sehen alle Verteilungen gleich aus, und ich musste sie vertikal versetzen, um sie anzuzeigen. Das Display ist nicht die richtige Antwort, aber es ist nicht ohne Informationen. Es sagt uns richtig, dass es einen x-Achsen-Versatz zwischen Gruppen gibt. Es sagt uns auch, dass die tatsächliche Verteilung leicht U-förmig zu sein scheint. Warum? Beachten Sie, dass der Abstand zwischen den Mittelwerten in der Mitte weiter auseinander und an den Rändern enger ist. Um dies besser darzustellen, sollten wir also ganze Samples und Teilmengen jedes Bin-Boundary-Samples ausleihen, um alle mittleren Bin-Werte auf der x-Achse in gleichem Abstand zueinander zu halten. Um dies zu beheben und richtig anzuzeigen, ist ein wenig Programmierung erforderlich. Aber, Es kann nur eine Möglichkeit sein, Histogramme zu erstellen, damit die zugrunde liegenden Daten in einem logischen Format angezeigt werden. Die Form ändert sich immer noch, wenn wir die Gesamtzahl der Bins ändern, die den Datenbereich abdecken. Die Idee ist jedoch, einige der Probleme, die durch das Binning entstehen, willkürlich zu lösen.

SCHRITT 2 Beginnen wir also mit dem Ausleihen zwischen den Behältern, um zu versuchen, die Mittel gleichmäßiger zu verteilen.Bildbeschreibung hier eingeben

Jetzt können wir sehen, wie sich die Form der Histogramme abzeichnet. Der Unterschied zwischen den Mitteln ist jedoch nicht perfekt, da wir nur eine ganze Anzahl von Proben haben, die zwischen den Behältern ausgetauscht werden können. Um die Beschränkung der Ganzzahlwerte auf der y-Achse aufzuheben und die Mittelwerte auf der x-Achse in gleichen Abständen zu berechnen, müssen wir damit beginnen, Bruchteile einer Stichprobe zwischen Bins zu teilen.

Schritt 3 Das Teilen von Werten und Teilen von Werten. histo3

Wie man sieht, kann das Teilen von Teilen eines Wertes an einer Bin-Grenze die Gleichförmigkeit des Abstands zwischen Mittelwerten verbessern. Ich habe es mit den angegebenen Daten auf drei Dezimalstellen geschafft. Allerdings kann man, glaube ich, den Abstand zwischen den Mittelwerten im Allgemeinen nicht exakt gleich machen, da die Grobheit der Daten dies nicht zulässt.

Man kann jedoch auch andere Dinge tun, beispielsweise die Schätzung der Kerneldichte .

Hier sehen wir Annies Daten als begrenzte Kerndichte unter Verwendung von Gaußschen Glättungen von 0,1, 0,2 und 0,4. Die anderen Subjekte haben verschobene Funktionen des gleichen Typs, vorausgesetzt, man macht dasselbe wie ich, nämlich die Unter- und Obergrenze jedes Datensatzes. Dies ist also kein Histogramm mehr, sondern ein PDF, und es hat dieselbe Funktion wie ein Histogramm ohne einige Warzen.

kernelglatt

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.