ANOVA i R: Enveis- og toveistester med eksempler

โšก Smart oppsummering

ANOVA i R sammenligner gjennomsnittene av tre eller flere grupper ved รฅ dele total variasjon i komponenter mellom grupper og innenfor grupper. Denne gjennomgangen kjรธrer enveis- og toveis tester pรฅ giftdatasettet, sjekker antagelser og isolerer forskjellige par med Tukey HSD.

  • ๐Ÿ“ Kjernestatistikk: F-forholdet deler variasjon mellom grupper med variasjon innen gruppen, sรฅ stรธrre verdier taler mot like gjennomsnitt.
  • ๐Ÿงช Enveis syntaks: aov(tid~gift, data = df) etterfulgt av summary() returnerer frihetsgradene, F-verdien og p-verdien.
  • โœ… Antagelseskontroller: Test uavhengighet, normalitet av residualer med shapiro.test(), og lik varians med leveneTest() fรธr p-verdien stoles pรฅ.
  • ๐Ÿ”Ž Post hoc-analyse: TukeyHSD() sammenligner hvert par av grupper samtidig som den familievise feilraten holdes pรฅ det angitte nivรฅet.
  • ๐Ÿงฎ Toveis forlengelse: aov(tid~gift + behandling, data = df) legger til en andre faktor, og gift:behandling legger til interaksjonstermen.
  • ๐Ÿ“Š Leseresultater: En p-verdi under 0.05 forkaster nullhypotesen om like gjennomsnitt, men identifiserer aldri hvilken gruppe som er forskjellig.

ANOVA i R Enveis Toveis

Hva er ANOVA?

Analyse av varianter (ANOVA) er en statistisk teknikk som brukes til รฅ sammenligne gjennomsnittet av to eller flere grupper. Testen fungerer ved รฅ dele den totale variasjonen i en mรฅling inn i den delen som forklares av gruppemedlemskap og den delen som er igjen som tilfeldig stรธy. ANOVA i R forteller deg derfor om minst ett gruppegjennomsnitt avviker fra de andre, ikke hvilket. Det er en direkte forlengelse av t-test til situasjoner der faktorvariabelen har mer enn to nivรฅer.

Fรธr du kjรธrer en test, er det nyttig รฅ vite hvilket medlem av ANOVA-familien som passer til designet ditt.

Typer ANOVA-tester i R

ยซANOVAยป er en familie av tester snarere enn รฉn enkelt prosedyre. Valg av riktig medlem avhenger av hvor mange faktorer du har og hvordan dataene ble samlet inn.

Test Nรฅr skal du bruke den R-samtale
Enveis ANOVA ร‰n faktor med tre eller flere nivรฅer aov(y ~ x, data = df)
Toveis ANOVA To uavhengige faktorer aov(y ~ x1 + x2, data = df)
Toveis med interaksjon Effekten av รฉn faktor avhenger av den andre aov(y ~ x1 * x2, data = df)
Gjentatte mรฅlinger ANOVA De samme forsรธkspersonene ble mรฅlt mer enn รฉn gang aov(y ~ x + Feil(subjekt/x))
ANCOVA En kontinuerlig kovariat mรฅ kontrolleres for aov(y ~ x + kovariat, data = df)
MANOVA To eller flere responsvariabler samtidig manova(cbind(y1, y2) ~ x)

Denne veiledningen dekker de tre fรธrste. De resterende variantene bruker det samme aov()-grensesnittet, sรฅ nรฅr du kan lese รฉn utdatatabell, kan du lese dem alle.

ANOVA vs T-test i R: Viktige forskjeller

Begge testene sammenligner gjennomsnitt, sรฅ det er verdt รฅ vรฆre presis om hvor den ene erstatter den andre.

Kriterier T-test ANOVA
Antall grupper Nรธyaktig to To eller flere
Teststatistikk t F, lik t i annen nรฅr det er to grupper
Resultat Navngir retningen pรฅ forskjellen Rapporterer kun at det finnes en forskjell
Oppfรธlging nรธdvendig none Post hoc-test som Tukey HSD
R funksjon t.test() aov()

Fristelsen med tre grupper er รฅ kjรธre tre separate t-tester. Motstรฅ den. Hver test har sin egen feilrate pรฅ 5 prosent, sรฅ tre sammenligninger รธker sjansen for en falsk positiv til omtrent 14 prosent. ANOVA besvarer det samme spรธrsmรฅlet med รฉn enkelt test, og Tukey HSD hรฅndterer deretter parvise detaljer med feilraten holdt i sjakk. For tilfellet med to grupper, se t-test veiledning.

Enveis ANOVA

Det er mange situasjoner der du mรฅ sammenligne gjennomsnittet mellom flere grupper. For eksempel รธnsker markedsavdelingen รฅ vite om tre team har samme salgsytelse.

  • Lag: Faktor pรฅ 3 nivรฅer: A, B og C
  • Salg: Et mรฅl pรฅ ytelse

ANOVA-testen kan fortelle om de tre gruppene har lignende prestasjoner.

For รฅ avklare om dataene kommer fra samme populasjon, kan du utfรธre en enveis variansanalyse (enveis ANOVA heretter). Som alle andre statistiske tester gir den bevis for om H0-hypotesen kan forkastes. Merk at det รฅ ikke forkaste H0 ikke er det samme som รฅ bevise at den er sann.

Hypotese i enveis ANOVA-test

  • H0: Middelene mellom gruppene er identiske
  • H1: I det minste er gjennomsnittet for en gruppe forskjellig

Med andre ord, hvis H0 ikke forkastes, betyr det at det ikke er nok bevis til รฅ konkludere med at gjennomsnittet for en gruppe er forskjellig fra de andre.

Denne testen ligner pรฅ t-testen, men ANOVA er det riktige valget nรฅr det er mer enn to grupper. Med nรธyaktig to grupper er de to testene likeverdige, og F-statistikken er lik kvadratet av t-statistikken.

Antagelser

Enveis ANOVA hviler pรฅ tre betingelser: observasjonene er tilfeldig utvalgt og uavhengige av hverandre, residualene innenfor hver gruppe er tilnรฆrmet normalfordelt, og variansen er den samme i hver gruppe (homogenitet i variansen). Avsnittet om รฅ sjekke forutsetninger nedenfor viser hvordan man tester hver enkelt i R.

Tolk ANOVA-test

F-statistikken brukes til รฅ teste om dataene er fra signifikant forskjellige populasjoner, dvs. forskjellige utvalgsgjennomsnitt.

For รฅ beregne F-statistikken mรฅ du dele variasjon mellom grupper over variasjon innen gruppe.

Ocuco mellom-gruppen Variabiliteten gjenspeiler hvor langt gjennomsnittet for hver gruppe er fra det totale gjennomsnittet. Sammenlign de to grafene nedenfor for รฅ se ideen.

Den venstre grafen viser svรฆrt liten variasjon mellom de tre gruppene, sรฅ alle tre gruppegjennomsnittene ligger nรฆr samlet mener.

Den hรธyre grafen plotter tre fordelinger langt fra hverandre uten overlapping, sรฅ gapet mellom det totale gjennomsnittet og gjennomsnittet for hver gruppe er stort.

Tolk ANOVA-test

Ocuco innen gruppen Variabilitet mรฅler hvor langt individuelle observasjoner avviker fra gjennomsnittet av sin egen gruppe. Noen punkter ligger langt fra gruppegjennomsnittet, og leddet innenfor gruppen fanger opp nettopp denne spredningen, som er utvalgsfeilen.

For visuelt รฅ forstรฅ konseptet innen gruppevariabilitet, se pรฅ grafen nedenfor.

Den venstre delen plotter fordelingen av tre forskjellige grupper. Du รธkte spredningen for hvert utvalg, og det er tydelig at den individuelle variansen er stor. F-statistikken faller, sรฅ du ville ikke klare รฅ forkaste nullhypotesen.

Den hรธyre delen viser utvalg med samme gjennomsnitt, men mye lavere spredning. Det hever F-statistikken og peker i favรธr av den alternative hypotesen.

Tolk ANOVA-test

Du kan bruke begge mรฅlene for รฅ konstruere F-statistikken. Det er veldig intuitivt รฅ forstรฅ F-statistikken. Hvis telleren รธker, betyr det at variasjonen mellom grupper er hรธy, og det er sannsynlig at gruppene i utvalget er trukket fra helt forskjellige fordelinger.

Med andre ord indikerer en lav F-statistikk liten eller ingen meningsfull forskjell mellom gruppegjennomsnittene.

Eksempel Enveis ANOVA-test

Du vil bruke giftdatasettet til รฅ implementere enveis ANOVA-testen. Datasettet inneholder 48 rader og 3 variabler:

  • Tid: Dyrets overlevelsestid
  • gift: Type gift brukt: faktornivรฅ: 1,2 og 3
  • behandle: Type behandling som brukes: faktornivรฅ: 1,2 og 3

Fรธr du begynner รฅ beregne ANOVA-testen, mรฅ du forberede dataene som fรธlger:

  • Trinn 1: Importer dataene
  • Trinn 2: Fjern unรธdvendig variabel
  • Trinn 3: Konverter variabel gift som bestilt nivรฅ
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)

Utgang:

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

Vรฅrt mรฅl er รฅ teste fรธlgende antakelse:

  • H0: Det er ingen forskjell i gjennomsnittlig overlevelsestid mellom gruppene
  • H1: Gjennomsnittet for overlevelsestid er forskjellig for minst รฉn gruppe.

Med andre ord, du vil vite om det er en statistisk forskjell mellom gjennomsnittet av overlevelsestiden i henhold til hvilken type gift som gis til marsvinet.

Du vil fortsette som fรธlger:

  • Trinn 1: Sjekk formatet til den variable giften
  • Trinn 2: Skriv ut sammendragsstatistikken: antall, gjennomsnitt og standardavvik
  • Trinn 3: Plott et boksplott
  • Trinn 4: Beregn enveis ANOVA-testen
  • Trinn 5: Kjรธr en parvis sammenligning med Tukey HSD

Trinn 1) Sjekk giftnivรฅene med koden nedenfor. Du bรธr se tre tegn, fordi det muterte verbet konverterte kolonnen til en ordnet faktor.

levels(df$poison)

Utgang:

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

Trinn 2) Du beregner gjennomsnittet og standardavviket.

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

Utgang:

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

Trinn 3) I trinn tre kan du grafisk sjekke om det er forskjell mellom fordelingen. Vรฆr oppmerksom pรฅ at du inkluderer den rystede prikken.

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

Utgang:

Enveis ANOVA-testeksempel

Trinn 4) Du kan kjรธre enveis ANOVA-testen med kommandoen aov. Den grunnleggende syntaksen for en ANOVA-test er:

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

Syntaksen til formelen er:

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

Du kan nรฅ svare pรฅ spรธrsmรฅlet: er det noen forskjell i overlevelsestid mellom marsvinene, gitt hvilken type gift som gis?

Lagre modellen i et objekt og send den til summary() for รฅ fรฅ en lesbar utskrift av resultatene.

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

Code Forklaring

  • aov(tid ~ gift, data = df): Kjรธr ANOVA-testen med fรธlgende formel
  • summary(anova_one_way): Skriv ut sammendraget av testen

Utgang:

##             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-verdien er 7.66eโปโถ, langt under den vanlige terskelen pรฅ 0.05, og de tre stjernene markerer den sterkeste signifikanskoden. Du kan forkaste Hโ‚‚ og konkludere med at minst รฉn giftgruppe har en annen gjennomsnittlig overlevelsestid.

Slik sjekker du ANOVA-antagelser i R

En ANOVA p-verdi er bare pรฅlitelig nรฅr de tre betingelsene som er nevnt tidligere, er oppfylt. Hver av dem har en direkte kontroll i R, og alle kjรธrer pรฅ det tilpassede modellobjektet.

1. Observasjoners uavhengighet. Dette er en egenskap ved studiedesignet, ikke ved dataene, sรฅ ingen test kan redde den. Hvert forsรธkskanin mรฅ mรฅles รฉn gang og tilordnes tilfeldig til sin gruppe. Hvis samme forsรธksperson vises i flere rader, trenger du i stedet en modell med gjentatte mรฅlinger.

2. Normalitet av residualer. ANOVA antar at residualene, ikke rรฅdataene, er tilnรฆrmet normale. Undersรธk QQ-plottet og bekreft med Shapiro-Wilk-testen:

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

shapiro.test(residuals(anova_one_way))

Punkter som omslutter diagonalen i Normal QQ-plottet indikerer normale residualer. En Shapiro-Wilk p-verdi over 0.05 betyr at du ikke kan forkaste normalitet.

3. Varianshomogenitet. Hver gruppe skal vise en lignende spredning. Residualer vs. Tilpasset-plottet skal se ut som et flatt bรฅnd i stedet for en trakt. Bekreft dette med Levenes test, som er mer robust mot ikke-normalitet enn Bartletts:

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

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

En p-verdi over 0.05 stรธtter like varianser.

Hva man skal gjรธre nรฅr en antagelse slรฅr feil. Hvis variansene er ulik, kjรธr oneway.test(time ~ poison, data = df, var.equal = FALSE), Welch-korreksjonen. Hvis residualene er tydelig ikke-normale og utvalget er lite, bytt til Kruskal-Wallis rangtest, kruskal.test(time ~ poison, data = df). Med store balanserte utvalg er ANOVA ganske robust til moderate avvik fra normalitet, sรฅ et Shapiro-Wilk-resultat som grenser til det normale er sjelden fatalt.

Parvis sammenligning

En signifikant F-test forteller deg at ikke alle gjennomsnittene for gruppen er like, men ikke hvilket par som er forskjellige. Tukeys Honest Significant Difference-test gir svar pรฅ dette ved รฅ sammenligne hvert par samtidig som den familievise feilraten kontrolleres.

TukeyHSD(anova_one_way)

Utgang:

Parvis sammenligning

Les utdataene รฉn rad per par. diff kolonnen inneholder differansen mellom de to gruppegjennomsnittene, lwr og tillatelse begrenset 95 prosent konfidensintervallet for den forskjellen, og p adj er p-verdien justert for multiple sammenligninger. Et par avviker signifikant nรฅr intervallet ekskluderer null, tilsvarende nรฅr p adj er under 0.05. I dette datasettet er sammenligningene som involverer gift 3 de signifikante, noe som samsvarer med boksplottet: gruppe 3 har en klart lavere gjennomsnittlig overlevelsestid enn gruppe 1 og 2, mens gruppe 1 og 2 er statistisk umulige รฅ skille fra hverandre.

Toveis ANOVA

En toveis ANOVA legger til en annen faktor i formelen. Den fungerer akkurat som enveistesten, bare at formelen endres:

y ~ x1 + x2

Her er y den kvantitative responsvariabelen, mens x1 og x2 begge er kategoriske faktorer.

Hypotese i toveis ANOVA-test

  • H0: Gruppegjennomsnittene er like for begge faktorvariablene
  • H1: Minst รฉn gruppegjennomsnitt er forskjellig, for minst รฉn av de to faktorene

Du legger til behandlingsvariabelen i modellen. Denne variabelen registrerer behandlingen som marsvinet har fรฅtt. Den additive formelen nedenfor tester om hver faktor pรฅvirker overlevelsestiden alene, etter at den andre er tatt hensyn til.

Juster koden ved รฅ legge til treat ved siden av den fรธrste uavhengige variabelen.

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

Utgang:

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

Begge p-verdiene (5.7eโปโถ for gift og 6.7eโปโถ for behandling) ligger langt under 0.05, sรฅ du forkaster H0 for begge faktorene og konkluderer med at endring av enten giften eller behandlingen pรฅvirker overlevelsestiden.

Legge til et interaksjonsbegrep

Den additive modellen ovenfor antar at effekten av giften er den samme uavhengig av behandlingen. For รฅ teste denne antagelsen, erstatt plusstegnet med en stjerne, som passer til bรฅde hovedeffektene og deres interaksjon:

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

Hvis raden ยซgift:behandleยป ikke er signifikant, er den additive modellen det bedre valget fordi den bruker fรฆrre frihetsgrader.

ANOVA i R: Hurtig testreferanse

Tabellen nedenfor viser hver test som er brukt ovenfor, R-kallet som kjรธrer den, og hypotesen den evaluerer:

Test Code Hypotese P-verdien
Enveis ANOVA
aov(y ~ X, data = df)
H1: Gjennomsnittet er forskjellig for minst รฉn gruppe 0.05
Parvis
TukeyHSD(ANOVA summary)
0.05
Toveis ANOVA
aov(y ~ X1 + X2, data = df)
H1: Minst ett gruppegjennomsnitt er forskjellig for begge faktorene 0.05

Spรธrsmรฅl og svar

F-verdien er forholdet mellom varians mellom grupper og varians innen grupper. Verdier nรฆr 1 antyder at gjennomsnittsverdiene for gruppene er like. Store verdier indikerer at gruppene er trukket fra populasjoner med forskjellige gjennomsnitt.

Bruk oneway.test() med var.equal = FALSE nรฅr variansene er ulik, og kruskal.test() nรฅr residualene tydelig ikke er normale. ร… transformere et skjevt svar med log() gjenoppretter ofte bรฅde normalitet og lik varians.

Hver t-test har sin egen risiko pรฅ 5 prosent for falsk positiv. Tre parvise tester รธker den familievise feilraten til omtrent 14 prosent. ANOVA holder en enkelt samlet test pรฅ 5 prosent, og Tukey HSD justerer de parvise sammenligningene.

ANOVA er et standard funksjonsutvelgelsesfilter: det rangerer kategoriske prediktorer etter hvor sterkt de skiller et numerisk mรฅl. AI-team bruker det ogsรฅ til รฅ sammenligne modellvarianter pรฅ tvers av kryssvalideringsfoldinger.

Ja. AI-assistenter kan forklare frihetsgrader, oversette p-verdier til et enkelt sprรฅk og flagge brudd pรฅ antagelser i diagnostiske plott. Bekreft alltid avlesningen mot dine egne leveneTest()- og shapiro.test()-resultater.

Oppsummer dette innlegget med: