2013-07-18 10 views
36

Mam kilka pytań dotyczących boxplots w matplotlib:Boxplots w matplotlib: Markery i odstających

Pytanie A. Co oznaczają znaczniki, które podkreślono poniżej, oznaczone symbolami? Wierzę, że Q1 jest maksymalna i Q3 są odstające, ale co to jest Q2?

                                            enter image description here

Pytanie B Jak matplotlib zidentyfikować o utliers? (tj. skąd wiadomo, że nie są one prawdziwe?)

Odpowiedz

63

obraz jest wart tysiąca słów. Zauważ, że wartości odstające (znaczniki + na twoim wykresie) są po prostu punktami poza obszarem szerokiego marginesu [(Q1-1.5 IQR), (Q3+1.5 IQR)] poniżej.

    enter image description here

Jednak obraz jest tylko przykładem dla rozkładzie normalnym zestawie danych.Ważne jest, aby zrozumieć, że matplotlib nie oblicza najpierw rozkładu normalnego i oblicza kwartyle z oszacowanych parametrów rozkładu, jak pokazano powyżej.

Zamiast tego mediana i kwartyle są obliczane bezpośrednio na podstawie danych. Tak więc twój plansza może wyglądać inaczej w zależności od dystrybucji danych i wielkości próbki, np. Asymetryczna i z mniej więcej wartościami odstającymi.

+2

Tak więc "99,3%" twoich danych jest zawartych ** wewnątrz ** szerokiego '[(Q1-1.5 IQR), (Q3 + 1.5 IQR)]' marginesu powyżej (zwanego także wąsami). Tak więc wszystkie tyknięcia poza tym stanowią jedynie "0,7%" twoich danych. – zelusp

+1

'IQR' oznacza [Zakres międzykwartylowy] (http://www.physics.csbsju.edu/stats/box2.html) – zelusp

23

Pole przedstawia pierwszy i trzeci kwartyl, z czerwoną linią medianę (2. kwartyl). documentation daje domyślne wąsy 1,5 IQR:

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

i

whis [domyślny 1.5]

określa długość wąsów w funkcji wewnętrznej zakresie kwartyl. Obejmują one najbardziej ekstremalny punkt danych w obrębie (whis * (75% -25%)) zakresu danych.

Jeśli nie masz pewności co do różnych reprezentacji wykresów polowych, spróbuj przeczytać the description in wikipedia.

12

Ponadto Seth odpowiedź (od dokumentacji nie jest bardzo precyzyjne określenie to) Q1 (na wiskers) są umieszczone na maksymalnej wartości poniżej 75% + 1,5 IQR

(minimalna wartość o 25% - 1,5 IQR)

jest to kod, który oblicza pozycję wąsów:

 # 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) 
+0

Dzięki za wyjaśnienie tego - znalazłem różnicę w moich działek (w porównaniu do wartości docs * 3Q + 1,5 * IQR *) i ucieszył się, aby zobaczyć swoje wyjaśnienia. TBH jednak, jestem trochę zdezorientowany wyrażeniem "lub": części "else" mają sens, ale "lub" wydaje się niemożliwe ... dla części Q3, 'len (wisk_hi) == 0' oznacza" jeśli nie znajdziemy żadnych elementów poniżej 'hi_val' - jak to się dzieje? Q3 zostaje znalezione poprzez podzielenie danych na medianę i przyjęcie mediany górnej połowy ... z definicji będą wartości niższe niż hi_val - i co oznacza druga część "lub"? Wszelkie rady najbardziej mile widziane. – ttsiodras

+0

Mogę się tylko z tobą zgadzać, @ ttsiodras, że 'q3' powinno być częścią tablicy' d' i spełnić warunek do 'np.compress', więc powinno również znajdować się w tablicy, z której pobierane jest maksimum. Być może kod jest po prostu "aby zostać zbawionym" lub aby czytelnik wiedział, że 'wist_hi' nie może być mniejszy niż' q3'. –

2

W przypadku, gdy może to przynieść korzyść komukolwiek innemu, musiałem umieścić legendę na jednym z wykresów wykresów pudełkowych, więc zrobiłem to małe .png w Inkscape i pomyślałem, że będę je udostępniać.

enter image description here

Powiązane problemy