Boxplot-Äquivalent für Heavy-Tailed-Distributionen?

13

Bei annähernd normal verteilten Daten sind Boxplots eine großartige Möglichkeit, den Median und die Verbreitung der Daten sowie das Vorhandensein von Ausreißern schnell zu visualisieren.

Bei stärker schwanzförmigen Verteilungen werden jedoch viele Punkte als Ausreißer angezeigt, da Ausreißer als außerhalb des festgelegten Faktors des IQR liegend definiert sind, und dies passiert natürlich viel häufiger bei stark schwanzförmigen Verteilungen.

Was verwenden die Leute, um diese Art von Daten zu visualisieren? Gibt es etwas passenderes? Ich benutze ggplot auf R, wenn das wichtig ist.

static_rtti
quelle
1
Proben aus stark schwanzgebundenen Distributionen weisen im Vergleich zu den mittleren 50% tendenziell eine große Bandbreite auf. Was willst du dagegen tun?
Glen_b
7
Mehrere relevante Themen bereits zB stats.stackexchange.com/questions/13086/... Kurze Antwort enthält erste dann verwandeln! Histogramme; Quantil-Plots verschiedener Art; Streifenplots verschiedener Art.
Nick Cox
@ Glen_b: Das ist genau mein Problem, es macht die Boxplots unlesbar.
static_rtti
2
Die Sache ist, gibt es mehr als eine Sache , die vielleicht tun ... also was Sie wollen , es zu tun?
Glen_b
2
Vielleicht ist es erwähnenswert, dass der größte Teil der statistischen Welt Boxplots aufgrund ihrer Benennung und (erneuten) Einführung durch John Tukey in den 1970er Jahren kennt. (Sie wurden einige Jahrzehnte zuvor in der Klimatologie und Geographie verwendet.) In den späteren Kapiteln seines 1977 erschienenen Buches über explorative Datenanalyse (Reading, MA: Addison-Wesley) hat er jedoch ganz andere Vorstellungen zum Umgang mit schwerfälligen Verteilungen. Es scheint, als hätte sich keiner durchgesetzt. Aber Quantil-Diagramme sind in ähnlichem Sinne.
Nick Cox

Antworten:

8

Das zentrale Problem der OP zu haben scheint , ist , dass sie sehr schwere tailed Daten haben - und ich glaube nicht , die meisten der vorliegenden Antworten tatsächlich mit diesem Thema beschäftigen überhaupt , so dass ich auf eine Antwort meinen vorherigen Kommentar bin zu fördern.

Wenn Sie bei Boxplots bleiben wollten, sind nachfolgend einige Optionen aufgeführt. Ich habe einige Daten in R erstellt, die das Grundproblem zeigen:

 set.seed(seed=7513870)
 x <- rcauchy(80)
 boxplot(x,horizontal=TRUE,boxwex=.7)

unbefriedigendes Boxplot

Die mittlere Hälfte der Daten ist auf einen winzigen Streifen von einigen mm Breite reduziert. Das gleiche Problem betrifft die meisten anderen Vorschläge - einschließlich QQ-Diagramme, Streifendiagramme, Bienenstock- / Bienenwarmdiagramme und Geigendiagramme.

Nun einige mögliche Lösungen:

1) Umwandlung ,

Wenn Protokolle oder Umkehrungen ein lesbares Boxplot erzeugen, sind sie möglicherweise eine sehr gute Idee, und der ursprüngliche Maßstab kann weiterhin auf der Achse angezeigt werden.

Das große Problem ist, dass es manchmal keine "intuitive" Transformation gibt. Es gibt ein kleineres Problem, dass sich Quantile selbst zwar gut genug mit monotonen Transformationen übersetzen lassen, die Zäune jedoch nicht. Wenn Sie nur die transformierten Daten boxplotten (wie hier), haben die Whisker andere x-Werte als im ursprünglichen Plot.

Boxplot transformierter Werte

Hier habe ich eine inverse hyperbolische Sünde (asinh) benutzt; Es ist logarithmisch in den Schwänzen und ähnlich wie linear nahe Null, aber die Leute empfinden es im Allgemeinen nicht als intuitive Transformation. Im Allgemeinen würde ich diese Option nicht empfehlen, es sei denn, eine ziemlich intuitive Transformation wie log ist offensichtlich. Code dafür:

xlab <- c(-60,-20,-10,-5,-2,-1,0,1,2,5,10,20,40)
boxplot(asinh(x),horizontal=TRUE,boxwex=.7,axes=FALSE,frame.plot=TRUE)
axis(1,at=asinh(xlab),labels=xlab)

2) Skalenbrüche - nehmen Sie extreme Ausreißer und komprimieren Sie sie in engen Fenstern an jedem Ende mit einer viel stärker komprimierten Skala als in der Mitte. Ich empfehle dringend eine vollständige Pause über die gesamte Skala, wenn Sie dies tun.

Boxplot mit Skalenbrüchen

opar <- par()
layout(matrix(1:3,nr=1,nc=3),heights=c(1,1,1),widths=c(1,6,1))
par(oma = c(5,4,0,0) + 0.1,mar = c(0,0,1,1) + 0.1)
stripchart(x[x< -4],pch=1,cex=1,xlim=c(-80,-5))
boxplot(x[abs(x)<4],horizontal=TRUE,ylim=c(-4,4),at=0,boxwex=.7,cex=1)
stripchart(x[x> 4],pch=1,cex=1,xlim=c(5,80))
par(opar)

3) Trimmen extremer Ausreißer (was ich normalerweise nicht empfehlen würde, ohne dies sehr deutlich anzugeben, aber es sieht aus wie das nächste Diagramm, ohne die "<5" und "2>" an beiden Enden) und

4) Was ich Extrem-Ausreißer "Pfeile" nennen werde - ähnlich wie beim Trimmen, aber mit der Anzahl der getrimmten Werte, die an jedem Ende angezeigt werden

Boxplot mit Anzahl der Extremwerte und Pfeilen, die auf diese zeigen

xout <- boxplot(x,range=3,horizontal=TRUE)$out
xin <- x[!(x %in% xout)]
noutl <- sum(xout<median(x))
nouth <- sum(xout>median(x))
boxplot(xin,horizontal=TRUE,ylim=c(min(xin)*1.15,max(xin)*1.15))
text(x=max(xin)*1.17,y=1,labels=paste0(as.character(nouth)," >"))
text(x=min(xin)*1.17,y=1,labels=paste0("< ",as.character(noutl)))
Glen_b - Setzen Sie Monica wieder ein
quelle
Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu schreiben! Dies ist genau die Art von Antwort, die ich erwartet hatte. Jetzt muss ich nur noch herausfinden, wie ich diese Plots mit R implementieren kann :)
static_rtti
1
Ein Code ist jetzt da. Ich habe keinen Code für 3) angegeben, weil es eine einfachere Version von 4) ist; Sie sollten in der Lage sein, es zu bekommen, indem Sie Linien daraus herausschneiden.
Glen_b
Übrigens funktionieren die meisten dieser Ideen auch mit den anderen hier vorgeschlagenen großartigen Darstellungen - zitternden Stripcharts und Plots für Bienenwarm / Bienenstock und Violine und so weiter.
Glen_b
Danke noch einmal. Ich bin mir sicher, dass diese Antwort einigen Leuten nützlich sein wird.
static_rtti
Ich stimme zu, dies spricht die Frage viel besser an als meine Antwort. Gutes Zeug.
Ton
4

Persönlich benutze ich gerne einen Stripplot mit Jitter, um zumindest ein Gefühl für die Daten zu bekommen. Die Grafik unten ist mit Gitter in R (leider nicht ggplot2). Ich mag diese Handlungen, weil sie sehr einfach zu interpretieren sind. Wie Sie sagen, ist ein Grund dafür, dass es keine Transformation gibt.

df <- data.frame(y1 = c(rnorm(100),-4:4), y2 = c(rnorm(100),-5:3), y3 = c(rnorm(100),-3:5))
df2 <- stack(df)
library(lattice)
stripplot(df2$values ~ df2$ind, jitter=T)

Bildbeschreibung hier eingeben

Das Bienenwarm- Paket bietet eine großartige Alternative zu Stripplot (danke an @January für den Vorschlag).

beeswarm(df2$values ~ df2$ind)

Bildbeschreibung hier eingeben

Da Ihre Daten ungefähr normal verteilt sind, können Sie auch ein qqplot ausprobieren, in diesem Fall qqnorm .

par(mfrow=c(1,3))
for(i in 1:3) { qqnorm(df[,i]); abline(c(0,0),1,col="red") }

Bildbeschreibung hier eingeben

TooTone
quelle
2
Ich mag auch Stripplots, aber die Frage ist explizit, was mit Heavy-Tailed-Distributionen zu tun ist.
Nick Cox
1
Der Punkt ist nur, dass der Ratschlag, zB qqnorm zu verwenden, nicht der Frage entspricht. Andere Arten von Quantil-Quantil-Plots könnten, wie ich bereits erwähnte, eine sehr gute Idee sein.
Nick Cox
1
Noch besser als Stripplots aus R sind die Plots aus dem beeswarmPaket.
Januar
1
@Januar Ja, das ist ziemlich cool. Ich füge es meiner Antwort hinzu (wenn Sie etwas dagegen haben, sagen Sie es bitte).
TooTone
1
Meine Antwort wurde unter stats.stackexchange.com/questions/13086 veröffentlicht , was ich als (nicht konsequenterweise engere) Version dieser Frage ansehe . Ich fasste es wie folgt zusammen: "Ändern Sie nicht den Boxplot-Algorithmus: Drücken Sie stattdessen die Daten erneut aus." Das Problem, auf das das "Angepasste" in dieser Frage hindeutet, wird durch Standardtechniken der explorativen Datenanalyse behoben, um hilfreiche Wiederausdrücke von Variablen zu finden.
Whuber
2

Sie können sich an Boxplots halten. Es gibt verschiedene Möglichkeiten, Whisker zu definieren. Je nach Schwanzdicke, Anzahl der Proben und Toleranz gegenüber Ausreißern können Sie zwei mehr oder weniger extreme Quantile auswählen. Aufgrund Ihres Problems würde ich Whisker vermeiden, die durch den IQR definiert wurden.
Es sei denn, Sie möchten Ihre Daten transformieren, was in diesem Fall das Verständnis erschwert.

Quarz
quelle
1
Der letzte Satz ist zu unqualifiziert, um kommentarlos zu bestehen. Die Transformation ist kein Allheilmittel, aber die Transformation stark verzerrter Daten macht das Verständnis nicht einfacher. Wenn alle Daten positiv sind, können Sie zumindest versuchen, eine Wurzel-, logarithmische oder reziproke Skala zu verwenden. Wenn es wirklich nicht hilft, dann zieh dich zurück.
Nick Cox
Auf welche Schwierigkeiten beim Verständnis verzerrter Daten beziehen Sie sich? Jene mit IQR-abhängigen Whiskern? Das ist auch bei leichten Schwänzen ein Problem. Und reden wir nicht über schwere Schwänze, unabhängig von der Schiefe? Transformationen mit blitzschnellen Schwänzen ergeben sicherlich regelmäßigere Boxplots, fügen jedoch eine Interpretationsebene hinzu, die Verständnis gegen Komfort eintauscht. Aber man kann das ein Feature nennen, wenn er möchte.
Quartz
2
Transformationen helfen oft: Das ist mein Fazit. Eine statistische Person, die nicht gelernt hat, dass viele Dinge logarithmisch klarer aussehen (insbesondere), verpasst ernsthaft einen der ältesten und effektivsten Tricks, die es gibt. Sie schienen das zu leugnen; Ich hoffe, ich habe dich falsch verstanden.
Nick Cox
1
Ich stimme dir nicht zu. Ich transformiere ständig stark verzerrte Daten und meine Erfahrung ist, dass dies weit mehr als eine Frage der Ästhetik ist. Das funktioniert oft. Ein anonymer Statistiker hat vor einiger Zeit geschrieben, dass das lognormal normaler ist als das normale. Er / sie war ein bisschen scherzhaft, aber es gibt auch eine wichtige Wahrheit. (Nicht, dass viele andere Distributionen möglicherweise nicht besser passen.)
Nick Cox
1
Ich denke, ich muss hier anhalten, um andere beurteilen zu lassen, aber meine Ansicht ist nicht exzentrisch. Transformation wird als eine Möglichkeit besprochen, zB unter stats.stackexchange.com/questions/13086/…. Ich schlage vor, dass Sie dort antworten oder kommentieren, um zu erklären, warum dieser Rat nicht stichhaltig ist.
Nick Cox
0

Ich gehe davon aus, dass es bei dieser Frage um das Verständnis von Daten geht (im Gegensatz zum „Verwalten“ von
Daten ). Wenn die Daten überlastet und / oder multimodal sind, finde ich diese „Ebenen“ von ggplot2 sehr nützlich für den Zweck: geom_violinund geom_jitter.

6th
quelle
3
Können Sie zusammenfassen, warum Geigen-Diagramme und / oder verwackelte Punkte bei Verteilungen mit schwerem Schwanz nützlich sind?
Chl