boxplot() w R: Jak to zrobić BoxWykresy w RStudio

⚡ Inteligentne podsumowanie

BoxWykres w R podsumowuje rozkład numeryczny poprzez medianę, kwartyle, wąsy i wartości odstające za pomocą funkcji geom_boxplot() z ggplot2. Ten przewodnik tworzy wykres pudełkowy na podstawie zbioru danych dotyczących jakości powietrza i nakłada na niego warstwy kolorów, punktów, drgań, wcięć i porównań grupowych.

  • 📐 Podsumowanie pięcioliczbowe: Pole rozciąga się od pierwszego do trzeciego kwartyla, linia oznacza medianę, a wąsy sięgają 1.5-krotności zakresu interkwartylowego.
  • 🧱 Składnia podstawowa: ggplot(df, aes(x = grupa, y = wartość)) + geom_boxplot() generuje jedno pole na każdy poziom grupyping czynnikiem.
  • ???? Stylizacja odstająca od normy: outlier.colour, outlier.shape i outlier.size kontrolują sposób rysowania punktów znajdujących się za wąsami.
  • 💠 Wyświetlanie obserwacji: geom_jitter() przesuwa nakładanieping wskazuje na boki, odsłaniając wielkość próbki stojącą za każdym pudełkiem.
  • 📉 Szorstki Boxjest: notch = TRUE rysuje przedział ufności mediany i braku nakładania sięping nacięcia wskazują na rzeczywistą różnicę.
  • 🎨 Grouping: Mapaping Wypełnij wewnątrz geom_boxplot() dzieląc każdą kategorię na kilka sąsiadujących ze sobą pól.

Boxwykres w R

boxplot() w R

boxplot() w R pomaga wizualizować rozkład danych według kwartyli i wykrywać obecność wartości odstających. Możesz użyć obiektu geometrycznego geom_boxplot() z biblioteki ggplot2, aby narysować boxplot() w R.

Wykorzystamy zbiór danych dotyczących jakości powietrza do wprowadzenia funkcji boxplot() w R za pomocą ggplot. Zbiór danych rejestruje codzienne pomiary jakości powietrza w Nowym Jorku od maja do września 1973 roku i zawiera 153 obserwacje. Użyjemy następujących zmiennych:

  • Ozon: Zmienna numeryczna
  • Wiatr: Zmienna numeryczna
  • Miesiąc: od maja do września. Zmienna numeryczna

Zanim narysujesz jakiś obrazek, warto dokładnie wiedzieć, co przedstawia każda część pudełka.

Jak czytać Box Wykres: kwartyle, IQR i wartości odstające

Każdy element wykresu pudełkowego koduje jedną liczbę z pięcioliczbowego podsumowania. Wiedza o tym, która liczba jest która, zmienia wykres z dekoracji w analizę.

  • Dolny zawias: pierwszy kwartyl, Q1. Dwudzieścia pięć procent obserwacji znajduje się poniżej niego.
  • Linia środkowa: Drugi kwartyl. Jego położenie wewnątrz pola wskazuje na skos: linia przesunięta ku dołowi oznacza, że ​​dane są prawostronnie skośne.
  • Górny zawias: trzeci kwartyl, Q3. Siedemdziesiąt pięć procent obserwacji znajduje się poniżej niego.
  • Box wysokość: rozstęp międzykwartylowy IQR = Q3 – Q1, który obejmuje środkową połowę danych i jest standardową, odporną miarą rozrzutu.
  • Wąsy: Rozciągają się one do najbardziej ekstremalnej obserwacji, która wciąż mieści się w granicach 1.5-krotności IQR najbliższego zawiasu. Nie są one wartościami minimalnymi i maksymalnymi.
  • Punkty wykraczające poza szczegóły: obserwacje oznaczone jako odstające zgodnie z regułą 1.5 IQR.

Dwie uwagi. Po pierwsze, „wartość odstająca” w tym przypadku jest sygnałem statystycznym, a nie błędem: w rozkładzie skośnym, takim jak stężenie ozonu, wysokie wartości są oczekiwane i nie należy ich usuwać. Po drugie, wykres pudełkowy ukrywa kształt rozkładu, więc dwie grupy z identycznymi polami mogą mieć bardzo różne dane bazowe. Dodanie punktów jitteringu, jak pokazano poniżej, zapobiega temu.

Box Wykres vs Histogram vs Wykres skrzypcowy w R

Wszystkie trzy wykresy przedstawiają rozkład liczbowy, ale każdy ujawnia coś, co pozostałe ukrywają.

kryteria Box Wątek Histogram Fabuła skrzypiec
Targi Mediana, kwartyle, wartości odstające Częstotliwość w każdym pojemniku Pełna krzywa gęstości
Revosiąga wiele szczytów Nie Tak Tak
Flagi odstające Tak, wyraźnie Tylko wizualnie Nie bezpośrednio
Porównywanie wielu grup Doskonały Niezręczny Dobry
Wymaga wyboru strojenia Nie Tak, liczba pojemników Tak, przepustowość
obiekt ggplot2 geom_boxplot() geom_histogram() geom_skrzypce()

Częstym kompromisem jest narysowanie wykresu skrzypcowego z wąskim wykresem pudełkowym w środku, który zachowuje kształt gęstości i podsumowanie kwartyli na jednym wykresie. Zobacz samouczek histogramu dla strony binowania porównania.

Stwórz Box Wątek

Zanim zaczniesz tworzyć swój pierwszy wykres pudełkowy w R, musisz manipulować danymi w następujący sposób:

  • Krok 1: Zaimportuj dane
  • Krok 2: Usuń niepotrzebne zmienne
  • Krok 3: Przekształć miesiąc w uporządkowany czynnik
  • Krok 4: Utwórz nową zmienną kategorową dzielącą każdy miesiąc na trzy części: początek, środek i koniec
  • Krok 5: Usuń brakujące obserwacje

Wszystkie te kroki wykonuje się przy użyciu dplyr i operatora potoku %>%.

library(dplyr)
library(ggplot2)
# Step 1
data_air <- airquality %>%

#Step 2
select(-c(Solar.R, Temp)) %>%

#Step 3
mutate(Month = factor(Month, order = TRUE, labels = c("May", "June", "July", "August", "September")), 
       
#Step 4 
day_cat = factor(ifelse(Day < 10, "Begin", ifelse(Day < 20, "Middle", "End"))))

Dobrą praktyką jest sprawdzanie struktury danych za pomocą funkcjispoke().

glimpse(data_air)

Wyjście:

## Observations: 153
## Variables: 5
## $ Ozone   <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, ...
## $ Wind    <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6...
## $ Month   <ord> May, May, May, May, May, May, May, May, May, May, May,...
## $ Day     <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,...
## $ day_cat <fctr> Begin, Begin, Begin, Begin, Begin, Begin, Begin, Begi...

Zarówno Ozone, jak i Solar.R zawierają wartości NA. Ponieważ geom_boxplot() po cichu je usunie i wyświetli ostrzeżenie, wygodniej jest usunąć je jawnie.

# Step 5
data_air_nona <-data_air %>% na.omit()	

Podstawowy wykres pudełkowy

Teraz narysuj wykres rozkładu ozonu w poszczególnych miesiącach.

# Store the graph
box_plot <- ggplot(data_air_nona, aes(x = Month, y = Ozone))
# Add the geometric object box plot
box_plot +
    geom_boxplot()

Code Wyjaśnienie

  • Zapisz wykres do dalszego wykorzystania
    • box_plot: wykres bazowy jest przechowywany w obiekcie box_plot, co pozwala na późniejsze dodawanie warstw bez konieczności powtarzania całego wywołania
  • Dodaj obiekt geometryczny
    • Przekazujesz zbiór danych data_air_nona do ggplot boxplot.
    • Wewnątrz argumentu aes() dodajesz oś x i oś y.
    • Znak + oznacza, że ​​chcesz, aby R nadal czytał kod. Kod staje się bardziej czytelny, ponieważ go łamie.
    • Użyj geom_boxplot(), aby utworzyć wykres pudełkowy

Wyjście:

Basic Box Wątek

Zmień stronę wykresu

Możesz odwrócić bok wykresu.

box_plot +
  geom_boxplot()+
  coord_flip()

Code Wyjaśnienie

  • box_plot: Używasz zapisanego wykresu. Dzięki temu unikniesz przepisywania wszystkich kodów za każdym razem, gdy dodasz nowe informacje do wykresu.
  • geom_boxplot(): narysuj pola i wąsy
  • coord_flip(): Odwróć bok wykresu

Wyjście:

Zmień stronę wykresu

Zmień kolor wartości odstającej

Możesz zmienić kolor, kształt i rozmiar wartości odstających.

box_plot +
    geom_boxplot(outlier.colour = "red",
        outlier.shape = 2,
        outlier.size = 3) +
    theme_classic()

Code Wyjaśnienie

  • outlier.color=”red”: Kontroluj kolor wartości odstających
  • outlier.shape=2: Zmień kształt wartości odstającej. 2 odnosi się do trójkąta
  • outlier.size=3: Zmień rozmiar trójkąta. Większe liczby rysują większe znaczniki.

Wyjście:

Zmień kolor wartości odstającej

Dodaj statystykę podsumowującą

Można nałożyć statystykę podsumowującą, np. średnią grupy, której sam wykres pudełkowy nie pokazuje.

box_plot +
    geom_boxplot() +
    stat_summary(fun.y = mean,
        geom = "point",
        size = 3,
        color = "steelblue") +
    theme_classic()

Code Wyjaśnienie

  • stat_summary() dodaje obliczoną statystykę na wykresie pudełkowym
  • Argument fun kontroluje, która statystyka zostanie zwrócona. W tym przypadku jest to średnia. Należy zauważyć, że starszy kod używa fun.y, który ggplot2 wycofał w wersji 3.3.0.
  • Uwaga: dostępne są inne statystyki, takie jak min. i maks. Na tym samym wykresie można wyświetlić więcej niż jedną statystykę
  • geom = „punkt”: Wykreśl średnią za pomocą punktu
  • size=3: Rozmiar punktu
  • color =”steelblue”: Kolor punktów

Wyjście:

Dodaj statystykę podsumowującą

Box Fabuła z kropkami

Następnie dodaj warstwę wykresu punktowego na polach. Każda kropka reprezentuje pojedynczą obserwację, dzięki czemu widoczny jest rozmiar próby dla każdego pola.

box_plot +
    geom_boxplot() +
    geom_dotplot(binaxis = 'y',
        dotsize = 1,
        stackdir = 'center') +
    theme_classic()

Code Wyjaśnienie

  • geom_dotplot() rysuje jedną kropkę na obserwację, ułożoną w stos w każdym pojemniku
  • binaxis='y': Zmień położenie kropek wzdłuż osi Y. Domyślnie oś X
  • dotsize=1: Rozmiar kropek
  • stackdir='center': Sposób układania kropek: Cztery wartości:
    • „w górę” (domyślnie),
    • "na dół"
    • "Centrum"
    • „centralna całość”

Wyjście:

Box Fabuła z kropkami

Kontroluj estetykę Box Wątek

Zmień kolor pola

Możesz zmienić kolory grupy.

ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) +
    geom_boxplot() +
    theme_classic()

Code Wyjaśnienie

  • Kolory grup są kontrolowane na mapie aes()pingMożesz użyć polecenia color=Month, aby zmienić kolor wykresu pudełkowego i wąsowego zgodnie z miesiącami

Wyjście:

Zmień kolor Box

Box wykres z wieloma grupami

Możliwe jest także dodanie wielu grup. Można zwizualizować różnicę w jakości powietrza w zależności od dnia pomiaru.

ggplot(data_air_nona, aes(Month, Ozone)) +
    geom_boxplot(aes(fill = day_cat)) +
    theme_classic()

Code Wyjaśnienie

  • Mapa aes()ping obiektu geometrycznego kontroluje grupy do wyświetlenia (ta zmienna musi być czynnikiem)
  • aes(fill= day_cat) pozwala na utworzenie trzech pól dla każdego miesiąca na osi x

Wyjście:

Box Wykres z wieloma grupami

Box Fabuła z drgającymi kropkami

Innym sposobem na przedstawienie pojedynczych obserwacji są punkty drgające. Drgania są powszechnym wyborem, gdy oś x kategorii powoduje, że wiele punktów znajduje się w tej samej pozycji.

Ta metoda pozwala uniknąć nakładania sięping danych dyskretnych.

box_plot +
    geom_boxplot() +
    geom_jitter(shape = 15,
        color = "steelblue",
        position = position_jitter(width = 0.21)) +
    theme_classic()

Code Wyjaśnienie

  • geom_jitter() dodaje małe losowe przesunięcie do każdego punktu, tak aby zachodziło na siebieping wartości stają się widoczne.
  • kształt=15 zmienia kształt punktów. 15 reprezentuje kwadraty
  • color = „steelblue”: Zmień kolor punktu
  • position = position_jitter(width = 0.21): kontroluje, jak daleko punkty są przesuwane na boki, mierzone w jednostkach osi x. Domyślnie wynosi 40 procent odstępu między kategoriami.

Wyjście:

Box Fabuła z drgającymi kropkami

Widać różnicę pomiędzy pierwszym wykresem wykonanym metodą jittera, a drugim wykonanym metodą punktową.

box_plot +
    geom_boxplot() +
    geom_point(shape = 5,
        color = "steelblue") +
    theme_classic()

Box Fabuła z drgającymi kropkami

Szorstki Box Wątek

Ciekawą cechą geom_boxplot() jest funkcja wykresu pudełkowego z wycięciami w R. Wykres z wycięciami zawęża pole wokół mediany. Głównym celem wykresu pudełkowego z wycięciami jest porównanie istotności mediany między grupami. Istnieją mocne dowody na to, że dwie grupy mają różne mediany, gdy wycięcia się nie nakładają. Wycięcie oblicza się w następujący sposób:

Szorstki Box Wątek

Tutaj IQR to rozstęp międzykwartylowy, a n to liczba obserwacji w grupie. Wcięcie obejmuje mniej więcej 95-procentowy przedział ufności mediany.

box_plot +
    geom_boxplot(notch = TRUE) +
    theme_classic()

Code Wyjaśnienie

  • geom_boxplot(notch = TRUE): narysuj wykres pudełkowy z wycięciami wokół mediany

Wyjście:

Szorstki Box Wątek

Jak dodać tytuły, etykiety i niestandardowe kolory do Box Wykres w R

Powyższe wykresy korzystają z domyślnych ustawień ggplot2, które pobierają nazwy zmiennych bezpośrednio z ramki danych. Wykres nadający się do publikacji wymaga czytelnych etykiet i przemyślanej palety barw.

Tytuły i etykiety osi. Jedno wywołanie labs() ustawia każdy element tekstowy:

box_plot +
    geom_boxplot(fill = "coral", alpha = 0.7) +
    labs(title = "Ozone concentration by month",
        subtitle = "New York, May to September 1973",
        x = "Month",
        y = "Ozone (parts per billion)",
        caption = "Source: airquality dataset") +
    theme_classic()

Wybieranie własnych kolorów. Użyj scale_fill_manual(), gdy wypełnienie jest mapowane wewnątrz aes(), a scale_colour_manual(), gdy kolor to:

ggplot(data_air_nona, aes(x = Month, y = Ozone, fill = Month)) +
    geom_boxplot() +
    scale_fill_manual(values = c("#0e9cd1", "coral", "#7dc27d", "#c9a227", "grey60")) +
    theme_classic() +
    theme(legend.position = "none")

Legenda jest tutaj wyłączona, ponieważ oś x już podaje nazwy poszczególnych miesięcy, więc powtarzanie jej byłoby marnowaniem miejsca.

Ponowne uporządkowanie pudełek. Poziomy czynników wpływają na kolejność na osi. Ponieważ Miesiąc został utworzony jako czynnik uporządkowany, jest on już wyświetlany chronologicznie. W przypadku czynnika nieuporządkowanego, należy sortować według mediany:

ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) +
    geom_boxplot() +
    theme_classic()

Zapisywanie wykresu. ggsave() zapisuje ostatni wykres na dysku z rozdzielczością, którą kontrolujesz:

ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)

Box Wykres w R: Code Numer Referencyjny

Poniższa tabela przedstawia wywołania ggplot2 dla każdej z omówionych powyżej odmian wykresu pudełkowego:

Cel Code
Podstawowy wykres pudełkowy
ggplot(df, aes(x = x1, y = y)) + geom_boxplot()
Odwróć orientację
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip()
Wykres pudełkowy z karbem
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE)
Box wykres z drgającymi kropkami
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21))
Koloruj według grupy
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot()
Wiele grup w każdej kategorii
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2))
Dodaj średnią grupy
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point")

Sprawdź również: - Samouczek R dla początkujących: Naucz się języka programowania R

FAQ

Wąsy osiągają najbardziej ekstremalny punkt obserwacji, leżący w odległości 1.5-krotności zakresu międzykwartylowego najbliższego kwartyla. Nie są one wartościami minimalnymi i maksymalnymi, a wszystko poza nimi jest rysowane jako punkt odstający.

Nie automatycznie. Reguła 1.5 IQR to konwencja, a nie dowód błędu. Najpierw sprawdź każdy punkt: zniekształcone dane, takie jak odczyty ozonu, naturalnie generują wysokie wartości, które są prawdziwymi pomiarami.

zakładkaping nacięcia sugerują, że nie ma mocnych dowodów na to, że dwie mediany się różnią. Brak nakładania sięping nacięcia wskazują na prawdopodobną rzeczywistą różnicę, odpowiadającą w przybliżeniu 95-procentowemu poziomowi ufności porównania.

Box Wykresy stanowią standardowy etap eksploracji przed szkoleniem: ujawniają one skosy, wartości odstające i różnice w skalach cech w różnych klasach. Zespoły wykorzystują je również do porównywania dokładności modelu w różnych fazach walidacji krzyżowej.

Tak. Asystenci AI mogą wyjaśniać błędy, takie jak ciągła oś X generująca pojedynczy kwadrat, i sugerować właściwą mapę aes()pingi oznacz przestarzałe argumenty, takie jak fun.y. Zawsze uruchamiaj ponownie poprawiony kod na własnych danych.

Podsumuj ten post następująco: