ANOVA u R-u: Jednosmjerni i dvosmjerni test s primjerima

⚡ Pametni sažetak

ANOVA u R-u uspoređuje srednje vrijednosti triju ili više skupina dijeljenjem ukupne varijacije na komponente između skupina i unutar skupina. Ovaj vodič provodi jednosmjerne i dvosmjerne testove na skupu podataka o otrovima, provjerava pretpostavke i izolira različite parove pomoću Tukey HSD-a.

  • 📐 Osnovna statistika: F-omjer dijeli varijabilnost između grupa s varijabilnosti unutar grupe, tako da veće vrijednosti govore protiv jednakih srednjih vrijednosti.
  • 🧪 Jednosmjerna sintaksa: aov(time~poison, data = df) nakon čega slijedi summary() vraća stupnjeve slobode, F-vrijednost i p-vrijednost.
  • ✅ Provjere pretpostavki: Testirajte neovisnost, normalnost reziduala pomoću shapiro.test() i jednaku varijancu pomoću leveneTest() prije nego što se povjerujete p-vrijednosti.
  • 🔎 Post hoc analiza: TukeyHSD() uspoređuje svaki par grupa dok stopa pogrešaka za cijelu obitelj drži na navedenoj razini.
  • 🧮 Dvosmjerno produženje: aov(vrijeme~otrov + tretman, podaci = df) dodaje drugi faktor, a poison:treat dodaje član interakcije.
  • 📊 Rezultati čitanja: P-vrijednost ispod 0.05 odbacuje nultu hipotezu o jednakim srednjim vrijednostima, ali nikada ne identificira koja se skupina razlikuje.

ANOVA u R-u Jednosmjerno Dvosmjerno

Što je ANOVA?

Analiza varijance (ANOVA) je statistička tehnika koja se koristi za usporedbu srednjih vrijednosti dviju ili više skupina. Test funkcionira tako da ukupnu varijaciju u mjerenju podijeli na dio objašnjen pripadnošću skupini i dio koji ostaje kao slučajni šum. ANOVA u R-u stoga govori razlikuje li se barem jedna srednja vrijednost skupine od ostalih, a ne koja. To je izravno proširenje t-test na situacije u kojima faktorska varijabla ima više od dvije razine.

Prije pokretanja testa, korisno je znati koji član ANOVA obitelji odgovara vašem dizajnu.

Vrste ANOVA testova u R-u

„ANOVA“ je skup testova, a ne jedan postupak. Odabir pravog člana ovisi o tome koliko faktora imate i kako su podaci prikupljeni.

test Kada ga koristiti R poziv
Jednosmjerna ANOVA Jedan faktor s tri ili više razina aov(y ~ x, podaci = df)
Dvosmjerna ANOVA Dva neovisna faktora aov(y ~ x1 + x2, podaci = df)
Dvosmjerno s interakcijom Učinak jednog faktora ovisi o drugom aov(y ~ x1 * x2, podaci = df)
ANOVA s ponovljenim mjerenjima Isti subjekti mjereni su više puta aov(y ~ x + Pogreška(subjekt/x))
ANKOVA Kontinuirana kovarijanta mora se kontrolirati za aov(y ~ x + kovarijanta, podaci = df)
MANOVA Dvije ili više varijabli odgovora odjednom manova(cbind(y1, y2) ~ x)

Ovaj vodič pokriva prve tri. Preostale varijante koriste isto aov() sučelje, tako da kada jednom možete pročitati jednu izlaznu tablicu, možete ih pročitati sve.

ANOVA vs T-test u R: Ključne razlike

Oba testa uspoređuju srednje vrijednosti, stoga je vrijedno biti precizan oko toga gdje jedan zamjenjuje drugi.

Kriteriji T-test ANOVA
Broj grupa Točno dva Dvije ili više
Statistika testa t F, jednako t na kvadrat kada postoje dvije grupe
Proizlaziti Imenuje smjer razlike Samo izvještava da postoji razlika
Potrebno je praćenje nijedan Post hoc test kao što je Tukey HSD
R funkcija t.test() aov()

S tri grupe, iskušenje je provesti tri odvojena t-testa. Oduprite se tome. Svaki test nosi vlastitu stopu pogreške od 5 posto, pa tri usporedbe povećavaju vjerojatnost lažno pozitivnog rezultata na otprilike 14 posto. ANOVA odgovara na isto pitanje jednim testom, a Tukey HSD zatim obrađuje detalje parova s ​​kontroliranom stopom pogreške. Za slučaj dvije grupe, pogledajte vodič za t-test.

Jednosmjerna ANOVA

Postoje mnoge situacije u kojima trebate usporediti srednju vrijednost između više skupina. Na primjer, odjel marketinga želi znati imaju li tri tima isti prodajni učinak.

  • Tim: faktor 3 razine: A, B i C
  • Prodaja: mjera uspješnosti

ANOVA test može pokazati imaju li tri skupine slične performanse.

Da biste razjasnili dolaze li podaci iz iste populacije, možete izvesti a jednosmjerna analiza varijance (u daljnjem tekstu jednosmjerna ANOVA). Kao i svaki drugi statistički test, daje dokaze o tome može li se H0 hipoteza odbaciti. Imajte na umu da neodbacivanje H0 nije isto što i dokazivanje njezine istinitosti.

Hipoteza u jednosmjernom ANOVA testu

  • H0: Srednje vrijednosti između skupina su identične
  • H1: Barem je srednja vrijednost jedne skupine različita

Drugim riječima, ako se H0 ne odbaci, nema dovoljno dokaza za zaključak da se bilo koja srednja vrijednost grupe razlikuje od ostalih.

Ovaj test je sličan t-testu, ali ANOVA je ispravan izbor kada postoji više od dvije grupe. S točno dvije grupe, dva testa su ekvivalentna i F-statistika je jednaka kvadratu t-statistike.

Pretpostavke

Jednosmjerna ANOVA temelji se na tri uvjeta: opažanja su nasumično uzorkovana i neovisna jedno o drugome, reziduali unutar svake skupine su približno normalno raspoređeni, a varijanca je ista u svakoj skupini (homogenost varijance). Odjeljak o provjeri pretpostavki u nastavku pokazuje kako testirati svaku od njih u R-u.

Interpretirajte ANOVA test

F-statistika se koristi za testiranje jesu li podaci iz značajno različitih populacija, tj. različite srednje vrijednosti uzorka.

Da biste izračunali F-statistiku, trebate podijeliti varijabilnost između grupa nad varijabilnost unutar grupe.

The među-skupina Varijabilnost odražava koliko se srednja vrijednost svake grupe razlikuje od ukupne srednje vrijednosti. Usporedite dva grafa u nastavku kako biste bolje shvatili o čemu se radi.

Lijevi graf pokazuje vrlo male varijacije između triju skupina, tako da su sve tri skupine srednje vrijednosti blizu ukupni znače.

Desni graf prikazuje tri daleko udaljene distribucije bez preklapanja, tako da je jaz između ukupnog prosjeka i prosjeka svake skupine velik.

Interpretirajte ANOVA test

The unutar grupe Varijabilnost mjeri koliko se pojedinačna opažanja razlikuju od prosjeka vlastite skupine. Neke se točke nalaze daleko od prosjeka svoje skupine, a izraz unutar skupine obuhvaća upravo taj raspon, što je pogreška uzorkovanja.

Kako biste vizualno razumjeli koncept varijabilnosti unutar grupe, pogledajte grafikon u nastavku.

Lijevi dio prikazuje distribuciju triju različitih skupina. Povećali ste raspon svakog uzorka i jasno je da je individualna varijanca velika. F-statistika pada, tako da ne biste mogli odbaciti nultu hipotezu.

Desni dio prikazuje uzorke s istim srednjim vrijednostima, ali puno manjim rasponom. To povećava F-statistiku i ukazuje u korist alternativne hipoteze.

Interpretirajte ANOVA test

Možete koristiti obje mjere za konstruiranje F-statistike. Vrlo je intuitivno razumjeti F-statistiku. Ako se brojnik povećava, to znači da je varijabilnost među grupama velika i da je vjerojatno da su grupe u uzorku izvučene iz potpuno različitih distribucija.

Drugim riječima, niska F-statistika ukazuje na malu ili nikakvu značajnu razliku između prosjeka grupe.

Primjer Jednosmjerni ANOVA test

Koristit ćete skup podataka o otrovu za provedbu jednosmjernog ANOVA testa. Skup podataka sadrži 48 redaka i 3 varijable:

  • Vrijeme: Vrijeme preživljavanja životinje
  • otrov: vrsta korištenog otrova: razina faktora: 1,2 i 3
  • liječiti: Vrsta korištenog tretmana: razina faktora: 1,2 i 3

Prije nego počnete izračunavati ANOVA test, morate pripremiti podatke na sljedeći način:

  • Korak 1: Uvezite podatke
  • Korak 2: Uklonite nepotrebnu varijablu
  • Korak 3: Pretvorite varijablu otrov u naručenu razinu
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)

Izlaz:

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

Naš cilj je testirati sljedeću pretpostavku:

  • H0: Nema razlike u prosjeku vremena preživljavanja između skupina
  • H1: Prosjek vremena preživljavanja je različit za barem jednu skupinu.

Drugim riječima, želite znati postoji li statistička razlika između srednjeg vremena preživljavanja ovisno o vrsti otrova koji je dan zamorcu.

Postupit ćete na sljedeći način:

  • Korak 1: Provjerite format varijable poison
  • Korak 2: Ispišite sumarnu statistiku: broj, srednju vrijednost i standardnu ​​devijaciju
  • Korak 3: Iscrtajte okvirni dijagram
  • Korak 4: Izračunajte jednosmjerni ANOVA test
  • Korak 5: Pokrenite parnu usporedbu s Tukey HSD-om

Korak 1) Provjerite razine otrova pomoću donjeg koda. Trebali biste vidjeti trostruke vrijednosti jer je glagol mutate pretvorio stupac u uređeni faktor.

levels(df$poison)

Izlaz:

## [1] "1" "2" "3"

Korak 2) Vi izračunavate srednju vrijednost i standardnu ​​devijaciju.

df %>%
	group_by(poison) %>%
	summarise(
		count_poison = n(),
		mean_time = mean(time, na.rm = TRUE),
		sd_time = sd(time, na.rm = TRUE)
	)

Izlaz:

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

Korak 3) U trećem koraku možete grafički provjeriti postoji li razlika između distribucije. Imajte na umu da ste uključili potresnu točku.

ggplot(df, aes(x = poison, y = time, fill = poison)) +
    geom_boxplot() +
    geom_jitter(shape = 15,
        color = "steelblue",
        position = position_jitter(0.21)) +
    theme_classic()

Izlaz:

Primjer jednosmjernog ANOVA testa

Korak 4) Možete pokrenuti jednosmjerni ANOVA test s naredbom aov. Osnovna sintaksa za ANOVA test je:

aov(formula, data)
Arguments:			
- formula: The equation you want to estimate
- data: The dataset used	

Sintaksa formule je:

y ~ X1+ X2+...+Xn # X1 +  X2 +... refers to the independent variables
y ~ . # use all the remaining variables as independent variables

Sada možete odgovoriti na pitanje: postoji li razlika u vremenu preživljavanja između zamoraca, s obzirom na vrstu primijenjenog otrova?

Pohranite model u objekt i proslijedite ga funkciji summary() kako biste dobili čitljiv ispis rezultata.

anova_one_way <- aov(time~poison, data = df)
summary(anova_one_way)

Code Objašnjenje

  • aov(vrijeme ~ otrov, podaci = df): Pokrenite ANOVA test sa sljedećom formulom
  • summary(anova_one_way): Ispis sažetka testa

Izlaz:

##             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-vrijednost je 7.66e-05, daleko ispod uobičajenog praga od 0.05, a tri zvjezdice označavaju najjači kod značajnosti. Možete odbaciti H0 i zaključiti da barem jedna skupina otrova ima drugačije prosječno vrijeme preživljavanja.

Kako provjeriti ANOVA pretpostavke u R-u

ANOVA p-vrijednost je pouzdana samo kada su ispunjena tri prethodno navedena uvjeta. Svaki od njih ima izravnu provjeru u R-u i svi se izvode na prilagođenom objektu modela.

1. Neovisnost opažanja. Ovo je svojstvo dizajna studije, a ne podataka, tako da nijedan test to ne može spasiti. Svaki zamorac mora se izmjeriti jednom i nasumično dodijeliti svojoj skupini. Ako se isti subjekt pojavljuje u nekoliko redaka, potreban vam je model ponovljenih mjerenja.

2. Normalnost reziduala. ANOVA pretpostavlja da su reziduali, a ne sirovi podaci, približno normalni. Pregledajte QQ dijagram i potvrdite Shapiro-Wilkovim testom:

par(mfrow = c(2, 2))
plot(anova_one_way)          # four diagnostic plots

shapiro.test(residuals(anova_one_way))

Točke koje grane s dijagonalom normalnog QQ dijagrama označavaju normalne reziduale. Shapiro-Wilkova p-vrijednost iznad 0.05 znači da se normalnost ne može odbaciti.

3. Homogenost varijance. Svaka grupa trebala bi pokazati sličan raspon. Grafik ostataka u odnosu na prilagođene vrijednosti trebao bi izgledati kao ravna traka, a ne kao lijevak. Potvrdite to Leveneovim testom, koji je robusniji na nenormalnosti od Bartlettovog:

library(car)
leveneTest(time ~ poison, data = df)

bartlett.test(time ~ poison, data = df)

P-vrijednost iznad 0.05 podržava jednake varijance.

Što učiniti kada pretpostavka ne uspije. Ako su varijance nejednake, pokrenite oneway.test(time ~ poison, data = df, var.equal = FALSE), Welchovu korekciju. Ako su reziduali očito nenormalni i uzorak je malen, prebacite se na Kruskal-Wallisov test rangova, kruskal.test(time ~ poison, data = df). Kod velikih uravnoteženih uzoraka, ANOVA je prilično robusna do umjerenih odstupanja od normalnosti, tako da je granični Shapiro-Wilkov rezultat rijetko koban.

Usporedba u paru

Značajan F-test govori da srednje vrijednosti grupe nisu sve jednake, ali ne i koji se par razlikuje. Tukeyjev test iskrenih značajnih razlika odgovara na to uspoređujući svaki par, kontrolirajući stopu pogreške na razini obitelji.

TukeyHSD(anova_one_way)

Izlaz:

Usporedba u paru

Pročitajte izlazni redak po paru. razl stupac sadrži razliku između dvaju grupnih prosjeka, niska temperatura i licenca ograničili 95-postotni interval pouzdanosti za tu razliku i prid. je p-vrijednost prilagođena za višestruke usporedbe. Par se značajno razlikuje kada njegov interval isključuje nulu, što je ekvivalentno kada je p adj ispod 0.05. U ovom skupu podataka, usporedbe koje uključuju otrov 3 su značajne, što odgovara kutijastom dijagramu: skupina 3 ima jasno niže prosječno vrijeme preživljavanja od skupina 1 i 2, dok su skupine 1 i 2 statistički nerazlučive jedna od druge.

Dvosmjerna ANOVA

Dvosmjerna ANOVA dodaje drugi faktor formuli. Funkcionira potpuno isto kao i jednosmjerni test, samo se formula mijenja:

y ~ x1 + x2

Ovdje je y kvantitativna varijabla odgovora, dok su x1 i x2 kategorički faktori.

Hipoteza u dvosmjernom ANOVA testu

  • H0: Grupne sredine su jednake za obje faktorske varijable
  • H1: Barem jedna srednja vrijednost grupe razlikuje se za barem jedan od dva faktora

Modelu dodajete varijablu tretmana. Ova varijabla bilježi tretman koji je dan zamorcu. Aditivna formula u nastavku testira utječe li svaki faktor samostalno na vrijeme preživljavanja, nakon što se uzmu u obzir ostali.

Prilagodite kod dodavanjem riječi "treat" uz prvu nezavisnu varijablu.

anova_two_way <- aov(time~poison + treat, data = df)
summary(anova_two_way)

Izlaz:

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

Obje p-vrijednosti (5.7e-07 za otrov i 6.7e-06 za tretman) su daleko ispod 0.05, pa odbacujete H0 za oba faktora i zaključujete da promjena otrova ili tretmana utječe na vrijeme preživljavanja.

Dodavanje interakcijskog pojma

Gornji aditivni model pretpostavlja da je učinak otrova isti bez obzira na tretman. Kako bismo testirali tu pretpostavku, zamijenite znak plus zvjezdicom, što odgovara i glavnim učincima i njihovoj interakciji:

anova_interaction <- aov(time~poison * treat, data = df)
summary(anova_interaction)

Ako redak otrov:treat nije značajan, aditivni model je bolji izbor jer troši manje stupnjeva slobode.

ANOVA u R-u: Brzi vodič za testiranje

U donjoj tablici navedeni su svi gore korišteni testovi, R pozivi koji ih pokreću i hipoteze koje procjenjuju:

test Code hipoteza P-vrijednosti
Jednosmjerna ANOVA
aov(y ~ X, data = df)
H1: Prosjek je različit za barem jednu grupu 0.05
U paru
TukeyHSD(ANOVA summary)
0.05
Dvosmjerna ANOVA
aov(y ~ X1 + X2, data = df)
H1: Barem jedna srednja vrijednost grupe razlikuje se za bilo koji faktor 0.05

Pitanja i odgovori

F-vrijednost je omjer varijance između skupina i varijance unutar skupine. Vrijednosti blizu 1 sugeriraju da su srednje vrijednosti skupina slične. Velike vrijednosti ukazuju na to da su skupine izvučene iz populacija s različitim srednjim vrijednostima.

Koristite oneway.test() s var.equal = FALSE kada su varijance nejednake, a kruskal.test() kada su reziduali očito nenormalni. Transformacija asimetričnog odgovora s log() često vraća i normalnost i jednaku varijancu.

Svaki t-test nosi vlastiti rizik od 5 posto lažno pozitivnih rezultata. Tri parna testa povećavaju stopu pogreške na razini obitelji na oko 14 posto. ANOVA održava jedan ukupni test na 5 posto, a Tukey HSD prilagođava parne usporedbe.

ANOVA je standardni filter za odabir značajki: rangira kategoričke prediktore prema tome koliko snažno odvajaju numerički cilj. Timovi za umjetnu inteligenciju također ga koriste za usporedbu varijanti modela u različitim naborima unakrsne validacije.

Da. AI asistenti mogu objasniti stupnjeve slobode, prevesti p-vrijednosti u jednostavan jezik i označiti kršenja pretpostavki u dijagnostičkim dijagramima. Uvijek provjerite očitanje u odnosu na vlastite rezultate leveneTest() i shapiro.test().

Sažmite ovu objavu uz: