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.

  • 📐 Rezumat în cinci numere: Caseta se întinde de la primul până la al treilea quartil, linia marchează mediana, iar mustățile ating de 1.5 ori intervalul interquartil.
  • 🧱 Sintaxă de bază: ggplot(df, aes(x = group, y = value)) + geom_boxplot() produce câte o casetă per nivel al grupuluiping factor.
  • ???? Stilizare aberantă: outlier.colour, outlier.shape și outlier.size controlează modul în care sunt desenate punctele dincolo de mustăți.
  • 💠 Se afișează observațiile: geom_jitter() deplasează suprapunereaping puncte laterale, dezvăluind dimensiunea eșantionului din spatele fiecărei cutii.
  • 📉 dințat Boxeste: notch = TRUE desenează intervalul de încredere al medianei și nu se suprapuneping Crestăturile indică o diferență reală.
  • 🎨 Grouping: Hartăping fill inside geom_boxplot() împarte fiecare categorie în mai multe casete alăturate.

Boxgrafic în R

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:

pachet de bază Box intrigă

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 partea graficului

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:

Schimbați culoarea Outlierului

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:

Adăugați o statistică rezumată

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:

Box Complot cu puncte

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:

Schimbați culoarea Box

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 mai multe grupuri

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:

Box Complot cu puncte agitate

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

Box Complot cu puncte agitate

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ă:

dințat Box intrigă

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:

dințat Box intrigă

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

Întrebări frecvente

Mustățile ating cea mai extremă observație situată în limita a 1.5 ori intervalul intercuartil al celui mai apropiat cuartil. Nu reprezintă minimul și maximul, iar orice valoare dincolo de acestea este reprezentată ca punct aberant.

Nu automat. Regula IQR de 1.5 este o convenție, nu o dovadă a erorii. Investigați mai întâi fiecare punct: datele distorsionate, cum ar fi citirile de ozon, produc în mod natural valori mari care sunt măsurători autentice.

suprapuneping crestăturile sugerează că nu există dovezi puternice că cele două mediane diferă. Nesuprapunereping Crestăturile indică o diferență reală probabilă, aproximativ echivalentă cu o comparație cu o încredere de 95%.

Box Graficele reprezintă o etapă exploratorie standard înainte de antrenament: expun asimetriile, valorile aberante și scale diferite ale caracteristicilor între clase. Echipele le folosesc și pentru a compara acuratețea modelului în mai multe variante de validare încrucișată.

Da. Asistenții inteligenți artificiali pot explica erori precum o axă x continuă care produce o singură casetă, pot sugera harta aes() corectă.pingși semnalează argumentele depreciate, cum ar fi fun.y. Executați întotdeauna din nou codul corectat pe propriile date.

Rezumați această postare cu: