boxplot() i R: Sådan laver du BoxGrundstykker i RStudio

⚡ Smart opsummering

BoxEt plot i R opsummerer en numerisk fordeling gennem dens median, kvartiler, whiskers og outliers ved hjælp af geom_boxplot() fra ggplot2. Denne gennemgang opbygger et boksplot på luftkvalitetsdatasættet og lægger lag på farve, prikker, jitter, hak og gruppesammenligninger.

  • 📐 Femcifret oversigt: Kassen spænder over den første til tredje kvartil, linjen markerer medianen, og knurhårene når 1.5 gange interkvartilintervallet.
  • 🧱 Basissyntaks: ggplot(df, aes(x = gruppe, y = værdi)) + geom_boxplot() producerer én boks pr. niveau i gruppenping faktor.
  • ???? Outlier-styling: outlier.colour, outlier.shape og outlier.size styrer, hvordan punkter ud over knurhårene tegnes.
  • 💠 Viser observationer: geom_jitter() forskyder overlapping peger sidelæns, hvilket afslører stikprøvestørrelsen bag hver boks.
  • 📉 Afskåret BoxDet er: hak = SAND tegner konfidensintervallet for medianen og ikke-overlapningping Hakkene indikerer en reel forskel.
  • 🎨 Grouping: Kortping `fill inside geom_boxplot()` opdeler hver kategori i flere side om side-bokse.

Boxplot i R

boxplot() i R

boxplot() i R hjælper med at visualisere fordelingen af ​​data efter kvartil og detektere tilstedeværelsen af ​​outliers. Du kan bruge det geometriske objekt geom_boxplot() fra ggplot2-biblioteket til at tegne et boxplot() i R.

Vi vil bruge luftkvalitetsdatasættet til at introducere boxplot() i R med ggplot. Datasættet registrerer daglige luftkvalitetsmålinger i New York fra maj til september 1973 og indeholder 153 observationer. Vi vil bruge følgende variabler:

  • Ozon: Numerisk variabel
  • Vind: Numerisk variabel
  • Måned: maj til september. Numerisk variabel

Før man tegner en, er det værd at vide præcis, hvad hver del af kassen repræsenterer.

Sådan læser du a Box Plot: Kvartiler, IQR og outliers

Hvert element i et boksplot koder ét tal fra den femcifrede opsummering. At vide, hvilket der er hvilket, forvandler diagrammet fra dekoration til analyse.

  • Nederste hængsel: den første kvartil, Q1. 25 procent af observationerne ligger under den.
  • Median linje: den anden kvartil. Dens placering inde i boksen afslører skævhed: en linje skubbet mod bunden betyder, at dataene er højreskæve.
  • Øvre hængsel: den tredje kvartil, Q3. 75 procent af observationerne ligger under den.
  • Box højde: interkvartilintervallet, IQR = Q3 – Q1, som indeholder den midterste halvdel af dataene og er det robuste standardmål for spredning.
  • Knurhår: De strækker sig til den mest ekstreme observation, stadig inden for 1.5 gange IQR'en for det nærmeste hængsel. De er ikke minimum og maksimum.
  • Pointer ud over knurhårene: observationer markeret som outliers af den 1.5 IQR-regel.

To advarsler. For det første er en "outlier" her et statistisk flag, ikke en fejl: i en skæv fordeling, såsom ozonkoncentrationen, forventes høje værdier, som ikke bør slettes. For det andet skjuler et boksplot fordelingens form, så to grupper med identiske bokse kan have meget forskellige underliggende data. Tilføjelse af jitterede punkter, som vist nedenfor, beskytter mod dette.

Box Plot vs. histogram vs. violinplot i R

Alle tre diagrammer beskriver en numerisk fordeling, men hver især afslører noget, som de andre skjuler.

Kriterier Box Grund Histogram Violin Plot
Shows Median, kvartiler, outliers Frekvens i hver bin Fuld tæthedskurve
Revopnår flere toppe Ingen Ja Ja
Markerer outliers Ja, eksplicit Kun visuelt Ikke direkte
Sammenligning af mange grupper Fantastike Akavet god
Kræver et valg af tuning Ingen Ja, antal beholdere Ja, båndbredde
ggplot2-objekt geom_boxplot() geom_histogram() geom_violin()

Et almindeligt kompromis er at tegne et violinplot med et smalt boksplot indeni, hvilket bevarer tæthedsformen og kvartiloversigten i et enkelt diagram. Se histogram-vejledning for binning-siden af ​​sammenligningen.

Opret Box Grund

Før du begynder at oprette dit første boxplot() i R, skal du manipulere dataene som følger:

  • Trin 1: Importer dataene
  • Trin 2: Drop unødvendige variabler
  • Trin 3: Konverter Måned til en ordnet faktor
  • Trin 4: Opret en ny kategorisk variabel, der opdeler hver måned i tre dele: Start, Midte og Slut
  • Trin 5: Fjern manglende observationer

Alle disse trin udføres med dplyr og pipeline-operatøren %>%.

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

En god praksis er at tjekke strukturen af ​​dataene med funktionen glimpse().

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

Både Ozone og Solar.R indeholder NA-værdier. Da geom_boxplot() ville slette dem lydløst og udskrive en advarsel, er det mere overskueligt at fjerne dem eksplicit.

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

Grundlæggende boksplot

Afsæt nu fordelingen af ​​ozon pr. måned.

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

  • Gem grafen til videre brug
    • box_plot: Basisplottet gemmes i objektet box_plot, hvilket giver dig mulighed for at tilføje lag senere uden at gentage hele kaldet.
  • Tilføj det geometriske objekt
    • Du videregiver datasættet data_air_nona til ggplot boxplot.
    • Inde i aes()-argumentet tilføjer du x-aksen og y-aksen.
    • + tegnet betyder, at du vil have R til at blive ved med at læse koden. Det gør koden mere læsbar ved at bryde den.
    • Brug geom_boxplot() til at oprette et boxplot

Output:

Grundlæggende Box Grund

Skift side af grafen

Du kan vende siden af ​​grafen.

box_plot +
  geom_boxplot()+
  coord_flip()

Code Forklaring

  • box_plot: Du bruger den graf du har gemt. Det undgår at omskrive alle koderne, hver gang du tilføjer ny information til grafen.
  • geom_boxplot(): tegn kasserne og skægmarkørerne
  • coord_flip(): Vend siden af ​​grafen

Output:

Skift side af grafen

Skift farve på udliggeren

Du kan ændre farven, formen og størrelsen på udliggere.

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

Code Forklaring

  • outlier.colour=”rød”: Styr farven på afvigerne
  • outlier.shape=2: Skift formen på outlieren. 2 henviser til trekant
  • outlier.size=3: Ændr størrelsen på trekanten. Større tal tegner større markører.

Output:

Skift farve på outlier

Tilføj en opsummerende statistik

Du kan lægge en opsummerende statistik, såsom gruppegennemsnittet, oven på hinanden, hvilket selve boksplottet ikke viser.

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

Code Forklaring

  • stat_summary() tilføjer en beregnet statistik oven på boksplottet
  • Argumentet fun styrer hvilken statistik der returneres. Her er det middelværdien. Bemærk, at ældre kode bruger fun.y, som ggplot2 udfasede i version 3.3.0.
  • Bemærk: Andre statistikker er tilgængelige, såsom min og max. Mere end én statistik kan vises i samme graf
  • geom = "punkt": Plot gennemsnittet med et punkt
  • størrelse=3: Størrelse af spidsen
  • farve =”stålblå”: Farve på punkterne

Output:

Tilføj en oversigtsstatistik

Box Plot med prikker

Tilføj derefter et prikplotlag oven på boksene. Hver prik repræsenterer en enkelt observation, hvilket gør stikprøvestørrelsen bag hver boks synlig.

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

Code Forklaring

  • geom_dotplot() tegner én prik pr. observation, stablet inden for hver bin
  • binaxis='y': Ændre placeringen af ​​prikkerne langs y-aksen. Som standard x-akse
  • dotsize=1: Størrelsen på prikkerne
  • stackdir='center': Måde at stable prikkerne på: Fire værdier:
    • "op" (standard),
    • "ned"
    • "centrum"
    • "hele midten"

Output:

Box Plot med prikker

Kontrol Æstetik af Box Grund

Skift farven på boksen

Du kan ændre gruppens farver.

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

Code Forklaring

  • Gruppernes farver styres i aes()-kortetpingDu kan bruge color=Month til at ændre farven på boks-og-hår-plottet i henhold til månederne.

Output:

Skift farven på Box

Box plot med flere grupper

Det er også muligt at tilføje flere grupper. Du kan visualisere forskellen i luftkvaliteten alt efter måledagen.

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

Code Forklaring

  • aes()-kortetping af det geometriske objekt styrer de grupper, der skal vises (denne variabel skal være en faktor)
  • aes(fill= day_cat) giver mulighed for at oprette tre kasser for hver måned i x-aksen

Output:

Box Plot med flere grupper

Box Plot med rystede prikker

En anden måde at vise individuelle observationer på er med jitterede punkter. Jittering er det sædvanlige valg, når en kategorisk x-akse får mange punkter til at lande på samme position.

Denne metode undgår overlapningping af de diskrete data.

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

Code Forklaring

  • geom_jitter() tilføjer en lille tilfældig forskydning til hvert punkt, så overlapningen skerping værdier bliver synlige.
  • form=15 ændrer punkternes form. 15 repræsenterer kvadraterne
  • farve = "stålblå": Skift farven på punktet
  • position = position_jitter(width = 0.21): styrer, hvor langt punkter forskydes sidelæns, målt i x-aksenheder. Standardværdien er 40 procent af afstanden mellem kategorier.

Output:

Box Plot med rystede prikker

Du kan se forskellen mellem den første graf med jittermetoden og den anden med punktmetoden.

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

Box Plot med rystede prikker

Afskåret Box Grund

Et interessant træk ved geom_boxplot(), er en notched boxplot-funktion i R. Notch-plottet indsnævrer boksen omkring medianen. Hovedformålet med et notched box plot er at sammenligne betydningen af ​​medianen mellem grupper. Der er stærke beviser for, at to grupper har forskellige medianer, når hakkene ikke overlapper hinanden. Et hak beregnes som følger:

Afskåret Box Grund

Her er IQR interkvartilintervallet, og n er antallet af observationer i gruppen. Hakket spænder omtrent over medianens 95-procents konfidensinterval.

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

Code Forklaring

  • geom_boxplot(notch = TRUE): tegn boksplottet med hak omkring medianen

Output:

Afskåret Box Grund

Sådan tilføjer du titler, etiketter og brugerdefinerede farver til en Box Plot i R

Ovenstående plot bruger ggplot2-standardindstillinger, som tager variabelnavne direkte fra datarammen. Et publicerbart diagram kræver læsbare etiketter og en bevidst palet.

Titler og aksenavne. Ét labs()-kald sætter hvert tekstelement:

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

Valg af dine egne farver. Brug scale_fill_manual() når udfyldning er mappet inde i aes(), og scale_colour_manual() når farven er:

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

Forklaringen er slået fra her, fordi x-aksen allerede navngiver hver måned, så gentagelse ville spilde plads.

Omarrangering af kasserne. Faktorniveauer styrer rækkefølgen på aksen. Fordi Måned blev oprettet som en ordnet faktor, læses den allerede kronologisk. For en uordnet faktor skal du i stedet sortere efter medianen:

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

Gemmer diagrammet. ggsave() skriver det sidste plot til disken i en opløsning, du kontrollerer:

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

Box Plot i R: Code Henvisning

Tabellen nedenfor viser ggplot2-kaldet for hver boksplotvariant, der er dækket ovenfor:

Objektiv Code
Grundlæggende boksplot
ggplot(df, aes(x = x1, y = y)) + geom_boxplot()
Vend retningen
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip()
Afhugget kasseplot
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE)
Box plot med rystede prikker
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21))
Farve efter gruppe
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot()
Flere grupper pr. kategori
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2))
Læg gruppens middelværdi sammen
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point")

Tjek også:- R Tutorial for begyndere: Lær R programmeringssprog

Ofte Stillede Spørgsmål

Kærtegnene når den mest ekstreme observation inden for 1.5 gange interkvartilintervallet for den nærmeste kvartil. De er ikke minimum og maksimum, og alt ud over dem tegnes som et outlier-punkt.

Ikke automatisk. 1.5 IQR-reglen er en konvention, ikke et bevis på fejl. Undersøg hvert punkt først: skæve data såsom ozonaflæsninger producerer naturligt høje værdier, der er ægte målinger.

overlapping Hakkene antyder, at der ikke er stærke beviser for, at de to medianer er forskellige. Ikke-overlapningping Hak indikerer en sandsynlig reel forskel, hvilket omtrent svarer til en 95 procents konfidenssammenligning.

Box Plots er et standard udforskningstrin før træning: de eksponerer skævhed, outliers og forskellige funktionsskalaer på tværs af klasser. Hold bruger dem også til at sammenligne modelnøjagtighed på tværs af krydsvalideringsfoldninger.

Ja. AI-assistenter kan forklare fejl såsom en kontinuerlig x-akse, der producerer en enkelt boks, foreslå det rigtige aes()-kortping, og markér forældede argumenter som fun.y. Kør altid den rettede kode igen på dine egne data.

Opsummer dette indlæg med: