boxplot() în R: Cum se face BoxParcele în RStudio
⚡ Rezumat inteligent
BoxUn grafic în R rezumă o distribuție numerică prin mediană, quartile, whiskers și outliers folosind geom_boxplot() din ggplot2. Această demonstrație construiește un box plot pe setul de date privind calitatea aerului și stratifică culori, puncte, jitter, notch-uri și comparații de grup.
boxplot() în R
boxplot() în R ajută la vizualizarea distribuției datelor pe cuartile și la detectarea prezenței valorilor aberante. Puteți folosi obiectul geometric geom_boxplot() din biblioteca ggplot2 pentru a desena un boxplot() în R.
Vom folosi setul de date privind calitatea aerului pentru a introduce boxplot() în R cu ggplot. Setul de date înregistrează măsurători zilnice ale calității aerului în New York din mai până în septembrie 1973 și conține 153 de observații. Vom folosi următoarele variabile:
- Ozon: variabilă numerică
- Vânt: variabilă numerică
- Luna: mai până în septembrie. Variabila numerica
Înainte de a desena una, merită să știi exact ce reprezintă fiecare parte a cutiei.
Cum se citește a Box Grafic: Cuartile, IQR și valori aberante
Fiecare element al unui box plot codifică un număr din sumarul de cinci numere. Cunoașterea fiecărui număr transformă diagrama din decorativă în analiză.
- Balama inferioară: prima cuartilă, Q1. Douăzeci și cinci la sută din observații se situează sub aceasta.
- Linia mediană: al doilea quartil. Poziția sa în interiorul casetei indică o asimetrie: o linie împinsă spre jos înseamnă că datele sunt asimetrice spre dreapta.
- Balamaua superioară: a treia cuartilă, Q3. Șaptezeci și cinci la sută din observații se situează sub aceasta.
- Box înălţime: intervalul intercuartil, IQR = Q3 – Q1, care conține jumătatea din mijloc a datelor și este măsura robustă standard a dispersiei.
- Mustati: Acestea se extind până la observația cea mai extremă, încă în limita a 1.5 ori IQR-ului celei mai apropiate articulații. Nu reprezintă minimul și maximul.
- Puncte dincolo de mustăți: observații marcate ca valori aberante conform regulii IQR de 1.5.
Două precauții. În primul rând, o „valoare aberantă” este un semnal statistic, nu o eroare: într-o distribuție asimetrică, cum ar fi concentrația de ozon, sunt așteptate valori mari și nu ar trebui șterse. În al doilea rând, o diagramă tip box plot ascunde forma distribuției, astfel încât două grupuri cu box-uri identice pot avea date subiacente foarte diferite. Adăugarea de puncte trepidante, așa cum se arată mai jos, protejează împotriva acestui lucru.
Box Plot vs Histogramă vs Diagrama Viorii în R
Toate cele trei grafice descriu o distribuție numerică, dar fiecare dezvăluie ceva ce celelalte ascund.
| Criterii | Box intrigă | Histogramă | Complot pentru vioară |
|---|---|---|---|
| Emisiuni | Mediană, cuartile, valori aberante | Frecvența în fiecare interval | Curba densității complete |
| Revvârfuri multiple eals | Nu | Da | Da |
| Semnalează valorile aberante | Da, explicit | Doar vizual | Nu direct |
| Compararea mai multor grupuri | Excelent | neîndemânatic | Bun |
| Necesită o alegere de reglare | Nu | Da, numărul de containere | Da, lățime de bandă |
| obiect ggplot2 | geom_boxplot() | geom_histogram() | geom_violin() |
Un compromis comun este desenarea unui grafic de tip vioară cu un box plot îngust în interiorul său, care păstrează forma densității și rezumatul quartilelor într-un singur grafic. Vedeți tutorial histogramă pentru partea de binning a comparației.
Crează Box intrigă
Înainte de a începe să creați primul boxplot() în R, trebuie să manipulați datele după cum urmează:
- Pasul 1: importați datele
- Pasul 2: Eliminați variabilele inutile
- Pasul 3: Conversia lunii într-un factor ordonat
- Pasul 4: Creați o nouă variabilă categorică, împărțind fiecare lună în trei părți: Început, Mijloc și Sfârșit
- Pasul 5: Eliminați observațiile lipsă
Toți acești pași se fac cu dplyr și operatorul pipeline %>%.
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"))))
O bună practică este să verificați structura datelor cu funcția glimpse().
glimpse(data_air)
ieșire:
## 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...
Atât Ozone, cât și Solar.R conțin valori NA. Deoarece geom_boxplot() le-ar elimina în mod silențios și ar afișa un avertisment, este mai ușor să le elimini explicit.
# Step 5
data_air_nona <-data_air %>% na.omit()
Box plot de bază
Acum reprezentați grafic distribuția ozonului pe luni.
# 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 Explicație
- Păstrați graficul pentru utilizare ulterioară
- box_plot: graficul de bază este stocat în obiectul box_plot, ceea ce vă permite să adăugați straturi ulterior fără a repeta întregul apel
- Adăugați obiectul geometric
- Transmiteți setul de date data_air_nona la ggplot boxplot.
- În argumentul aes(), adăugați axa x și axa y.
- Semnul + înseamnă că doriți ca R să citească în continuare codul. Face codul mai lizibil prin spargerea lui.
- Utilizați geom_boxplot() pentru a crea un diagramă cu casete
ieșire:
Schimbați partea graficului
Puteți întoarce partea laterală a graficului.
box_plot +
geom_boxplot()+
coord_flip()
Code Explicație
- box_plot: Folosiți graficul pe care l-ați stocat. Evită rescrierea tuturor codurilor de fiecare dată când adăugați informații noi în grafic.
- geom_boxplot(): desenează cutiile și mustățile
- coord_flip(): Întoarce partea graficului
ieșire:
Schimbați culoarea valorii aberante
Puteți schimba culoarea, forma și dimensiunea valorii aberante.
box_plot +
geom_boxplot(outlier.colour = "red",
outlier.shape = 2,
outlier.size = 3) +
theme_classic()
Code Explicație
- outlier.colour=”red”: controlați culoarea valorii aberante
- outlier.shape=2: Schimbați forma valorii aberante. 2 se referă la triunghi
- outlier.size=3: Modifică dimensiunea triunghiului. Numerele mai mari desenează marcaje mai mari.
ieșire:
Adăugați o statistică rezumată
Puteți suprapune o statistică sumarizată, cum ar fi media grupului, pe care diagrama în sine nu o afișează.
box_plot +
geom_boxplot() +
stat_summary(fun.y = mean,
geom = "point",
size = 3,
color = "steelblue") +
theme_classic()
Code Explicație
- stat_summary() adaugă o statistică calculată peste diagrama tip box plot
- Argumentul fun controlează ce statistică este returnată. Aici este media. Rețineți că codul mai vechi folosește fun.y, pe care ggplot2 l-a depreciat în versiunea 3.3.0.
- Notă: Alte statistici sunt disponibile, cum ar fi min și max. În același grafic pot fi afișate mai multe statistici
- geom = „punct”: Trasează media cu un punct
- dimensiune=3: Dimensiunea punctului
- culoare =”steelblue”: Culoarea punctelor
ieșire:
Box Complot cu puncte
Apoi, adăugați un strat de tip grafic cu puncte deasupra casetelor. Fiecare punct reprezintă o singură observație, ceea ce face vizibilă dimensiunea eșantionului din spatele fiecărei casete.
box_plot +
geom_boxplot() +
geom_dotplot(binaxis = 'y',
dotsize = 1,
stackdir = 'center') +
theme_classic()
Code Explicație
- geom_dotplot() desenează câte un punct per observație, suprapus în fiecare compartiment
- binaxis='y': Schimbați poziția punctelor de-a lungul axei y. Implicit, axa x
- dotsize=1: Dimensiunea punctelor
- stackdir='center': Mod de a stivui punctele: Patru valori:
- „sus” (implicit),
- "jos"
- "centru"
- „întregul centru”
ieșire:
Controlul estetic al Box intrigă
Schimbați culoarea cutiei
Puteți schimba culorile grupului.
ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) + geom_boxplot() + theme_classic()
Code Explicație
- Culorile grupurilor sunt controlate în harta aes().pingPuteți folosi color= Month pentru a schimba culoarea diagramei box and whisker în funcție de luni.
ieșire:
Box complot cu mai multe grupuri
De asemenea, este posibil să adăugați mai multe grupuri. Puteți vizualiza diferența de calitate a aerului în funcție de ziua măsurii.
ggplot(data_air_nona, aes(Month, Ozone)) + geom_boxplot(aes(fill = day_cat)) + theme_classic()
Code Explicație
- Harta aes()ping al obiectului geometric controlează grupurile de afișat (această variabilă trebuie să fie un factor)
- aes(fill= day_cat) permite crearea a trei casete pentru fiecare lună pe axa x
ieșire:
Box Complot cu puncte agitate
O altă modalitate de a afișa observațiile individuale este cu punctele cu trepidații. Trepidațiile sunt alegerea obișnuită atunci când o axă x categorică face ca mai multe puncte să aterizeze în aceeași poziție.
Această metodă evită suprapunereaping a datelor discrete.
box_plot +
geom_boxplot() +
geom_jitter(shape = 15,
color = "steelblue",
position = position_jitter(width = 0.21)) +
theme_classic()
Code Explicație
- geom_jitter() adaugă o mică deplasare aleatorie fiecărui punct, astfel încât să se suprapunăping valorile devin vizibile.
- shape=15 modifică forma punctelor. 15 reprezintă pătratele
- culoare = „albastru de oțel”: Schimbați culoarea punctului
- position = position_jitter(width = 0.21): controlează distanța dintre puncte, măsurată în unități pe axa x. Valoarea implicită este de 40% din distanța dintre categorii.
ieșire:
Puteți vedea diferența dintre primul grafic cu metoda jitter și al doilea cu metoda punctului.
box_plot +
geom_boxplot() +
geom_point(shape = 5,
color = "steelblue") +
theme_classic()
dințat Box intrigă
O caracteristică interesantă a geom_boxplot(), este o funcție de tip boxplot cu crestături în R. Graficul cu crestături îngustează caseta în jurul mediei. Scopul principal al unui diagramă cu crestături este de a compara semnificația mediei între grupuri. Există dovezi puternice că două grupuri au mediane diferite atunci când crestăturile nu se suprapun. O crestătură se calculează după cum urmează:
Aici, IQR este intervalul intercuartil, iar n este numărul de observații din grup. Crestătura se întinde aproximativ peste intervalul de încredere de 95% al medianei.
box_plot +
geom_boxplot(notch = TRUE) +
theme_classic()
Code Explicație
- geom_boxplot(notch = TRUE): desenează diagrama box cu crestături în jurul medianei
ieșire:
Cum se adaugă titluri, etichete și culori personalizate la un Box Grafic în R
Graficele de mai sus folosesc valorile implicite ale ggplot2, care preiau numele variabilelor direct din cadrul de date. O diagramă publicabilă are nevoie de etichete lizibile și de o paletă de culori specifică.
Titluri și etichete ale axelor. Un apel labs() setează fiecare element de text:
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()
Alegerea propriilor culori. Folosește scale_fill_manual() când fill este mapat în interiorul aes() și scale_colour_manual() când colour este:
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 este dezactivată aici deoarece axa x denumește deja fiecare lună, așa că repetarea ei ar irosi spațiu.
Reordonarea cutiilor. Nivelurile factorilor determină ordinea pe axă. Deoarece „Month” a fost creat ca un factor ordonat, acesta se citește deja cronologic. Pentru un factor neordonat, sortați după mediană:
ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) + geom_boxplot() + theme_classic()
Salvarea graficului. ggsave() scrie ultimul grafic pe disc la o rezoluție pe care o controlezi:
ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)
Box Grafic în R: Code Referinţă
Tabelul de mai jos listează apelul ggplot2 pentru fiecare variantă de box plot discutată mai sus:
| Obiectiv | Code |
|---|---|
| Box plot de bază |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() |
| Inversați orientarea |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip() |
| Box plot crestat |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE) |
| Box complot cu puncte agitate |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21)) |
| Colorează după grup |
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot() |
| Mai multe grupuri per categorie |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2)) |
| Adăugați media grupului |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point") |
Verificați și: - Tutorial R pentru începători: Învață limbajul de programare R












