boxplot() in R: How to Make BoxÁbrák az RStudio-ban

⚡ Okos összefoglaló

BoxAz R-ben a plot egy numerikus eloszlást összegez a medián, a kvartilisek, a whiskerek és a kiugró értékek segítségével a ggplot2 geom_boxplot() függvényével. Ez a bemutató egy dobozdiagramot készít a levegőminőségi adathalmazon, és rétegeket készít a színek, pontok, időzítés, bevágások és csoportos összehasonlítások alapján.

  • 📐 Ötszámos összefoglaló: A doboz az elsőtől a harmadik kvartilisig terjed, a vonal a mediánt jelöli, a bajuszszálak pedig az interkvartilis tartomány 1.5-szeresét érik el.
  • 🧱 Alap szintaxis: A ggplot(df, aes(x = group, y = value)) + geom_boxplot() függvény minden szinten egy dobozt hoz létre a talajban.ping tényező.
  • ???? Kiugró stílus: Az outlier.colour, outlier.shape és outlier.size paraméterek szabályozzák, hogy a bajuszokon túli pontok hogyan rajzolódjanak ki.
  • 💠 Megfigyelések megjelenítése: geom_jitter() eltolja az átfedéstping oldalra mutat, felfedve az egyes dobozok mögötti minta méretét.
  • 📉 hornyolt Boxa következő: A bevágás = IGAZ a medián konfidenciaintervallumát és az átfedést nem tartalmazó értékeket rajzolja ki.ping A bevágások valódi különbséget jeleznek.
  • 🎨 Grouping: Térképping A geom_boxplot() függvény minden kategóriát több egymás melletti mezőre oszt fel.

BoxR-ben ábrázolt cselekmény

boxplot() az R-ben

boxplot() az R-ben segít az adatok kvartilis szerinti eloszlásának megjelenítésében és a kiugró értékek kimutatásában. Használhatja a geom_boxplot() geometriai objektumot a ggplot2 könyvtárból egy boxplot() rajzolásához R-ben.

A levegőminőségi adathalmazt fogjuk használni a boxplot() bevezetéséhez R-ben a ggplot segítségével. Az adathalmaz New York napi levegőminőségi méréseit rögzíti 1973 májusa és szeptembere között, és 153 megfigyelést tartalmaz. A következő változókat fogjuk használni:

  • Ózon: numerikus változó
  • Szél: Numerikus változó
  • Hónap: májustól szeptemberig. Numerikus változó

Mielőtt lerajzolnánk egyet, érdemes pontosan tudni, hogy mit jelképez a doboz egyes részei.

Hogyan kell olvasni a Box Ábrán: Kvartilisek, IQR és kiugró értékek

Egy dobozdiagram minden eleme egy számot kódol az ötszámos összefoglalásból. Ha tudjuk, melyik melyik, akkor a diagram dekorációból elemzéssé válik.

  • Alsó zsanér: az első kvartilis, a Q1. A megfigyelések huszonöt százaléka ez alatt található.
  • Középvonal: a második kvartilis. A dobozon belüli helyzete ferdülést mutat: az alsó vonal azt jelenti, hogy az adatok jobbra ferdültek.
  • Felső zsanér: a harmadik kvartilis, a Q3. A megfigyelések hetvenöt százaléka ez alatt található.
  • Box magasság: az interkvartilis tartomány, IQR = Q3 – Q1, amely az adatok középső felét tartalmazza, és a terjedés standard robusztus mérőszáma.
  • Pofaszakáll: A legszélsőségesebb megfigyelésig terjednek, még mindig a legközelebbi csuklópont IQR-jének 1.5-szeresén belül. Nem ezek a minimum és a maximum.
  • Pontok a bajuszon túl: az 1.5-ös IQR szabály által kiugróként megjelölt megfigyelések.

Két figyelmeztetés. Először is, a „kiugró érték” itt egy statisztikai jelzés, nem pedig hiba: egy ferde eloszlásban, mint például az ózonkoncentrációban, magas értékek várhatók, és ezeket nem szabad törölni. Másodszor, a dobozdiagram elrejti az eloszlás alakját, így két azonos dobozzal rendelkező csoportnak nagyon eltérő alapadatai lehetnek. A jitteres pontok hozzáadása, amint az alább látható, ezt kivédi.

Box Plot vs Histogram vs Violin Plot R-ben

Mindhárom diagram egy numerikus eloszlást ír le, de mindegyik felfed valamit, amit a többi elrejt.

Kritériumai Box Cselekmény hisztogram Hegedűs cselekmény
Műsorok Medián, kvartilisek, kiugró értékek Gyakoriság az egyes tárolókban Teljes sűrűséggörbe
Revtöbb csúcsot is elér Nem Igen Igen
Jelzi a kiugró értékeket Igen, kifejezetten Csak vizuálisan Nem közvetlenül
Sok csoport összehasonlítása Kiváló Kínos
Tuningválasztásra van szükség Nem Igen, kukák száma Igen, sávszélesség
ggplot2 objektum geom_boxplot() geom_hisztogram() geom_violin()

Gyakori kompromisszum, hogy egy hegedűdiagramot egy keskeny dobozdiagrammal rajzolnak, amely egyetlen diagramon tartja a sűrűségalakzatot és a kvartilis összegzést. Lásd a hisztogram bemutató az összehasonlítás binning oldalához.

Teremt Box Cselekmény

Mielőtt elkezdené az első boxplot() létrehozását R-ben, a következőképpen kell manipulálnia az adatokat:

  • 1. lépés: Importálja az adatokat
  • 2. lépés: Dobja el a szükségtelen változókat
  • 3. lépés: A hónap rendezett tényezővé alakítása
  • 4. lépés: Hozz létre egy új kategorikus változót, amely minden hónapot három részre oszt: Kezdet, Középső és Vége
  • 5. lépés: Távolítsa el a hiányzó megfigyeléseket

Mindezek a lépések a dplyr és a %>% pipeline operátor segítségével hajthatók végre.

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

Jó gyakorlat az adatok szerkezetének ellenőrzése a glimpse() függvénnyel.

glimpse(data_air)

output:

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

Mind az Ozone, mind a Solar.R tartalmaz NA értékeket. Mivel a geom_boxplot() csendben eltörölné ezeket, és figyelmeztetést írna ki, célszerűbb explicit módon eltávolítani őket.

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

Alapvető dobozrajz

Most ábrázold az ózon eloszlását havonta.

# 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 Magyarázat

  • Tárolja a grafikont további felhasználás céljából
    • box_plot: az alapdiagram a box_plot objektumban tárolódik, ami lehetővé teszi rétegek hozzáadását később a teljes hívás megismétlése nélkül.
  • Adja hozzá a geometriai objektumot
    • A data_air_nona adatkészletet átadja a ggplot boxplotnak.
    • Az aes() argumentumon belül hozzáadja az x tengelyt és az y tengelyt.
    • A + jel azt jelenti, hogy azt szeretné, hogy R továbbra is olvassa a kódot. Feltörésével olvashatóbbá teszi a kódot.
    • A geom_boxplot() segítségével hozzon létre egy dobozdiagramot

output:

alapvető Box Cselekmény

Változtassa meg a grafikon oldalát

Megfordíthatja a grafikon oldalát.

box_plot +
  geom_boxplot()+
  coord_flip()

Code Magyarázat

  • box_plot: A tárolt grafikont használja. Ez elkerüli az összes kód újraírását minden alkalommal, amikor új információt ad a grafikonhoz.
  • geom_boxplot(): dobozok és bajuszvonalak kirajzolása
  • coord_flip(): A grafikon oldalának megfordítása

output:

A grafikon oldalának módosítása

Változtassa meg a kiugró színt

Módosíthatja a kiugró csíkok színét, alakját és méretét.

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

Code Magyarázat

  • outlier.colour=”red”: A kiugró értékek színének szabályozása
  • outlier.shape=2: A kiugró alakzat módosítása. A 2 a háromszögre vonatkozik
  • outlier.size=3: A háromszög méretének módosítása. Nagyobb számok nagyobb jelölőket rajzolnak.

output:

Változtassa meg a Outlier színét

Összefoglaló statisztika hozzáadása

Rávetíthet egy összesítő statisztikát, például a csoportátlagot, amelyet maga a dobozdiagram nem mutat.

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

Code Magyarázat

  • A stat_summary() függvény egy számított statisztikát ad hozzá a dobozdiagram tetejéhez.
  • A fun argumentum szabályozza, hogy melyik statisztika kerüljön visszaadásra. Itt ez az átlag. Megjegyzendő, hogy a régebbi kód a fun.y fájlt használja, amely a ggplot2 3.3.0-s verziójában elavult.
  • Megjegyzés: Egyéb statisztikák is elérhetők, például min és max. Egynél több statisztika is megjeleníthető ugyanazon a grafikonon
  • geom = „pont”: ábrázolja az átlagot egy ponttal
  • size=3: A pont mérete
  • szín =”acélkék”: A pontok színe

output:

Összefoglaló statisztika hozzáadása

Box Telek pontokkal

Ezután adj hozzá egy pontdiagram réteget a dobozok tetejére. Minden pont egyetlen megfigyelést jelöl, így láthatóvá válik a dobozok mögötti minta mérete.

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

Code Magyarázat

  • A geom_dotplot() egy pontot rajzol minden megfigyeléshez, minden rekeszbe halmozva.
  • binaxis='y': Módosítsa a pontok helyzetét az y tengely mentén. Alapértelmezés szerint x-tengely
  • dotsize=1: A pontok mérete
  • stackdir='center': A pontok halmozásának módja: Négy érték:
    • „fel” (alapértelmezett),
    • "le"
    • "központ"
    • "középpont"

output:

Box Telek pontokkal

Ellenőrzés Esztétika a Box Cselekmény

Változtassa meg a doboz színét

Megváltoztathatja a csoport színeit.

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

Code Magyarázat

  • A csoportok színeit az aes() map szabályozza.pingA color= Month paraméterrel módosíthatod a doboz és a bajuszdiagram színét a hónapoknak megfelelően.

output:

Változtassa meg a színét Box

Box telek több csoporttal

Lehetőség van több csoport hozzáadására is. Megjelenítheti a levegőminőség különbségét a mérés napja szerint.

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

Code Magyarázat

  • Az aes() térképping a geometriai objektum változója vezérli a megjelenítendő csoportokat (ennek a változónak faktornak kell lennie)
  • Az aes(fill= day_cat) lehetővé teszi három doboz létrehozását minden hónaphoz az x tengelyen

output:

Box Telek több csoporttal

Box Telek remegő pontokkal

Az egyes megfigyelések ábrázolásának egy másik módja a jitteres pontok használata. A jitterezés a szokásos választás, amikor egy kategorikus x tengely miatt sok pont ugyanarra a pozícióra kerül.

Ez a módszer elkerüli az átfedéstping a diszkrét adatok közül.

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

Code Magyarázat

  • A geom_jitter() függvény minden ponthoz egy kis véletlenszerű elmozdulást ad hozzá, így átfedi a pontokat.ping értékek válnak láthatóvá.
  • shape=15 megváltoztatja a pontok alakját. A 15 a négyzeteket jelöli
  • szín = „acélkék”: a pont színének módosítása
  • position = position_jitter(szélesség = 0.21): azt szabályozza, hogy a pontok milyen mértékben mozduljanak el oldalirányban, x tengely mértékegységben mérve. Az alapértelmezett érték a kategóriák közötti távolság 40 százaléka.

output:

Box Telek remegő pontokkal

Látható a különbség az első grafikon között a jitter módszerrel és a második között a pont módszerrel.

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

Box Telek remegő pontokkal

hornyolt Box Cselekmény

A geom_boxplot() érdekes tulajdonsága az R bevágásos boxplot függvénye. A bevágási diagram leszűkíti a mezőt a medián körül. A bemetszett dobozos diagram fő célja a medián jelentőségének összehasonlítása a csoportok között. Szilárd bizonyíték van arra, hogy két csoport eltérő mediánnal rendelkezik, amikor a bevágások nem fedik át egymást. A bevágás kiszámítása a következőképpen történik:

hornyolt Box Cselekmény

Itt az IQR az interkvartilis tartományt, n pedig a csoporton belüli megfigyelések számát jelöli. A bevágás nagyjából a medián 95 százalékos konfidenciaintervallumát fedi le.

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

Code Magyarázat

  • geom_boxplot(notch = TRUE): a dobozdiagramot a medián körüli bevágásokkal rajzolja ki

output:

hornyolt Box Cselekmény

Címek, címkék és egyéni színek hozzáadása egyhez Box R-ben ábrázolt telek

A fenti diagramok a ggplot2 alapértelmezett értékeit használják, amelyek a változóneveket közvetlenül az adatkeretből veszik. Egy közzétehető diagramhoz olvasható címkékre és egy átgondolt palettára van szükség.

Címek és tengelyfeliratok. Egyetlen labs() hívás beállítja az összes szöveges elemet:

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

Saját színek kiválasztása. Használd a scale_fill_manual() függvényt, ha a kitöltés az aes() függvényen belül van leképezve, és a scale_colour_manual() függvényt, ha a szín:

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

A jelmagyarázat itt ki van kapcsolva, mivel az x tengely már tartalmazza az egyes hónapok nevét, így az ismétlése helypazarlás lenne.

A dobozok átrendezése. A faktorszintek határozzák meg a tengely sorrendjét. Mivel a Hónap rendezett faktorként lett létrehozva, már kronológiai sorrendben olvasható. Rendezetlen faktorok esetén a medián szerint kell rendezni:

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

A diagram mentése. A ggsave() függvény az utolsó diagramot lemezre írja egy általad beállított felbontásban:

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

Box Ábrázolás R-ben: Code Referencia

Az alábbi táblázat felsorolja a ggplot2 hívást a fent tárgyalt dobozdiagram-változatokhoz:

Objektív Code
Alapvető dobozrajz
ggplot(df, aes(x = x1, y = y)) + geom_boxplot()
Fordítsa meg a tájolást
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip()
Vágott dobozos telek
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE)
Box cselekmény remegő pontokkal
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21))
Színezés csoportonként
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot()
Több csoport kategóriánként
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2))
Adja hozzá a csoport átlagát
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point")

Ellenőrizze még:- R oktatóanyag kezdőknek: Ismerje meg az R programozási nyelvet

GYIK

A bajuszszálak a legszélsőségesebb megfigyelési pontot érik el, amely a legközelebbi kvartilis interkvartilis tartományának 1.5-szeresén belül található. Ezek nem a minimum és a maximum értékek, és mindent, ami ezeken túl van, kiugró pontként jelölünk.

Nem automatikusan. Az 1.5-ös IQR szabály egy konvenció, nem pedig a hiba bizonyítása. Először vizsgáljon meg minden pontot: az olyan torzított adatok, mint az ózonszint-mérés, természetesen magas értékeket eredményeznek, amelyek valódi mérések.

Átfedésping A bevágások arra utalnak, hogy nincs erős bizonyíték arra, hogy a két medián különbözik.ping A bevágások valószínűsíthető valós különbséget jeleznek, ami nagyjából 95 százalékos megbízhatósági összehasonlításnak felel meg.

Box A diagramok a betanítás előtti standard feltáró lépések: feltárják az osztályok közötti ferdülést, kiugró értékeket és eltérő jellemzőskálákat. A csapatok a modellek pontosságának összehasonlítására is használják őket a keresztvalidációs rétegek között.

Igen. A mesterséges intelligencia asszisztensek el tudják magyarázni a hibákat, például ha egy folytonos x tengely egyetlen dobozt eredményez, és javasolhatják a megfelelő aes() térképet.ping, és jelölje meg az elavult argumentumokat, például a fun.y-t. Mindig futtassa újra a javított kódot a saját adatain.

Foglald össze ezt a bejegyzést a következőképpen: