boxplot() v R: How to Make BoxGrafy v RStudio

⚡ Chytré shrnutí

BoxFunkce plot v jazyce R shrnuje numerické rozdělení prostřednictvím mediánu, kvartilů, whiskery a odlehlých hodnot pomocí funkce geom_boxplot() z ggplot2. Tento návod vytváří krabicový graf na datové sadě o kvalitě ovzduší a vrství barvy, tečky, jitter, zářezy a skupinová porovnání.

  • 📐 Pětičíselné shrnutí: Čtvereček pokrývá první až třetí kvartil, čára označuje medián a vousy dosahují 1.5násobku mezikvartilového rozpětí.
  • 🧱 Základní syntaxe: ggplot(df, aes(x = skupina, y = hodnota)) + geom_boxplot() vytvoří jeden čtvereček na úroveň skupiny.ping faktor.
  • ???? Styling odlehlých prvků: Parametry outlier.colour, outlier.shape a outlier.size určují, jak se vykreslují body za vousy.
  • Můžu Zobrazení pozorování: geom_jitter() potlačuje překrytíping směřuje do stran a odhaluje velikost vzorku za každou krabicí.
  • 📉 Vroubkované BoxJe to: notch = TRUE vykreslí interval spolehlivosti mediánu a nepřekrýváníping zářezy naznačují skutečný rozdíl.
  • 🎨 Grouping: Mapaping Funkce fill inside geom_boxplot() rozdělí každou kategorii do několika políček umístěných vedle sebe.

Boxgraf v R

boxplot() v R

boxplot() v R pomáhá vizualizovat rozdělení dat podle kvartilů a detekovat přítomnost odlehlých hodnot. Ke kreslení boxplot() v R můžete použít geometrický objekt geom_boxplot() z knihovny ggplot2.

Datovou sadu o kvalitě ovzduší použijeme k zavedení funkce boxplot() v R s funkcí ggplot. Datová sada zaznamenává denní měření kvality ovzduší v New Yorku od května do září 1973 a obsahuje 153 pozorování. Použijeme následující proměnné:

  • Ozon: Číselná proměnná
  • Vítr: Numerická proměnná
  • Měsíc: květen až září. Numerická proměnná

Než si ji nakreslíte, je dobré vědět, co přesně každá část krabice představuje.

Jak číst a Box Graf: Kvartily, IQR a odlehlé hodnoty

Každý prvek krabicového grafu kóduje jedno číslo z pětičíselného souhrnu. Vědět, které je které, promění graf z dekorace v analýzu.

  • Spodní pant: první kvartil, Q1. Dvacet pět procent pozorování se nachází pod ním.
  • Střední čára: druhý kvartil. Jeho poloha uvnitř rámečku odhaluje zkosení: čára posunutá směrem dolů znamená, že data jsou zkosená doprava.
  • Horní pant: třetí kvartil, Q3. Sedmdesát pět procent pozorování se nachází pod ním.
  • Box výška: mezikvartilový rozsah, IQR = Q3 – Q1, který obsahuje střední polovinu dat a je standardním robustním měřítkem rozptylu.
  • Kníry: Rozšíří se až k nejextrémnějšímu pozorování, které je stále v rozmezí 1.5násobku IQR nejbližšího pantu. Nejedná se o minimum a maximum.
  • Body za vousy: pozorování označená jako odlehlé hodnoty podle pravidla 1.5 IQR.

Dvě upozornění. Zaprvé, „odlehlá hodnota“ je zde statistický příznak, nikoli chyba: v asymetrickém rozdělení, jako je koncentrace ozonu, se očekávají vysoké hodnoty a neměly by být mazány. Zadruhé, krabicový graf skrývá tvar rozdělení, takže dvě skupiny se stejnými krabicemi mohou mít velmi odlišná podkladová data. Přidání bodů s jitterem, jak je znázorněno níže, tomu předchází.

Box Graf vs. histogram vs. houslový graf v R

Všechny tři grafy popisují číselné rozdělení, ale každý z nich odhaluje něco, co ostatní skrývají.

Kritéria Box Spiknutí Histogram Houslový děj
Výstavy Medián, kvartily, odlehlé hodnoty Frekvence v každém koši Plná křivka hustoty
Revdosahuje více vrcholů Ne Ano Ano
Vlajky odlehlých hodnot Ano, explicitně Pouze vizuálně Ne přímo
Porovnání mnoha skupin vynikající trapný dobrý
Potřebuje výběr ladění Ne Ano, počet košů Ano, šířka pásma
objekt ggplot2 geom_boxplot() geom_histogram() geom_violin()

Běžným kompromisem je nakreslení houslového grafu s úzkým krabicovým grafem uvnitř, který zachovává tvar hustoty a souhrn kvartilů v jednom grafu. Viz tutoriál k histogramu pro binningovou stranu srovnání.

Vytvořit Box Spiknutí

Než začnete vytvářet svůj první boxplot() v R, musíte s daty manipulovat následovně:

  • Krok 1: Importujte data
  • Krok 2: Odstraňte nepotřebné proměnné
  • Krok 3: Převeďte Měsíc na uspořádaný faktor
  • Krok 4: Vytvořte novou kategoriální proměnnou, která každý měsíc rozdělí na tři části: Začátek, Prostředek a Konec
  • Krok 5: Odstraňte chybějící pozorování

Všechny tyto kroky se provádějí pomocí dplyr a operátora potrubí %>%.

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"))))

Osvědčeným postupem je zkontrolovat strukturu dat pomocí funkce glimpse().

glimpse(data_air)

Výstup:

## 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...

Jak Ozone, tak Solar.R obsahují hodnoty NA. Protože by je geom_boxplot() tiše odstranila a vypsala varování, je čistší je explicitně odstranit.

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

Základní krabicová zápletka

Nyní znázorněte rozložení ozonu podle měsíců.

# 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 Vysvětlení

  • Uložte graf pro další použití
    • box_plot: základní graf je uložen v objektu box_plot, což umožňuje později přidávat vrstvy bez opakování celého volání
  • Přidejte geometrický objekt
    • Dataset data_air_nona předáte do ggplot boxplot.
    • Do argumentu aes() přidáte osu x a osu y.
    • Znak + znamená, že chcete, aby R pokračoval ve čtení kódu. Dělá kód čitelnějším tím, že jej prolomí.
    • Pomocí geom_boxplot() vytvořte krabicový graf

Výstup:

Basic Box Spiknutí

Změňte stranu grafu

Můžete otočit stranu grafu.

box_plot +
  geom_boxplot()+
  coord_flip()

Code Vysvětlení

  • box_plot: Používáte graf, který jste si uložili. Vyhne se přepisování všech kódů pokaždé, když do grafu přidáte nové informace.
  • geom_boxplot(): nakreslí čtverečky a vousy
  • coord_flip(): Otočení strany grafu

Výstup:

Změna strany grafu

Změnit barvu odlehlé hodnoty

Můžete změnit barvu, tvar a velikost odlehlých hodnot.

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

Code Vysvětlení

  • outlier.colour=”red”: Ovládejte barvu odlehlých hodnot
  • outlier.shape=2: Změní tvar odlehlé hodnoty. 2 odkazuje na trojúhelník
  • outlier.size=3: Změní velikost trojúhelníku. Větší čísla vykreslují větší značky.

Výstup:

Změnit barvu odlehlé hodnoty

Přidejte souhrnnou statistiku

Můžete překrýt souhrnnou statistiku, jako je například skupinový průměr, který samotný krabicový graf nezobrazuje.

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

Code Vysvětlení

  • Funkce stat_summary() přidá vypočítanou statistiku na vrchol krabicového grafu.
  • Argument fun určuje, která statistika se vrátí. Zde se jedná o průměr. Všimněte si, že starší kód používá fun.y, který byl ve verzi ggplot2 zastaralý.
  • Poznámka: K dispozici jsou další statistiky, jako je min. a max. V jednom grafu lze zobrazit více než jednu statistiku
  • geom = „bod“: Vyneste průměr s bodem
  • size=3: Velikost bodu
  • barva =”ocelová modrá”: Barva bodů

Výstup:

Přidejte souhrnnou statistiku

Box Zápletka s tečkami

Dále přidejte na rámečky vrstvu bodového grafu. Každá tečka představuje jedno pozorování, což zviditelní velikost vzorku za každým rámečkem.

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

Code Vysvětlení

  • geom_dotplot() vykreslí jednu tečku na pozorování, naskládanou v každém koši.
  • binaxis='y': Změňte polohu teček podél osy y. Ve výchozím nastavení osa x
  • dotsize=1: Velikost teček
  • stackdir='center': Způsob, jak skládat tečky: Čtyři hodnoty:
    • „nahoru“ (výchozí),
    • "dolů"
    • "centrum"
    • "uprostřed"

Výstup:

Box Zápletka s tečkami

Ovládání Estetika Box Spiknutí

Změňte barvu krabice

Můžete změnit barvy skupiny.

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

Code Vysvětlení

  • Barvy skupin jsou řízeny v mapě aes().pingPro změnu barvy rámečku a vousového grafu podle měsíců můžete použít color=Month.

Výstup:

Změňte barvu Box

Box zápletka s více skupinami

Je také možné přidat více skupin. Rozdíl v kvalitě vzduchu si můžete vizualizovat podle dne měření.

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

Code Vysvětlení

  • Mapa aes()ping geometrického objektu řídí skupiny, které se mají zobrazit (tato proměnná musí být faktor)
  • aes(fill= day_cat) umožňuje vytvořit tři rámečky pro každý měsíc na ose x

Výstup:

Box Plot s více skupinami

Box Zápletka s roztřesenými tečkami

Dalším způsobem, jak zobrazit jednotlivá pozorování, jsou chvění bodů. Chvění je obvyklá volba, když kategorická osa x způsobí, že se mnoho bodů dostane na stejnou pozici.

Tato metoda zabraňuje překrýváníping diskrétních dat.

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

Code Vysvětlení

  • geom_jitter() přidá malé náhodné posunutí ke každému bodu, aby se překrývalyping hodnoty se stanou viditelnými.
  • shape=15 mění tvar bodů. 15 představuje čtverce
  • barva = „ocelově modrá“: Změna barvy bodu
  • position = position_jitter(width = 0.21): určuje, o kolik jsou body posunuty do stran, měřeno v jednotkách osy x. Výchozí hodnota je 40 procent rozteče mezi kategoriemi.

Výstup:

Box Zápletka s roztřesenými tečkami

Můžete vidět rozdíl mezi prvním grafem s metodou jitter a druhým s bodovou metodou.

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

Box Zápletka s roztřesenými tečkami

Vroubkované Box Spiknutí

Zajímavou vlastností geom_boxplot() je vrubová funkce boxplot v R. Notch plot zužuje rámeček kolem mediánu. Hlavním účelem vrubového krabicového grafu je porovnat významnost mediánu mezi skupinami. Existují silné důkazy, že dvě skupiny mají různé mediány, když se zářezy nepřekrývají. Zářez se vypočítá následovně:

Vroubkované Box Spiknutí

Zde IQR představuje interkvartilní rozpětí a n je počet pozorování ve skupině. Zářez zhruba pokrývá 95% interval spolehlivosti mediánu.

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

Code Vysvětlení

  • geom_boxplot(notch = TRUE): nakreslí krabicový graf se zářezy kolem středové osy

Výstup:

Vroubkované Box Spiknutí

Jak přidat nadpisy, popisky a vlastní barvy do Box Graf v R

Výše uvedené grafy používají výchozí hodnoty ggplot2, které přebírají názvy proměnných přímo z datového rámce. Publikovatelný graf potřebuje čitelné popisky a promyšlenou paletu.

Názvy a popisky os. Jedno volání labs() nastaví každý textový prvek:

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()

Výběr vlastních barev. Použijte scale_fill_manual() , když je fill mapován uvnitř aes() , a scale_colour_manual() , když je barva:

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 je zde vypnutá, protože osa x již pojmenovává jednotlivé měsíce, takže její opakování by plýtvalo místem.

Znovuobjednávání krabic. Úrovně faktorů řídí pořadí na ose. Protože Měsíc byl vytvořen jako seřazený faktor, je již chronologicky seřazen. V případě neuspořádaného faktoru seřaďte místo toho podle mediánu:

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

Ukládání grafu. Funkce ggsave() zapíše poslední graf na disk v rozlišení, které určíte:

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

Box Graf v R: Code Odkaz

Níže uvedená tabulka uvádí volání ggplot2 pro každou variantu krabicového grafu uvedenou výše:

Objektivní Code
Základní krabicová zápletka
ggplot(df, aes(x = x1, y = y)) + geom_boxplot()
Otočit orientaci
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip()
Vroubkovaná krabicová zápletka
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE)
Box zápletka s roztřesenými tečkami
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21))
Vybarvi podle skupiny
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot()
Více skupin v každé kategorii
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2))
Přičtěte průměr skupiny
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point")

Zkontrolujte také: - Kurz R pro začátečníky: Naučte se programovací jazyk R

Nejčastější dotazy

Vousy dosahují nejextrémnějšího pozorování, které leží v 1.5násobku interkvartilového rozmezí nejbližšího kvartilu. Nejedná se o minimum a maximum a vše, co je za nimi, je vykresleno jako odlehlý bod.

Ne automaticky. Pravidlo 1.5 IQR je konvence, nikoli důkaz chyby. Nejprve prozkoumejte každý bod: zkreslená data, jako jsou hodnoty ozonu, přirozeně produkují vysoké hodnoty, které jsou skutečnými měřeními.

Překrytíping zářezy naznačují, že neexistují žádné přesvědčivé důkazy o tom, že by se tyto dva mediány lišily. Nepřekrýváníping Zářezy naznačují pravděpodobný skutečný rozdíl, zhruba ekvivalentní 95% srovnání s spolehlivostí.

Box Grafy jsou standardním průzkumným krokem před trénováním: odhalují zkreslení, odlehlé hodnoty a různé škály rysů napříč třídami. Týmy je také používají k porovnání přesnosti modelu napříč křížovými validačními záhyby.

Ano. Asistenti umělé inteligence dokáží vysvětlit chyby, jako je například spojitá osa x produkující jeden čtvereček, a navrhnout správnou mapu aes().pinga označte zastaralé argumenty, jako například fun.y. Opravený kód vždy znovu spusťte na vlastních datech.

Shrňte tento příspěvek takto: