ANOVA i R: Envejs- og tovejstest med eksempler
โก Smart opsummering
ANOVA i R sammenligner middelvรฆrdierne af tre eller flere grupper ved at opdele den samlede variation i komponenter mellem grupper og inden for grupper. Denne gennemgang kรธrer envejs- og tovejs-tests pรฅ giftdatasรฆttet, kontrollerer antagelser og isolerer forskellige par med Tukey HSD.

Hvad er ANOVA?
Analyse af variation (ANOVA) er en statistisk teknik, der bruges til at sammenligne middelvรฆrdierne af to eller flere grupper. Testen fungerer ved at opdele den samlede variation i en mรฅling i den del, der forklares af gruppemedlemskab, og den del, der er tilbage som tilfรฆldig stรธj. ANOVA i R fortรฆller dig derfor, om mindst รฉn gruppemiddelvรฆrdi afviger fra de andre, ikke hvilken. Det er en direkte forlรฆngelse af t-test i situationer, hvor faktorvariablen har mere end to niveauer.
Fรธr du kรธrer en test, er det nyttigt at vide, hvilket medlem af ANOVA-familien der passer til dit design.
Typer af ANOVA-tests i R
"ANOVA" er en familie af tests snarere end en enkelt procedure. Valget af det rigtige medlem afhรฆnger af, hvor mange faktorer du har, og hvordan dataene blev indsamlet.
| Test | Hvornรฅr skal du bruge det? | R-opkald |
|---|---|---|
| Envejs ANOVA | En faktor med tre eller flere niveauer | aov(y ~ x, data = df) |
| To-vejs ANOVA | To uafhรฆngige faktorer | aov(y ~ x1 + x2, data = df) |
| Tovejs med interaktion | Effekten af โโden ene faktor afhรฆnger af den anden | aov(y ~ x1 * x2, data = df) |
| Gentagne mรฅlinger ANOVA | De samme forsรธgspersoner blev mรฅlt mere end รฉn gang | aov(y ~ x + Fejl(subjekt/x)) |
| ANCOVA | En kontinuerlig kovariat skal kontrolleres for | aov(y ~ x + kovariat, data = df) |
| MANOVA | To eller flere responsvariabler pรฅ รฉn gang | manova(cbind(y1, y2) ~ x) |
Denne vejledning dรฆkker de fรธrste tre. De resterende varianter bruger den samme aov()-grรฆnseflade, sรฅ nรฅr du kan lรฆse รฉn outputtabel, kan du lรฆse dem alle.
ANOVA vs. T-test i R: Nรธgleforskelle
Begge tests sammenligner middelvรฆrdier, sรฅ det er vรฆrd at vรฆre prรฆcis omkring, hvor den ene erstatter den anden.
| Kriterier | T-test | ANOVA |
|---|---|---|
| Antal grupper | Prรฆcis to | To eller flere |
| Test statistik | t | F, lig med t i anden kvadrat, nรฅr der er to grupper |
| Resultat | Navngiver retningen af โโforskellen | Kun rapporter om, at der er en forskel |
| Opfรธlgning nรธdvendig | Ingen | Post hoc-test sรฅsom Tukey HSD |
| R funktion | t.test() | aov() |
Fristelsen med tre grupper er at kรธre tre separate t-tests. Modstรฅ den. Hver test har sin egen fejlrate pรฅ 5 procent, sรฅ tre sammenligninger รธger chancen for en falsk positiv til cirka 14 procent. ANOVA besvarer det samme spรธrgsmรฅl med en enkelt test, og Tukey HSD hรฅndterer derefter de parvise detaljer med fejlraten holdt i skak. For tilfรฆldet med to grupper, se t-test tutorial.
Envejs ANOVA
Der er mange situationer, hvor du skal sammenligne gennemsnittet mellem flere grupper. For eksempel vil marketingafdelingen gerne vide, om tre teams har den samme salgsprรฆstation.
- Hold: Faktor pรฅ 3 niveauer: A, B og C
- Salg: Et mรฅl for ydeevne
ANOVA-testen kan fortรฆlle, om de tre grupper har lignende prรฆstationer.
For at afklare, om dataene kommer fra samme population, kan du udfรธre en envejs variansanalyse (herefter envejs ANOVA). Ligesom enhver anden statistisk test giver den bevis for, om H0-hypotesen kan forkastes. Bemรฆrk, at det ikke er det samme som at bevise, at den er sand, hvis man ikke forkaster H0.
Hypotese i envejs ANOVA-test
- H0: Middelvรฆrdierne mellem grupperne er identiske
- H1: I det mindste er gennemsnittet af en gruppe anderledes
Med andre ord, hvis H0 ikke forkastes, er der ikke tilstrรฆkkeligt bevis til at konkludere, at en gruppes middelvรฆrdi afviger fra de andre.
Denne test ligner t-testen, men ANOVA er det korrekte valg, nรฅr der er mere end to grupper. Med prรฆcis to grupper er de to tests รฆkvivalente, og F-statistikken er lig med kvadratet af t-statistikken.
Forudsรฆtninger
Envejs-ANOVA hviler pรฅ tre betingelser: observationerne er tilfรฆldigt udtaget og uafhรฆngige af hinanden, residualerne inden for hver gruppe er omtrent normalfordelte, og variansen er den samme i hver gruppe (varianshomogenitet). Afsnittet om kontrol af antagelser nedenfor viser, hvordan man tester hver enkelt i R.
Fortolk ANOVA test
F-statistikken bruges til at teste, om data er fra signifikant forskellige populationer, dvs. forskellige stikprรธvegennemsnit.
For at beregne F-statistikken skal du dividere variation mellem grupper over variation inden for gruppen.
mellem-gruppe Variabiliteten afspejler, hvor langt hver gruppes gennemsnit ligger fra det samlede gennemsnit. Sammenlign de to grafer nedenfor for at se ideen.
Den venstre graf viser meget lille variation mellem de tre grupper, sรฅ alle tre gruppegennemsnit ligger tรฆt pรฅ samlet betyde.
Den hรธjre graf viser tre fordelinger langt fra hinanden uden overlap, sรฅ forskellen mellem det samlede gennemsnit og gennemsnittet for hver gruppe er stor.
inden for gruppen Variabilitet mรฅler, hvor langt individuelle observationer afviger fra middelvรฆrdien af โโderes egen gruppe. Nogle punkter ligger langt fra deres gruppegennemsnit, og indenforgruppen-termen indfanger prรฆcis denne spredning, hvilket er stikprรธvefejlen.
For visuelt at forstรฅ konceptet inden for gruppevariabilitet, se pรฅ grafen nedenfor.
Den venstre del viser fordelingen af โโtre forskellige grupper. Du รธgede spredningen af โโhver stikprรธve, og det er tydeligt, at den individuelle varians er stor. F-statistikken falder, sรฅ du ville ikke kunne forkaste nulhypotesen.
Den hรธjre del viser stikprรธver med samme gennemsnit, men meget lavere spredning. Det hรฆver F-statistikken og peger til fordel for den alternative hypotese.
Du kan bruge begge mรฅl til at konstruere F-statistikken. Det er meget intuitivt at forstรฅ F-statistikken. Hvis tรฆlleren stiger, betyder det, at variabiliteten mellem grupper er hรธj, og det er sandsynligt, at grupperne i stikprรธven er trukket fra helt forskellige fordelinger.
Med andre ord indikerer en lav F-statistik en lille eller ingen meningsfuld forskel mellem gruppens gennemsnit.
Eksempel Envejs ANOVA-test
Du vil bruge giftdatasรฆttet til at implementere envejs ANOVA-testen. Datasรฆttet indeholder 48 rรฆkker og 3 variabler:
- Tid: Dyrets overlevelsestid
- gift: Type brugt gift: faktorniveau: 1,2 og 3
- behandle: Anvendt behandlingstype: faktorniveau: 1,2 og 3
Fรธr du begynder at beregne ANOVA-testen, skal du forberede dataene som fรธlger:
- Trin 1: Importer dataene
- Trin 2: Fjern unรธdvendig variabel
- Trin 3: Konverter den variable gift som bestilt niveau
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)
Output:
## 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, ...
Vores mรฅl er at teste fรธlgende antagelse:
- H0: Der er ingen forskel i overlevelsestidsgennemsnit mellem grupperne
- H1: Overlevelsestidsgennemsnittet er forskelligt for mindst รฉn gruppe.
Med andre ord vil du vide, om der er en statistisk forskel mellem den gennemsnitlige overlevelsestid i forhold til den type gift, marsvinet fรฅr.
Du vil fortsรฆtte som fรธlger:
- Trin 1: Tjek formatet af den variable gift
- Trin 2: Udskriv den sammenfattende statistik: antal, middelvรฆrdi og standardafvigelse
- Trin 3: Plot et boksplot
- Trin 4: Beregn envejs ANOVA-testen
- Trin 5: Kรธr en parvis sammenligning med Tukey HSD
Trin 1) Tjek giftniveauerne med koden nedenfor. Du bรธr se tre tegnvรฆrdier, fordi det muterede verbum konverterede kolonnen til en ordnet faktor.
levels(df$poison)
Output:
## [1] "1" "2" "3"
Trin 2) Du beregner middelvรฆrdien og standardafvigelsen.
df %>% group_by(poison) %>% summarise( count_poison = n(), mean_time = mean(time, na.rm = TRUE), sd_time = sd(time, na.rm = TRUE) )
Output:
## # 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
Trin 3) I trin tre kan du grafisk tjekke, om der er forskel pรฅ fordelingen. Bemรฆrk, at du inkluderer den rystede prik.
ggplot(df, aes(x = poison, y = time, fill = poison)) + geom_boxplot() + geom_jitter(shape = 15, color = "steelblue", position = position_jitter(0.21)) + theme_classic()
Output:
Trin 4) Du kan kรธre envejs ANOVA-testen med kommandoen aov. Den grundlรฆggende syntaks for en ANOVA-test er:
aov(formula, data)
Arguments:
- formula: The equation you want to estimate
- data: The dataset used
Formlens syntaks er:
y ~ X1+ X2+...+Xn # X1 + X2 +... refers to the independent variables y ~ . # use all the remaining variables as independent variables
Du kan nu besvare spรธrgsmรฅlet: er der nogen forskel i overlevelsestiden mellem marsvinene, givet den type gift, der administreres?
Gem modellen i et objekt og send den til summary() for at fรฅ en lรฆsbar udskrift af resultaterne.
anova_one_way <- aov(time~poison, data = df) summary(anova_one_way)
Code Forklaring
- aov(tid ~ gift, data = df): Kรธr ANOVA-testen med fรธlgende formel
- summary(anova_one_way): Udskriv resumรฉet af testen
Output:
## 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-vรฆrdien er 7.66eโปโถ, langt under den sรฆdvanlige tรฆrskel pรฅ 0.05, og de tre stjerner markerer den stรฆrkeste signifikanskode. Man kan forkaste Hโ og konkludere, at mindst รฉn giftgruppe har en forskellig gennemsnitlig overlevelsestid.
Sรฅdan kontrollerer du ANOVA-antagelser i R
En ANOVA p-vรฆrdi er kun trovรฆrdig, nรฅr de tre tidligere nรฆvnte betingelser er opfyldt. Hver af dem har en direkte kontrol i R, og de kรธrer alle pรฅ det tilpassede modelobjekt.
1. Observationers uafhรฆngighed. Dette er en egenskab ved studiedesignet, ikke ved dataene, sรฅ ingen test kan redde det. Hvert forsรธgskanin skal mรฅles รฉn gang og tildeles tilfรฆldigt til sin gruppe. Hvis den samme forsรธgsperson optrรฆder i flere rรฆkker, har du i stedet brug for en model med gentagne mรฅlinger.
2. Residualernes normalitet. ANOVA antager, at residualerne, ikke rรฅdataene, er omtrent normale. Undersรธg QQ-plottet og bekrรฆft det med Shapiro-Wilk-testen:
par(mfrow = c(2, 2)) plot(anova_one_way) # four diagnostic plots shapiro.test(residuals(anova_one_way))
Punkter, der strรฆkker sig langs diagonalen i Normal QQ-plottet, angiver normale residualer. En Shapiro-Wilk p-vรฆrdi over 0.05 betyder, at man ikke kan afvise normalitet.
3. Varianshomogenitet. Hver gruppe bรธr vise en lignende spredning. Residuals vs. Fitted-plottet bรธr ligne et fladt bรฅnd snarere end en tragt. Bekrรฆft det med Levenes test, som er mere robust over for ikke-normalitet end Bartletts:
library(car)
leveneTest(time ~ poison, data = df)
bartlett.test(time ~ poison, data = df)
En p-vรฆrdi over 0.05 understรธtter lige store varianser.
Hvad skal man gรธre, nรฅr en antagelse fejler. Hvis varianserne er ulige, kรธres oneway.test(time ~ poison, data = df, var.equal = FALSE), Welch-korrektionen. Hvis residualerne tydeligvis ikke er normale, og stikprรธven er lille, skiftes til Kruskal-Wallis rangtest, kruskal.test(time ~ poison, data = df). Med store, afbalancerede stikprรธver er ANOVA forholdsvis robust til moderate afvigelser fra normalitet, sรฅ et Shapiro-Wilk-resultat pรฅ grรฆnsen af โโniveauet er sjรฆldent fatalt.
Parvis sammenligning
En signifikant F-test fortรฆller dig, at gruppens middelvรฆrdier ikke alle er ens, men ikke hvilket par der adskiller sig. Tukeys Honest Significant Difference-test besvarer dette ved at sammenligne hvert par, samtidig med at den familievise fejlrate kontrolleres.
TukeyHSD(anova_one_way)
Output:
Lรฆs outputtet รฉn rรฆkke pr. par. diff kolonnen indeholder forskellen mellem de to gruppemiddelvรฆrdier, lwr og licens begrรฆnsede 95 procents konfidensintervallet for den forskel, og p adj. er p-vรฆrdien justeret for multiple sammenligninger. Et par afviger signifikant, nรฅr dets interval udelukker nul, รฆkvivalent nรฅr p adj er under 0.05. I dette datasรฆt er sammenligningerne, der involverer gift 3, de signifikante, hvilket matcher boksplottet: gruppe 3 har en klart lavere gennemsnitlig overlevelsestid end gruppe 1 og 2, mens gruppe 1 og 2 er statistisk umulige at skelne fra hinanden.
To-vejs ANOVA
En tovejs ANOVA tilfรธjer en anden faktor til formlen. Den fungerer prรฆcis som envejstesten, kun formlen รฆndres:
y ~ x1 + x2
Her er y den kvantitative responsvariabel, mens x1 og x2 begge er kategoriske faktorer.
Hypotese i to-vejs ANOVA test
- H0: Gruppens middelvรฆrdier er ens for begge faktorvariabler
- H1: Mindst รฉn gruppes gennemsnit er forskellig for mindst รฉn af de to faktorer
Du tilfรธjer behandlingsvariablen til modellen. Denne variabel registrerer den behandling, marsvinet har fรฅet. Den additive formel nedenfor tester, om hver faktor pรฅvirker overlevelsestiden i sig selv, efter at den anden er taget i betragtning.
Juster koden ved at tilfรธje treat ved siden af โโden fรธrste uafhรฆngige variabel.
anova_two_way <- aov(time~poison + treat, data = df) summary(anova_two_way)
Output:
## 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-vรฆrdier (5.7e-07 for gift og 6.7e-06 for behandling) ligger langt under 0.05, sรฅ du forkaster H0 for begge faktorer og konkluderer, at รฆndring af enten giften eller behandlingen pรฅvirker overlevelsestiden.
Tilfรธjelse af et interaktionsterm
Den additive model ovenfor antager, at giftens effekt er den samme uanset behandlingen. For at teste denne antagelse skal plustegnet erstattes med en asterisk, som passer til bรฅde hovedeffekterne og deres interaktion:
anova_interaction <- aov(time~poison * treat, data = df) summary(anova_interaction)
Hvis rรฆkken forgiftning:behandling ikke er signifikant, er den additive model det bedre valg, fordi den bruger fรฆrre frihedsgrader.
ANOVA i R: Hurtig testreference
Tabellen nedenfor viser hver test, der er brugt ovenfor, det R-kald, der kรธrer den, og den hypotese, den evaluerer:
| Test | Code | Hypotese | P-vรฆrdi |
|---|---|---|---|
| Envejs ANOVA |
aov(y ~ X, data = df)
|
H1: Gennemsnit er forskelligt for mindst รฉn gruppe | 0.05 |
| Parvis |
TukeyHSD(ANOVA summary) |
0.05 | |
| Tovejs ANOVA |
aov(y ~ X1 + X2, data = df)
|
H1: Mindst รฉn gruppegennemsnit er forskellig for begge faktorer | 0.05 |




