Wie würde ich Ausreißer im ggplot2-Boxplot ignorieren? Ich möchte nicht einfach, dass sie verschwinden (dh outlier.size = 0), aber ich möchte, dass sie so ignoriert werden, dass die y-Achse so skaliert wird, dass das 1./3. Perzentil angezeigt wird. Meine Ausreißer bewirken, dass die "Box" so klein wird, dass sie praktisch eine Linie ist. Gibt es einige Techniken, um damit umzugehen?
Bearbeiten Hier ist ein Beispiel:
y = c(.01, .02, .03, .04, .05, .06, .07, .08, .09, .5, -.6)
qplot(1, y, geom="boxplot")
fivenum()
Verwenden Sie einfach die Daten, um zu extrahieren, was IIRC für die oberen und unteren Scharniere von Boxplots verwendet wird, und verwenden Sie diese Ausgabe in demscale_y_continuous()
Aufruf, den @Ritchie angezeigt hat. Dies kann mit den Tools R und ggplot sehr einfach automatisiert werden. Wenn Sie auch die Whisker einbeziehen müssen, ziehen Sie die Verwendungboxplot.stats()
in Betracht , um die oberen und unteren Grenzwerte für die Whisker zu ermitteln, und verwenden Sie dann inscale_y_continuous()
.Antworten:
Hier ist eine Lösung mit boxplot.stats
quelle
ylim <- c(-0.1, 1000) * 1.05
gibt[1] 0.105 1050
. Um gleiche Grenzen um den Mittelwert zu erhalten, den Sie verwenden könntenylim + c(-0.05, 0.05) * diff(ylim) / 2
. Meiner Meinung nach schöner.facet_grid()
. Dann haben Sie mehrere Boxplots anstelle von einem. Somit bekommen Sie nicht die richtigen Grenzen.Verwenden Sie
geom_boxplot(outlier.shape = NA)
diese Option , um die Ausreißer nicht anzuzeigen und die Achsengrenzenscale_y_continuous(limits = c(lower, upper))
zu ändern.Ein Beispiel.
Wie Ramnath in seiner Antwort (und auch Andrie in den Kommentaren) gezeigt hat, ist es tatsächlich sinnvoller, die Skalen nach der Berechnung der Statistik über zuzuschneiden
coord_cartesian
.(Sie müssen wahrscheinlich noch verwenden
scale_y_continuous
, um die Achsenbrüche zu beheben.)quelle
coord_cartesian()
spieltcoord_flip()
meiner erfahrung nach nicht gut damit , also bevorzuge ichscale_y_continuous()
.Ich hatte das gleiche Problem und berechnete die Werte für Q1, Q2, Median, ymin, ymax mit
boxplot.stats
:Das Ergebnis ist ein Boxplot ohne Ausreißer.
quelle
Eine Idee wäre, winsorize die Daten in einem Zwei-Pass - Verfahren:
Führen Sie einen ersten Durchgang durch, lernen Sie die Grenzen kennen, z. B. einen Schnitt bei einem bestimmten Perzentil oder eine N-Standardabweichung über dem Mittelwert oder ...
Setzen Sie in einem zweiten Durchgang die Werte jenseits der angegebenen Grenze auf den Wert dieser Grenze
Ich sollte betonen, dass dies eine altmodische Methode ist, die von moderneren robusten Techniken dominiert werden sollte, aber Sie stoßen immer noch häufig darauf.
quelle
Mit der Option "coef" der Funktion geom_boxplot kann der Ausreißer-Cutoff in Bezug auf Interquartilbereiche geändert werden. Diese Option ist für die Funktion stat_boxplot dokumentiert. Um Ausreißer zu deaktivieren (mit anderen Worten, sie werden als reguläre Daten behandelt), kann anstelle des Standardwerts von 1,5 ein sehr hoher Grenzwert angegeben werden:
quelle
Wenn Sie die Whisker zwingen möchten, sich auf die Max- und Min-Werte auszudehnen, können Sie das
coef
Argument optimieren . Der Standardwert fürcoef
ist 1,5 (dh die Standardlänge der Whisker beträgt das 1,5-fache des IQR).quelle
Ipaper :: geom_boxplot2 ist genau das, was Sie wollen.
quelle