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

  • 📐 Ydintilasto: F-suhde jakaa ryhmien välisen vaihtelun ryhmän sisäisellä vaihtelulla, joten suuremmat arvot puhuvat yhtäläisiä keskiarvoja vastaan.
  • 🧪 Yksisuuntainen syntaksi: aov(time~poison, data = df) ja sen jälkeen summary() palauttaa vapausasteet, F-arvon ja p-arvon.
  • Oletusten tarkistukset: Testaa residuaalien riippumattomuus ja normaalius shapiro.test():llä ja yhtä suuri varianssi leveneTest():llä ennen p-arvoon luottamista.
  • 🔎 Jälkianalyysi: TukeyHSD() vertaa jokaista ryhmäparia pitäen samalla perhekohtaisen virhesuhteen ilmoitetulla tasolla.
  • 🧮 Kaksisuuntainen jatkojohto: aov(time~poison + treat, data = df) lisää toisen tekijän ja poison:treat lisää vuorovaikutustermin.
  • 📊 Lukemistulokset: Alle 0.05 oleva p-arvo hylkää yhtäläisten keskiarvojen nollahypoteesin, mutta ei koskaan tunnista, mikä ryhmä eroaa.

ANOVA R:ssä Yksisuuntainen Kaksisuuntainen

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.

Tulkitse ANOVA-testi

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.

Tulkitse ANOVA-testi

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

Esimerkki yksisuuntaisesta ANOVA-testistä

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

Parikohtainen vertailu

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

UKK

F-arvo on ryhmien välisen ja ryhmän sisäisen varianssin suhde. Lähellä yhtä olevat arvot viittaavat siihen, että ryhmien keskiarvot ovat samankaltaisia. Suuret arvot osoittavat, että ryhmät on muodostettu populaatioista, joilla on eri keskiarvot.

Käytä oneway.test()-funktiota, jossa var.equal = FALSE, kun varianssit ovat epätasaisia, ja kruskal.test()-funktiota, kun residuaalit ovat selvästi poikkeavia normaaleja arvoja. Vinon vasteen muuntaminen log()-funktiolla palauttaa usein sekä normaaliuden että yhtä suuren varianssin.

Jokaisella t-testillä on oma 5 prosentin väärien positiivisten tulosten riskinsä. Kolme parittaista testiä nostavat perhekohtaisen virhesuhteen noin 14 prosenttiin. ANOVA pitää yhden kokonaistestin 5 prosentissa, ja Tukey HSD säätää parittaiset vertailut.

ANOVA on ominaisuuksien valintaan tarkoitettu vakiosuodatin: se luokittelee kategoriset ennustajat sen mukaan, kuinka voimakkaasti ne erottavat numeerisen kohteen. Tekoälytiimit käyttävät sitä myös mallivarianttien vertailemiseen ristiinvalidointikertojen välillä.

Kyllä. Tekoälyavustajat osaavat selittää vapausasteita, kääntää p-arvot selkokielelle ja merkitä oletusten rikkomuksia diagnostisissa kuvaajissa. Vahvista lukema aina omilla leveneTest()- ja shapiro.test()-tuloksillasi.

Tiivistä tämä viesti seuraavasti: