it-swarm.com.de

Boxplots in matplotlib: Marker und Ausreißer

Ich habe einige Fragen zu Boxplots in matplotlib:

Frage A. Was stellen die Markierungen dar, die ich unten mit Q1, Q2 und Q3 hervorgehoben habe? Ich glaube, Q1 ist maximal und Q3 sind Ausreißer, aber was ist Q2?

 enter image description here

Frage B Wie identifiziert Matplotlib Ausreißer? (d. h. woher weiß es, dass sie nicht die wahren max- und min-Werte sind?)

50

Ein Bild sagt mehr als tausend Worte. Beachten Sie, dass die Ausreißer (die +-Markierungen in Ihrer Zeichnung) einfach Punkte außerhalb des breiten [(Q1-1.5 IQR), (Q3+1.5 IQR)]-Bereichs darunter sind. 

 enter image description here

Das Bild ist jedoch nur ein Beispiel für einen normalverteilten Datensatz. Es ist wichtig zu verstehen, dass Matplotlib nicht zuerst eine Normalverteilung schätzt und die Quartile aus den geschätzten Verteilungsparametern berechnet, wie oben gezeigt. 

Stattdessen werden der Median und die Quartile direkt aus den Daten berechnet. Daher kann Ihr Boxplot abhängig von der Verteilung Ihrer Daten und der Größe der Stichprobe unterschiedlich aussehen, z. B. asymmetrisch und mit mehr oder weniger Ausreißern.

80

Die Box steht für das erste und dritte Quartil, die rote Linie für den Median (2. Quartil). Die documentation gibt die Standard-Whisker bei 1,5 IQR an:

boxplot(x, notch=False, sym='+', vert=True, whis=1.5,
        positions=None, widths=None, patch_artist=False,
        bootstrap=None, usermedians=None, conf_intervals=None)

und 

whis: [default 1.5]

Definiert die Länge der Whisker als Funktion des inneren Quartilbereichs. Sie erstrecken sich bis zu den extremsten Datenpunkten innerhalb (des * (75% -25%)) Datenbereichs.

Wenn Sie sich wegen verschiedener Boxplot-Darstellungen nicht sicher sind, lesen Sie die Beschreibung in Wikipedia .

22
seth

Zusätzlich zur Seth-Antwort (da die Dokumentation diesbezüglich nicht sehr genau ist): Q1 (die Wisker) werden auf den Maximalwert unter 75% + 1,5 IQR gestellt

(Mindestwert von 25% bis 1,5 IQR)

Dies ist der Code, der die Position der Whiskers berechnet:

        # get high extreme
        iq = q3 - q1
        hi_val = q3 + whis * iq
        wisk_hi = np.compress(d <= hi_val, d)
        if len(wisk_hi) == 0 or np.max(wisk_hi) < q3:
            wisk_hi = q3
        else:
            wisk_hi = max(wisk_hi)

        # get low extreme
        lo_val = q1 - whis * iq
        wisk_lo = np.compress(d >= lo_val, d)
        if len(wisk_lo) == 0 or np.min(wisk_lo) > q1:
            wisk_lo = q1
        else:
            wisk_lo = min(wisk_lo)
13
Dirk

Nur für den Fall, dass dies für alle anderen von Nutzen sein kann, musste ich eine Legende in einem meiner Box-Plot-Diagramme einfügen. Ich habe dieses kleine .png in Inkscape erstellt und dachte, ich würde es teilen.

 enter image description here

4
June Skeeter

Das Bild unten zeigt die verschiedenen Teile eines Boxplots. 

 enter image description here

Quantil 1/Q1: 25. Perzentil

Interquartilsabstand (IQR): 25. Perzentil bis 75. Perzentil. 

Median (Quantil 2/Q2): 50. Perzentil.

Quantil 3/Q3: 75. Perzentil. 

Ich sollte beachten, dass der blaue Teil die Schnurrhaare des Boxplots sind. 

Das Bild unten vergleicht das Boxdiagramm einer Normalverteilung mit der Wahrscheinlichkeitsdichtefunktion. Es sollte helfen, das "Minimum", "Maximum" und Ausreißer zu erklären. 

 enter image description here

"Minimum": (Q1-1.5 IQR) 

"Maximum": (Q3 + 1,5 IQR)

Wie Zelusp sagte, sind 99,3% der Daten in einer Standardverteilung von 2.698 (Standardabweichungen) enthalten. Die grünen Kreise (Ausreißer) in der Abbildung unten sind die verbleibenden 0,7% der Daten. Hier ist eine Ableitung davon, wie diese Zahlen entstanden sind. 

Hier ist eine Grafik, die die Komponenten der Box aus einer stats.stackexchange-Antwort veranschaulicht. Beachten Sie, dass k = 1,5 ist, wenn Sie in Pandas nicht das Schlüsselwort whis angeben.

 enter image description here

Die Boxplot-Funktion in Pandas ist ein Wrapper für matplotlib.pyplot.boxplot. Die matplotlib docs erklären die Komponenten der Boxen im Detail:

Frage A:

Die Box erstreckt sich vom unteren bis zum oberen Quartil der Daten mit einer Linie im Median.

ich. e. Ein Viertel der Eingabedatenwerte befindet sich unterhalb der Box und ein Viertel oberhalb der Box.

Frage B:

whis: Float, Sequenz oder String (Standard = 1,5)

Bestimmt als Float die Reichweite der Schnurrhaare zum Jenseits der erstes und drittes Quartil. Mit anderen Worten, wobei IQR der .__ ist. Interquartilsbereich (Q3-Q1), wird der obere Whisker bis in den letzten Bereich verlängert Datum kleiner als Q3 + whis * IQR). In ähnlicher Weise wird der untere Whisker erstrecken sich bis zum ersten Datum, das größer als Q1 ist - mit * IQR. Über den Whisker, Daten werden als Ausreißer betrachtet und als individuell dargestellt Punkte.

Matplotlib (und Pandas) bietet Ihnen auch viele Optionen, um diese Standarddefinition der Whiskers zu ändern:

Setzen Sie diesen Wert auf einen unangemessen hohen Wert, um die Anzeige der Whisker zu erzwingen die min und max werte. Alternativ können Sie einen aufsteigenden Wert einstellen Sequenz von Perzentil (z. B. [5, 95]), um die Whisker auf spezifisch einzustellen. Perzentile der Daten. Schließlich kann whis der String 'range' bis .__ sein. zwingen Sie die Whisker auf das Min und Max der Daten.

1
Joooeey