ANOVA R:ssä: Yksisuuntainen ja kaksisuuntainen testi esimerkkeineen
⚡ Älykäs yhteenveto
R:n ANOVA vertaa kolmen tai useamman ryhmän keskiarvoja jakamalla kokonaisvariaation ryhmien välisiin ja ryhmien sisäisiin komponentteihin. Tämä läpikäynti suorittaa yksisuuntaisia ja kaksisuuntaisia testejä myrkkyaineistolle, tarkistaa oletukset ja eristää erilaiset parit Tukey HSD:llä.

Mikä on ANOVA?
Varianssianalyysi (ANOVA) on tilastollinen menetelmä, jota käytetään kahden tai useamman ryhmän keskiarvojen vertaamiseen. Testi toimii jakamalla mittauksen kokonaisvariaation ryhmään kuulumisen selittämään osaan ja satunnaiskohinana jäljelle jäävään osaan. R:n ANOVA kertoo siis, eroaako ainakin yhden ryhmän keskiarvo muista, ei mikä. Se on suora laajennus t-testi tilanteisiin, joissa tekijämuuttujalla on enemmän kuin kaksi tasoa.
Ennen testin suorittamista on hyödyllistä tietää, mikä ANOVA-perheen jäsen sopii suunnitteluusi.
ANOVA-testien tyypit R:ssä
”ANOVA” on testiperhe eikä yksittäinen menetelmä. Oikean jäsenen valinta riippuu siitä, kuinka monta tekijää sinulla on ja miten tiedot on kerätty.
| Testi | Milloin sitä käytetään | R-kutsu |
|---|---|---|
| Yksisuuntainen ANOVA | Yksi tekijä, jolla on kolme tai useampia tasoja | aov(y ~ x, data = DF) |
| Kaksisuuntainen ANOVA | Kaksi toisistaan riippumatonta tekijää | aov(y ~ x1 + x2, data = df) |
| Kaksisuuntainen vuorovaikutuksella | Yhden tekijän vaikutus riippuu toisesta | aov(y ~ x1 * x2, data = DF) |
| Toistettujen mittausten ANOVA | Samat koehenkilöt mitattiin useammin kuin kerran | aov(y ~ x + Virhe(kohde/x)) |
| ANCOVA | Jatkuvaa kovariaattia on kontrolloitava | aov(y ~ x + kovariaatti, data = DF) |
| MANOVA | Kaksi tai useampia vastemuuttujaa kerralla | manova(cbind(y1, y2) ~ x) |
Tämä tutoriaali käsittelee kolme ensimmäistä. Loput variantit käyttävät samaa aov()-rajapintaa, joten kun osaat lukea yhden tulostetaulukon, voit lukea ne kaikki.
ANOVA vs. T-testi R:ssä: Keskeiset erot
Molemmat testit vertailevat keskiarvoja, joten kannattaa olla tarkka siitä, missä kohtaa toinen korvaa toisen.
| Kriteeri | T-testi | ANOVA |
|---|---|---|
| Ryhmien lukumäärä | Tasan kaksi | Kaksi tai useampi |
| Testitilastot | t | F, yhtä kuin t:n neliö, kun ryhmiä on kaksi |
| Tulos | Nimeää eron suunnan | Vain raportteja siitä, että eroja on olemassa |
| Seuranta tarvitaan | Ei eristetty | Post hoc -testi, kuten Tukey HSD |
| R-toiminto | t.testi() | aov() |
Kolmen ryhmän tapauksessa on houkutus ajaa kolme erillistä t-testiä. Vastusta sitä. Jokaisella testillä on oma 5 prosentin virheprosenttinsa, joten kolme vertailua nostavat väärän positiivisen tuloksen todennäköisyyden noin 14 prosenttiin. ANOVA vastaa samaan kysymykseen yhdellä testillä, ja Tukey HSD käsittelee sitten parittaisen yksityiskohdan pitäen virheprosentin kurissa. Kahden ryhmän tapauksen osalta katso t-testin opetusohjelma.
Yksisuuntainen ANOVA
On monia tilanteita, joissa sinun on verrattava useiden ryhmien keskiarvoa. Esimerkiksi markkinointiosasto haluaa tietää, onko kolmella tiimillä sama myyntitulos.
- Joukkue: 3 tasotekijä: A, B ja C
- Myynti: Suorituskyvyn mitta
ANOVA-testi voi kertoa, ovatko kolme ryhmää samanlaisia.
Selvittääksesi, tulevatko tiedot samasta populaatiosta, voit suorittaa a yksisuuntainen varianssianalyysi (jäljempänä yksisuuntainen ANOVA). Kuten mikä tahansa muu tilastollinen testi, se antaa näyttöä siitä, voidaanko H0-hypoteesi hylätä. Huomaa, että H0:n hylkäämättä jättäminen ei ole sama asia kuin sen todistaminen todeksi.
Hypoteesi yksisuuntaisessa ANOVA-testissä
- H0: Ryhmien keskiarvot ovat samat
- H1: Ainakin yhden ryhmän keskiarvo on erilainen
Toisin sanoen, jos H0:ta ei hylätä, ei ole riittävästi todisteita siitä, että jokin ryhmän keskiarvo eroaisi muista.
Tämä testi on samankaltainen kuin t-testi, mutta ANOVA on oikea valinta, kun ryhmiä on enemmän kuin kaksi. Kun ryhmiä on tasan kaksi, testit ovat yhtäpitäviä ja F-arvo on yhtä suuri kuin t-arvon neliö.
Oletukset
Yksisuuntainen ANOVA perustuu kolmeen ehtoon: havainnot on otettu satunnaisesti ja ne ovat toisistaan riippumattomia, kunkin ryhmän jäännökset ovat suunnilleen normaalijakautuneet ja varianssi on sama jokaisessa ryhmässä (varianssin homogeenisuus). Alla oleva oletusten tarkistamista käsittelevä osio näyttää, miten kutakin ehtoa testataan R:ssä.
Tulkitse ANOVA-testi
F-tilastolla testataan, ovatko tiedot merkittävästi eri populaatioista eli eri otoskeskiarvoista.
F-tilaston laskemiseksi sinun on jaettava ryhmien välistä vaihtelua yli ryhmän sisäistä vaihtelua.
ryhmän välillä Vaihtelu heijastaa sitä, kuinka kaukana kunkin ryhmän keskiarvo on kokonaiskeskiarvosta. Vertaa alla olevia kahta kaaviota nähdäksesi idean.
Vasemmalla oleva kaavio näyttää hyvin vähän vaihtelua kolmen ryhmän välillä, joten kaikkien kolmen ryhmän keskiarvot ovat lähellä keskiarvoa. yleinen tarkoittaa.
Oikeanpuoleinen kaavio kuvaa kolmea kaukana toisistaan olevaa jakaumaa ilman päällekkäisyyksiä, joten kokonaiskeskiarvon ja kunkin ryhmän keskiarvon välinen ero on suuri.
ryhmän sisäinen Vaihtelu mittaa, kuinka kauas yksittäiset havainnot poikkeavat oman ryhmänsä keskiarvosta. Jotkin pisteet ovat kaukana ryhmän keskiarvosta, ja ryhmän sisäinen termi kuvaa juuri tätä hajontaa eli otantavirhettä.
Ymmärtääksesi visuaalisesti ryhmän sisäisen vaihtelun käsitteen, katso alla olevaa kaaviota.
Vasemmalla puolella on kolmen eri ryhmän jakauma. Olet kasvattanut kunkin otoksen hajontaa ja on selvää, että yksilöllinen varianssi on suuri. F-tilasto laskee, joten nollahypoteesia ei voida hylätä.
Oikealla puolella on otokset, joilla on samat keskiarvot, mutta paljon pienempi hajonta. Tämä nostaa F-tilastoa ja viittaa vaihtoehtoisen hypoteesin puolelle.
Voit käyttää molempia mittareita F-tilastojen muodostamiseen. F-tilaston ymmärtäminen on erittäin intuitiivista. Jos osoittaja kasvaa, se tarkoittaa, että ryhmien välinen vaihtelu on suuri, ja on todennäköistä, että otoksen ryhmät on otettu täysin erilaisista jakaumista.
Toisin sanoen matala F-arvo osoittaa, että ryhmien keskiarvojen välillä on vain vähän tai ei lainkaan merkityksellistä eroa.
Esimerkki Yksisuuntainen ANOVA-testi
Käytät myrkkytietojoukkoa toteuttaaksesi yksisuuntaisen ANOVA-testin. Tietojoukko sisältää 48 riviä ja 3 muuttujaa:
- Aika: Eläimen selviytymisaika
- myrkky: Käytetty myrkkytyyppi: tekijätaso: 1,2 ja 3
- hoito: Käytetty hoitotyyppi: tekijätaso: 1,2 ja 3
Ennen kuin aloitat ANOVA-testin laskemisen, sinun on valmisteltava tiedot seuraavasti:
- Vaihe 1: Tuo tiedot
- Vaihe 2: Poista tarpeeton muuttuja
- Vaihe 3: Muunna muuttuva myrkky määrätyksi tasoksi
library(dplyr) PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/poisons.csv" df <- read.csv(PATH) %>% select(-X) %>% mutate(poison = factor(poison, ordered = TRUE)) glimpse(df)
lähtö:
## Observations: 48 ## Variables: 3 ## $ time <dbl> 0.31, 0.45, 0.46, 0.43, 0.36, 0.29, 0.40, 0.23, 0.22, 0... ## $ poison <ord> 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2... ## $ treat <fctr> A, A, A, A, A, A, A, A, A, A, A, A, B, B, B, B, B, B, ...
Tavoitteemme on testata seuraavaa oletusta:
- H0: Eloonjäämisajan keskiarvossa ei ole eroa ryhmien välillä
- H1: Eloonjäämisajan keskiarvo on erilainen ainakin yhdessä ryhmässä.
Toisin sanoen haluat tietää, onko marsulle annetun myrkyn tyypin mukaan keskimääräisen selviytymisajan välillä tilastollista eroa.
Toimit seuraavasti:
- Vaihe 1: Tarkista muuttujan myrkyn muoto
- Vaihe 2: Tulosta yhteenvetotilasto: määrä, keskiarvo ja keskihajonna
- Vaihe 3: Piirrä laatikkokuva
- Vaihe 4: Laske yksisuuntainen ANOVA-testi
- Vaihe 5: Suorita parittainen vertailu Tukey HSD:llä
Vaihe 1) Tarkista myrkkytasot alla olevalla koodilla. Sinun pitäisi nähdä kolme merkkiarvoa, koska mutate-verbi muutti sarakkeen järjestetyksi tekijäksi.
levels(df$poison)
lähtö:
## [1] "1" "2" "3"
Vaihe 2) Lasket keskiarvon ja keskihajonnan.
df %>% group_by(poison) %>% summarise( count_poison = n(), mean_time = mean(time, na.rm = TRUE), sd_time = sd(time, na.rm = TRUE) )
lähtö:
## # A tibble: 3 x 4 ## poison count_poison mean_time sd_time ## <ord> <int> <dbl> <dbl> ## 1 1 16 0.617500 0.20942779 ## 2 2 16 0.544375 0.28936641 ## 3 3 16 0.276250 0.06227627
Vaihe 3) Kolmannessa vaiheessa voit tarkistaa graafisesti, onko jakelun välillä eroa. Huomaa, että sisällytät värinäpisteen.
ggplot(df, aes(x = poison, y = time, fill = poison)) + geom_boxplot() + geom_jitter(shape = 15, color = "steelblue", position = position_jitter(0.21)) + theme_classic()
lähtö:
Vaihe 4) Voit suorittaa yksisuuntaisen ANOVA-testin komennolla aov. ANOVA-testin perussyntaksi on:
aov(formula, data)
Arguments:
- formula: The equation you want to estimate
- data: The dataset used
Kaavan syntaksi on:
y ~ X1+ X2+...+Xn # X1 + X2 +... refers to the independent variables y ~ . # use all the remaining variables as independent variables
Voit nyt vastata kysymykseen: onko marsujen eloonjäämisajassa eroa annetun myrkyn tyypistä riippuen?
Tallenna malli olioon ja välitä se summary()-funktiolle saadaksesi tulokset luettavassa muodossa.
anova_one_way <- aov(time~poison, data = df) summary(anova_one_way)
Code Selitys
- aov(aika ~ myrkky, data = df): Suorita ANOVA-testi seuraavalla kaavalla
- summary(anova_one_way): Tulosta testin yhteenveto
lähtö:
## Df Sum Sq Mean Sq F value Pr(>F) ## poison 2 1.033 0.5165 11.79 7.66e-05 *** ## Residuals 45 1.972 0.0438 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
P-arvo on 7.66e-05, selvästi alle tavanomaisen kynnysarvon 0.05, ja kolme tähteä merkitsevät vahvinta merkitsevyyskoodia. Voit hylätä H0:n ja päätellä, että ainakin yhdellä myrkkyryhmällä on erilainen keskimääräinen eloonjäämisaika.
ANOVA-oletusten tarkistaminen R:ssä
ANOVAn p-arvo on luotettava vain, kun kolme aiemmin lueteltua ehtoa täyttyvät. Jokaisella on suora tarkistus R:ssä, ja kaikki ne suoritetaan sovitetulle malliobjektille.
1. Havaintojen riippumattomuus. Tämä on tutkimusasetelman, ei datan, ominaisuus, joten mikään testi ei voi pelastaa sitä. Jokainen marsu on mitattava kerran ja jaettava ryhmään satunnaisesti. Jos sama koehenkilö esiintyy useilla riveillä, tarvitaan sen sijaan toistuvien mittausten malli.
2. Residuaalien normaalius. ANOVA olettaa, että jäännökset, eivätkä raakadata, ovat suunnilleen normaaleja. Tarkastele QQ-kuvaajaa ja vahvista se Shapiro-Wilk-testillä:
par(mfrow = c(2, 2)) plot(anova_one_way) # four diagnostic plots shapiro.test(residuals(anova_one_way))
Normaali QQ-kuvaajan lävistäjään myötäilevät pisteet osoittavat normaaleja residuaaleja. Shapiro-Wilkin p-arvo, joka on yli 0.05, tarkoittaa, että normaaliutta ei voida hylätä.
3. Varianssin homogeenisuus. Jokaisen ryhmän tulisi osoittaa samanlaista hajontaa. Jäännökset vs. sovitettu kuvaajan tulisi näyttää litteältä nauhalta eikä suppilolta. Vahvista tämä Levenen testillä, joka on robustisempi epänormaaliuden suhteen kuin Bartlettin testi:
library(car)
leveneTest(time ~ poison, data = df)
bartlett.test(time ~ poison, data = df)
P-arvo yli 0.05 tukee yhtäläisiä varianssien tulkintaa.
Mitä tehdä, kun oletus epäonnistuu. Jos varianssit ovat epätasaiset, aja oneway.test(time ~ poison, data = df, var.equal = FALSE), Welchin korjaus. Jos residuaalit ovat selvästi poikkeavia normaaleja ja otos on pieni, siirry Kruskal-Wallis-järjestystestiin, kruskal.test(time ~ poison, data = df). Suurilla tasapainotetuilla otoksilla ANOVA on melko robusti ja poikkeaa kohtalaisesti normaalista, joten rajatapaus Shapiro-Wilk-tulos on harvoin kohtalokas.
Parikohtainen vertailu
Merkitsevä F-testi kertoo, että ryhmien keskiarvot eivät ole kaikki yhtä suuret, mutta ei sitä, mikä pari eroaa toisistaan. Tukeyn rehellinen merkitsevien erojen testi vastaa tähän vertaamalla kaikkia pareja ja kontrolloimalla samalla perhekohtaista virhesuhdetta.
TukeyHSD(anova_one_way)
lähtö:
Lue tuloste rivi paria kohden. JM sarake sisältää kahden ryhmän keskiarvon välisen eron, lwr ja lisenssi rajasi kyseisen eron 95 prosentin luottamusvälin ja p-adj. on p-arvo, joka on korjattu useille vertailuille. Pari eroaa merkitsevästi, kun sen väli sulkee pois nollan, vastaavasti kun p adj on alle 0.05. Tässä aineistossa myrkkyä 3 koskevat vertailut ovat merkitseviä, mikä vastaa laatikkodiagrammia: ryhmällä 3 on selvästi lyhyempi keskimääräinen eloonjäämisaika kuin ryhmillä 1 ja 2, kun taas ryhmät 1 ja 2 ovat tilastollisesti erottamattomia toisistaan.
Kaksisuuntainen ANOVA
Kaksisuuntainen ANOVA lisää kaavaan toisen tekijän. Se toimii täsmälleen kuten yksisuuntainen testi, vain kaava muuttuu:
y ~ x1 + x2
Tässä y on kvantitatiivinen vastemuuttuja, kun taas x1 ja x2 ovat molemmat kategorisia tekijöitä.
Hypoteesi kaksisuuntaisessa ANOVA-testissä
- H0: Ryhmän keskiarvot ovat yhtä suuret molemmille tekijämuuttujille
- H1: Ainakin yhden ryhmän keskiarvo eroaa ainakin toisen kahdesta tekijästä osalta
Lisäät hoitomuuttujan malliin. Tämä muuttuja tallentaa marsulle annetun hoidon. Alla oleva additiivinen kaava testaa, vaikuttaako kukin tekijä yksinään eloonjäämisaikaan, kun muut tekijät on otettu huomioon.
Muokkaa koodia lisäämällä "treat" ensimmäisen riippumattoman muuttujan viereen.
anova_two_way <- aov(time~poison + treat, data = df) summary(anova_two_way)
lähtö:
## Df Sum Sq Mean Sq F value Pr(>F) ## poison 2 1.0330 0.5165 20.64 5.7e-07 *** ## treat 3 0.9212 0.3071 12.27 6.7e-06 *** ## Residuals 42 1.0509 0.0250 ## ---
Molemmat p-arvot (5.7e-07 myrkylle ja 6.7e-06 hoidolle) ovat selvästi alle 0.05:n, joten hylkäät H0:n molempien tekijöiden osalta ja päättelet, että joko myrkyn tai hoidon vaihtaminen vaikuttaa elinaikaan.
Vuorovaikutustermin lisääminen
Yllä oleva additiivinen malli olettaa, että myrkyn vaikutus on sama hoidosta riippumatta. Testaa tämä oletus korvaamalla plusmerkki tähdellä, joka sopii sekä päävaikutuksiin että niiden vuorovaikutukseen:
anova_interaction <- aov(time~poison * treat, data = df) summary(anova_interaction)
Jos myrkky:hoito-rivi ei ole merkitsevä, additiivinen malli on parempi valinta, koska se käyttää vähemmän vapausasteita.
ANOVA R:ssä: Pikatestien opas
Alla olevassa taulukossa luetellaan jokainen yllä käytetty testi, sitä suorittava R-kutsu ja sen arvioima hypoteesi:
| Testi | Code | Hypoteesi | P-arvo |
|---|---|---|---|
| Yksisuuntainen ANOVA |
aov(y ~ X, data = df)
|
H1: Keskiarvo on erilainen ainakin yhdessä ryhmässä | 0.05 |
| Pareittain |
TukeyHSD(ANOVA summary) |
0.05 | |
| Kaksisuuntainen ANOVA |
aov(y ~ X1 + X2, data = df)
|
H1: Ainakin yhden ryhmän keskiarvo eroaa kummankin tekijän osalta | 0.05 |




