boxplot() in R: How to Make BoxPiirrokset RStudiossa

⚡ Älykäs yhteenveto

BoxR-kielen plot tiivistää numeerisen jakauman mediaanin, kvartiilien, viiksien ja poikkeavien arvojen avulla käyttäen ggplot2:n geom_boxplot()-funktiota. Tämä ohje luo laatikkodiagrammin ilmanlaatuaineistosta ja lisää siihen kerrokset väreistä, pisteistä, värinästä, lovista ja ryhmävertailusta.

  • 📐 Viiden numeron yhteenveto: Laatikko ulottuu ensimmäisestä kolmanteen kvartiiliin, viiva merkitsee mediaania ja viikset ulottuvat 1.5-kertaisesti kvartiilien väliseen alueeseen.
  • 🧱 Perussyntaksi: ggplot(df, aes(x = group, y = value)) + geom_boxplot() tuottaa yhden laatikon jokaista maanpinnan tasoa kohdenping tekijä.
  • 🔴 Poikkeava tyyli: outlier.colour, outlier.shape ja outlier.size määrittävät, miten viiksien ulkopuoliset pisteet piirretään.
  • 💠 Näytetään havainnot: geom_jitter() siirtää päällekkäisyyttäping osoittaa sivuttain, paljastaen jokaisen laatikon takana olevan otoskoon.
  • 📉 lovinen Boxon: lovi = TOSI piirtää mediaanin luottamusvälin ja päällekkäisyyden puuttumisenping lovet osoittavat todellisen eron.
  • 🎨 Grouping: karttaping fill inside geom_boxplot() jakaa jokaisen kategorian useisiin vierekkäisiin ruutuihin.

Boxjuoni R:ssä

boxplot() kirjassa R

boxplot() kirjassa R auttaa visualisoimaan datan jakautumisen kvartiileittain ja havaitsemaan poikkeamien esiintymisen. Voit käyttää geometristä objektia geom_boxplot() ggplot2-kirjastosta boxplot():n piirtämiseen R:ssä.

Käytämme ilmanlaatudataa ottaaksemme käyttöön boxplot()-funktion R:ssä ggplot-funktion avulla. Data tallentaa päivittäisiä ilmanlaatumittauksia New Yorkissa toukokuusta syyskuuhun 1973 ja sisältää 153 havaintoa. Käytämme seuraavia muuttujia:

  • Otsoni: Numeerinen muuttuja
  • Tuuli: Numeerinen muuttuja
  • Kuukausi: toukokuusta syyskuuhun. Numeerinen muuttuja

Ennen laatikon piirtämistä on hyvä tietää tarkalleen, mitä kukin osa siitä edustaa.

Kuinka lukea a Box Juoni: Kvartiilit, IQR ja poikkeamat

Jokainen laatikkodiagrammin elementti koodaa yhden numeron viisinumeroisesta yhteenvedosta. Kun tiedät, mikä on mikä, kaavio muuttuu koristelusta analyysiksi.

  • Alempi sarana: ensimmäinen kvartiili, Q1. Kaksikymmentäviisi prosenttia havainnoista sijaitsee sen alapuolella.
  • Keskilinja: toinen kvartiili. Sen sijainti laatikon sisällä paljastaa vinouman: alaspäin työntynyt viiva tarkoittaa, että tiedot ovat oikealle vinossa.
  • Yläsarana: kolmas kvartiili, Q3. Seitsemänkymmentäviisi prosenttia havainnoista sijoittuu sen alapuolelle.
  • Box korkeus: kvartiiliväli, IQR = Q3 – Q1, joka sisältää datan keskimmäisen puoliskon ja on hajonnan vakiomittaus.
  • Viikset: Ne ulottuvat äärimmäiseen havaintoon, joka on edelleen 1.5-kertaisen IQR-arvon sisällä lähimmästä saranasta. Ne eivät ole minimi- ja maksimiarvoja.
  • Pisteitä viiksien takana: havainnot, jotka on merkitty poikkeaviksi kyseisellä 1.5-kertaisella IQR-säännöllä.

Kaksi varoitusta. Ensinnäkin "poikkeava arvo" on tässä tilastollinen merkki, ei virhe: vinossa jakaumassa, kuten otsonipitoisuudessa, korkeita arvoja odotetaan, eikä niitä pitäisi poistaa. Toiseksi laatikkodiagrammi piilottaa jakauman muodon, joten kahdella identtisellä laatikolla varustetulla ryhmällä voi olla hyvin erilaiset pohjatiedot. Jitteroituneiden pisteiden lisääminen, kuten alla on esitetty, suojaa tältä.

Box Juoni vs. histogrammi vs. viulujuoni R:ssä

Kaikki kolme kaaviota kuvaavat numeerista jakaumaa, mutta jokainen niistä paljastaa jotain, mitä muut piilottavat.

Kriteeri Box juoni histogrammi Viulun juoni
Näytä Mediaani, kvartiilit, poikkeamat Tiheys kussakin lokerossa Täysi tiheyskäyrä
Revuseita huippuja Ei Kyllä Kyllä
Merkitsee poikkeavat arvot Kyllä, nimenomaisesti Vain visuaalisesti Ei suoraan
Useiden ryhmien vertailu Erinomainen Kiusallinen hyvä
Tarvitsee viritysvaihtoehdon Ei Kyllä, roskasäiliöiden määrä Kyllä, kaistanleveys
ggplot2-objekti geom_laatikkokuvaaja() geom_histogrammi() geom_violin()

Yleinen kompromissi on piirtää viuludiagrammi, jonka sisällä on kapea laatikkodiagrammi, jolloin tiheyskuvio ja kvartiiliyhteenveto pysyvät yhdessä kaaviossa. Katso histogrammi-opetusohjelma vertailun binning-puolelle.

luoda Box juoni

Ennen kuin aloitat ensimmäisen boxplot():n luomisen R:ssä, sinun on käsiteltävä tietoja seuraavasti:

  • Vaihe 1: Tuo tiedot
  • Vaihe 2: Pudota tarpeettomat muuttujat
  • Vaihe 3: Muunna kuukausi järjestetyksi tekijäksi
  • Vaihe 4: Luo uusi kategorinen muuttuja, joka jakaa jokaisen kuukauden kolmeen osaan: alku, keskiosa ja loppu
  • Vaihe 5: Poista puuttuvat havainnot

Kaikki nämä vaiheet tehdään dplyr:llä ja putkioperaattorilla %>%.

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

Hyvä käytäntö on tarkistaa datan rakenne funktiolla glimpse().

glimpse(data_air)

lähtö:

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

Sekä Ozone että Solar.R sisältävät NA-arvoja. Koska geom_boxplot() poistaisi ne hiljaa ja tulostaisi varoituksen, on siistimpää poistaa ne erikseen.

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

Peruslaatikon juoni

Piirrä nyt otsonin jakautuminen kuukausittain.

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

  • Säilytä kaavio myöhempää käyttöä varten
    • box_plot: peruskuvaaja tallennetaan box_plot-objektiin, jonka avulla voit lisätä tasoja myöhemmin toistamatta koko kutsua
  • Lisää geometrinen objekti
    • Välität datajoukon data_air_nona ggplot boxplotille.
    • Aes()-argumentin sisään lisäät x-akselin ja y-akselin.
    • +-merkki tarkoittaa, että haluat R:n jatkavan koodin lukemista. Se tekee koodista luettavamman rikkomalla sen.
    • Käytä geom_boxplot() luodaksesi laatikkokaavion

lähtö:

Perus Box juoni

Vaihda kaavion puolta

Voit kääntää kaavion sivun.

box_plot +
  geom_boxplot()+
  coord_flip()

Code Selitys

  • box_plot: Käytät tallentamaasi kuvaajaa. Se välttää kaikkien koodien kirjoittamisen uudelleen joka kerta, kun lisäät kaavioon uutta tietoa.
  • geom_boxplot(): piirtää laatikot ja viikset
  • coord_flip(): Käännä kaavion sivu

lähtö:

Vaihda kaavion puolta

Muuta poikkeavan värin väriä

Voit muuttaa poikkeamien väriä, muotoa ja kokoa.

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

Code Selitys

  • outlier.colour=”punainen”: Hallitse poikkeavien arvojen väriä
  • outlier.shape=2: Muuta poikkeaman muotoa. 2 viittaa kolmioon
  • outlier.size=3: Muuta kolmion kokoa. Suuremmat luvut piirtävät suurempia merkkejä.

lähtö:

Muuta Outlier-väriä

Lisää yhteenvetotilasto

Voit lisätä päällekkäin yhteenvetotilaston, kuten ryhmän keskiarvon, jota laatikkodiagrammi itsessään ei näytä.

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

Code Selitys

  • stat_summary() lisää lasketun tilaston laatikkodiagrammin päälle
  • Argumentti fun määrää palautettavan tilastoarvon. Tässä se on keskiarvo. Huomaa, että vanhempi koodi käyttää fun.y-tiedostoa, joka ggplot2 vanhentui versiossa 3.3.0.
  • Huomautus: Muita tilastoja on saatavilla, kuten min ja max. Useampi kuin yksi tilasto voidaan näyttää samassa kaaviossa
  • geom = "piste": Piirrä keskiarvo pisteellä
  • koko=3: Pisteen koko
  • väri =”teräksensininen”: Pisteiden väri

lähtö:

Lisää yhteenvetotilasto

Box Tontti pisteillä

Lisää seuraavaksi pistediagrammikerros laatikoiden päälle. Jokainen piste edustaa yhtä havaintoa, jolloin jokaisen laatikon takana oleva otoskoko näkyy.

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

Code Selitys

  • geom_dotplot() piirtää yhden pisteen havaintokohtaisesti, pinottuna kuhunkin lokeroon
  • binaxis='y': Muuta pisteiden sijaintia y-akselilla. Oletuksena x-akseli
  • dotsize=1: Pisteiden koko
  • stackdir='center': Tapa pinota pisteet: Neljä arvoa:
    • "ylös" (oletus),
    • "alas"
    • "keskusta"
    • "keskikoko"

lähtö:

Box Tontti pisteillä

Ohjaus Esteettinen Box juoni

Vaihda laatikon väriä

Voit vaihtaa ryhmän värejä.

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

Code Selitys

  • Ryhmien värejä hallitaan aes()-kartallapingVoit käyttää color= Month muuttaaksesi laatikon ja viiksikuvion väriä kuukausien mukaan.

lähtö:

Muuta väriä Box

Box juoni useiden ryhmien kanssa

On myös mahdollista lisätä useita ryhmiä. Voit visualisoida ilmanlaadun eron mittauspäivän mukaan.

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

Code Selitys

  • aes()-karttaping geometrisen objektin muuttuja ohjaa näytettäviä ryhmiä (tämän muuttujan on oltava tekijä)
  • aes(fill= day_cat) mahdollistaa kolmen laatikon luomisen jokaiselle kuukaudelle x-akselille

lähtö:

Box Juoni useilla ryhmillä

Box Juoni tärisevine pisteineen

Toinen tapa esittää yksittäisiä havaintoja on jitteroitujen pisteiden avulla. Jitterointia käytetään yleensä silloin, kun kategorinen x-akseli aiheuttaa useiden pisteiden sijoittumisen samaan kohtaan.

Tämä menetelmä välttää päällekkäisyyksiäping diskreetistä datasta.

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

Code Selitys

  • geom_jitter() lisää pienen satunnaisen siirtymän jokaiseen pisteeseen, jotta se on päällekkäinenping arvot tulevat näkyviin.
  • shape=15 muuttaa pisteiden muotoa. 15 edustaa neliöitä
  • väri = "teräksensininen": Muuta pisteen väriä
  • position = position_jitter(width = 0.21): määrittää, kuinka paljon pisteitä siirretään sivusuunnassa x-akselin yksiköissä mitattuna. Oletusarvo on 40 prosenttia luokkien välisestä etäisyydestä.

lähtö:

Box Juoni tärisevine pisteineen

Näet eron ensimmäisen kaavion välillä jitter-menetelmällä ja toisen pistemenetelmällä.

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

Box Juoni tärisevine pisteineen

lovinen Box juoni

Geom_boxplot():n mielenkiintoinen ominaisuus on lovettu boxplot-funktio R:ssä. Lovikaavio kaventaa ruutua mediaanin ympärillä. Lovilaatikkokaavion päätarkoituksena on verrata mediaanin merkitystä ryhmien välillä. On vahvaa näyttöä siitä, että kahdella ryhmällä on eri mediaanit, kun lovet eivät mene päällekkäin. Lovi lasketaan seuraavasti:

lovinen Box juoni

Tässä IQR on kvartiilien välinen alue ja n on ryhmän havaintojen lukumäärä. Lovi kattaa karkeasti mediaanin 95 prosentin luottamusvälin.

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

Code Selitys

  • geom_boxplot(notch = TRUE): piirrä laatikkodiagrammi, jossa on lovia mediaanin ympärillä

lähtö:

lovinen Box juoni

Otsikoiden, tunnisteiden ja mukautettujen värien lisääminen Box Juoni R:ssä

Yllä olevat kuvaajat käyttävät ggplot2-oletusarvoja, jotka ottavat muuttujien nimet suoraan datakehyksestä. Julkaistava kaavio tarvitsee luettavat otsikot ja tarkoituksellisen paletin.

Otsikot ja akselien nimikkeet. Yksi labs()-kutsu asettaa jokaisen tekstielementin:

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

Omien värien valitseminen. Käytä scale_fill_manual()-funktiota, kun täyttö on mapattu aes()-funktion sisällä, ja scale_colour_manual()-funktiota, kun väri on:

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

Selite on tässä pois päältä, koska x-akselilla on jo kuukausien nimet, joten sen toistaminen tuhlaisi tilaa.

Laatikoiden uudelleenjärjestely. Faktoritasot ohjaavat akselin järjestystä. Koska Month luotiin järjestettynä faktorina, se on jo valmiiksi kronologisesti järjestetty. Järjestämättömän faktorin tapauksessa lajittele mediaanin mukaan:

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

Kaavion tallentaminen. ggsave() kirjoittaa viimeisen kuvaajan levylle valitsemallasi resoluutiolla:

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

Box Juoni R:ssä: Code Viite

Alla olevassa taulukossa luetellaan ggplot2-kutsu jokaiselle yllä käsitellylle laatikkodiagrammimuunnokselle:

Tavoite Code
Peruslaatikon juoni
ggplot(df, aes(x = x1, y = y)) + geom_boxplot()
Käännä suunta
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip()
Lovitettu laatikko juoni
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE)
Box juoni tärisevin pistein
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21))
Väri ryhmittäin
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot()
Useita ryhmiä kategoriaa kohden
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2))
Lisää ryhmän keskiarvo
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point")

Tarkista myös: - R-opastus aloittelijoille: Opi R-ohjelmointikieli

UKK

Viikset saavuttavat äärimmäisen havainnon, joka sijaitsee 1.5-kertaisella kvartiilien välisen alueen sisällä lähimmästä kvartiilista. Ne eivät ole minimi ja maksimi, ja kaikki niiden ulkopuolella oleva on piirretty poikkeavaksi pisteeksi.

Ei automaattisesti. 1.5 IQR-sääntö on käytäntö, ei virheen todistaminen. Tutki jokainen piste ensin: vinoutuneet tiedot, kuten otsonilukemat, tuottavat luonnostaan ​​korkeita arvoja, jotka ovat aitoja mittauksia.

päällekkäisyysping lovet viittaavat siihen, ettei ole vahvaa näyttöä siitä, että kahden mediaanin välillä olisi eroja.ping lovet osoittavat todennäköistä todellista eroa, joka vastaa suunnilleen 95 prosentin luottamusvertailua.

Box Kuvaajat ovat vakiomuotoinen tutkimusvaihe ennen koulutusta: ne paljastavat vinoumat, poikkeamat ja erilaiset ominaisuusasteikot eri luokissa. Tiimit käyttävät niitä myös mallien tarkkuuden vertailemiseen ristiinvalidointikertojen välillä.

Kyllä. Tekoälyavustajat voivat selittää virheitä, kuten jatkuvan x-akselin tuottavan yhden laatikon, ja ehdottaa oikeaa aes()-karttaa.pingja merkitse vanhentuneet argumentit, kuten fun.y. Suorita aina korjattu koodi uudelleen omilla tiedoillasi.

Tiivistä tämä viesti seuraavasti: