Jak czytać wykres pudełkowy
Wykres pudełkowy kompresuje cały rozkład do pięciu liczb i rysuje je jako jeden zwarty znak. Nauka czytania zajmuje pół minuty, więc zacznijmy od tego. Każdy element ma dokładne znaczenie:
- Gruba linia wewnątrz pudełka to mediana: połowa danych leży poniżej, połowa powyżej.
- Samo pudełko obejmuje rozstęp międzykwartylowy (IQR), od pierwszego kwartyla (25% danych poniżej) do trzeciego (75% poniżej). Środkowa połowa danych mieści się w pudełku.
- Wąsy to linie wychodzące z pudełka. Każdy sięga do najbardziej skrajnego punktu danych, który leży nie dalej niż 1.5 × IQR od krawędzi pudełka, więc obejmują "zwykły zakres" danych, a nie pełny zakres.
- Pojedyncze punkty za wąsami to wartości oddalone od pudełka o więcej niż 1.5 × IQR: oznaczone jako podejrzane wartości odstające i rysowane pojedynczo, żeby dało się je policzyć.
Wysokie pudełko oznacza rozproszone dane; linia mediany przesunięta od środka pudełka oznacza skośność; ciąg punktów za jednym wąsem oznacza ciężki ogon po tej stronie. Histogram pokazuje ten sam rozkład dokładniej, ale supermocą wykresu pudełkowego jest to, że kilkanaście takich wykresów mieści się obok siebie. Dlatego to ten wykres do porównywania grup.
Wykres pudełkowy jednej zmiennej
Funkcja to boxplot(), a dla jednego wektora liczbowego wystarczy jedno wywołanie:
scores <- c(52, 55, 58, 60, 61, 63, 64, 66, 68, 70, 72, 95)
boxplot(scores,
main = "Test scores",
ylab = "Score")
Co zobaczysz: pudełko od 59 do 69 z linią mediany na 63.5, wąsy sięgające w dół do 52 i w górę do 72 oraz jeden samotny punkt na 95. To wartość odstająca, którą podsumowanie przez średnią i odchylenie standardowe po cichu by wchłonęło. Natychmiastowe "ta jedna wartość nie pasuje do reszty" to właśnie zadanie wykresów pudełkowych.
(Jak na każdej stronie tego rozdziału, wywołania rysujące to statyczne fragmenty, a edytor poniżej pokazuje tylko wynik tekstowy. Uruchom je lokalnie, żeby zobaczyć rysunek.)
Porównywanie grup: formuła
Na co dzień najczęściej rysuje się jedno pudełko na grupę i do tego boxplot() przyjmuje formułę: y ~ group, czytaną jako "y w podziale na grupy". Wbudowany zbiór ToothGrowth (długość zębów u 60 świnek morskich, którym podawano witaminę C w soku pomarańczowym OJ lub jako kwas askorbinowy VC) to klasyczny przykład:
boxplot(len ~ supp,
data = ToothGrowth,
main = "Tooth growth by supplement",
xlab = "Supplement",
ylab = "Tooth length")
Na wspólnej osi pionowej pojawiają się dwa pudełka: pudełko OJ leży wyraźnie wyżej niż VC, z medianą około 22 wobec około 19. Ponieważ oba pudełka mają jedną oś, porównanie jest uczciwe z definicji: nie ma szans, że dwa wykresy o różnych skalach upiększą jedną grupę. Kolumna grupująca powinna być czynnikiem (lub wektorem tekstowym); każdy poziom staje się jednym pudełkiem.
Formuły można też zagnieżdżać: boxplot(len ~ supp * dose, data = ToothGrowth) rysuje sześć pudełek, po jednym na każdą kombinację suplementu i dawki. Gdy różnica między grupami wygląda na prawdziwą, naturalne następne pytanie (czy to coś więcej niż szum?) rozstrzyga test t.
Etykiety, kolory i poziome wykresy pudełkowe
Argumenty stylu działają jak w innych wykresach bazowego R. names podpisuje pudełka, col je wypełnia; przekaż wektor, żeby każda grupa miała inny kolor:
boxplot(len ~ supp,
data = ToothGrowth,
names = c("Orange juice", "Ascorbic acid"),
col = c("orange", "lightblue"),
main = "Tooth growth by supplement",
ylab = "Tooth length")
Przydają się jeszcze dwa przełączniki:
horizontal = TRUEobraca cały wykres, więc pudełka biegną wzdłuż osi poziomej. Rób tak zawsze, gdy nazwy grup są długie: poziome etykiety pozostają czytelne tam, gdzie pionowe na siebie nachodzą.notch = TRUEwycina karb wokół każdej mediany; gdy karby dwóch grup na siebie nie zachodzą, ich mediany prawdopodobnie się różnią. Traktuj to jako wskazówkę wizualną, nie test.
Liczby stojące za pudełkiem
Wszystko, co rysuje wykres, pochodzi z liczb, które możesz wypisać. quantile() podaje podsumowanie pięcioliczbowe, a boxplot.stats() daje dokładnie to, czego używa wykres, łącznie z wartościami odstającymi. Ten przykład możesz uruchomić tutaj:
Zwróć uwagę, że te dwa wyniki są spokrewnione, ale nie identyczne: quantile() podaje prawdziwe minimum i maksimum, a s$stats kończy się na wąsach, czyli najbardziej skrajnych punktach w granicy 1.5 × IQR. Różnica między nimi to dokładnie s$out, tutaj samotne 95. Gdy ktoś pyta "które wiersze to te kropki odstające?", odpowiedź daje x[x %in% boxplot.stats(x)$out] albo filtr na wartościach granicznych.
Wykresy pudełkowe w ggplot2
W ggplot2 grupowanie trafia do mapowania estetyk, a nie do formuły:
library(ggplot2)
ggplot(ToothGrowth, aes(x = supp, y = len, fill = supp)) +
geom_boxplot() +
labs(title = "Tooth growth by supplement",
x = "Supplement", y = "Tooth length")
Te same dwa pudełka, a legenda i motyw gratis. Wersja z ggplot2 lepiej się skaluje, gdy wykres rośnie: rozbij go na panele według dose, nałóż surowe punkty przez geom_jitter(width = 0.1), a kod pozostanie deklaratywny. Do jednorazowego porównania w trakcie analizy boxplot(y ~ g, data = df) wciąż jest najszybszym zapisem.
Co warto zapamiętać
- Budowa pudełka: linia mediany, pudełko = IQR, wąsy = najbardziej skrajne punkty w granicy 1.5 × IQR, kropki dalej = podejrzane wartości odstające.
boxplot(x)dla jednej zmiennej;boxplot(y ~ group, data = df)do porównania grup obok siebie na jednej, uczciwej wspólnej skali.- Styl ustawiasz przez
names, wektorcolz kolorem dla każdej grupy ihorizontal = TRUEprzy długich etykietach. boxplot.stats(x)$statsi$outto wykres w postaci liczb; użyj ich, żeby wyciągnąć wartości odstające, które pokazuje wykres.- ggplot2:
geom_boxplot()z grupą zmapowaną naxlubfill.
Dalej: wykres punktowy, czyli przejście od rozkładu jednej zmiennej do zależności między dwiema.
Najczęściej zadawane pytania
Jak zrobić wykres pudełkowy w R?
Wywołaj boxplot(x) na wektorze liczbowym, żeby dostać jedno pudełko, albo użyj formuły boxplot(y ~ group, data = df), żeby dostać po jednym pudełku na grupę obok siebie. Oba warianty są w bazowym R, bez żadnych pakietów.
Co oznaczają części wykresu pudełkowego?
Gruba linia wewnątrz pudełka to mediana. Pudełko obejmuje rozstęp międzykwartylowy, od pierwszego do trzeciego kwartyla. Wąsy sięgają do najbardziej skrajnych punktów danych leżących w odległości do 1.5 IQR od pudełka, a wszystko poza wąsami jest rysowane jako osobny punkt, czyli podejrzana wartość odstająca.
Jak zrobić wykres pudełkowy według grup w R?
Użyj formuły: boxplot(len ~ supp, data = ToothGrowth) rysuje jedno pudełko dla każdego poziomu supp. Zmienna grupująca powinna być czynnikiem lub kolumną tekstową; każdy poziom staje się jednym pudełkiem na wspólnej skali.
Jak znaleźć wartości odstające pokazane na wykresie pudełkowym?
boxplot.stats(x)$out zwraca dokładnie te wartości, które wykres narysowałby jako punkty za wąsami, a boxplot.stats(x)$stats podaje pięć liczb, na których opiera się pudełko: końce wąsów, zawiasy i medianę.