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.

  • ๐Ÿ“ Kernestatistik: F-forholdet dividerer variabiliteten mellem grupper med variabiliteten inden for grupperne, sรฅ stรธrre vรฆrdier taler imod lige gennemsnit.
  • ๐Ÿงช Envejssyntaks: aov(tid~gift, data = df) efterfulgt af summary() returnerer frihedsgraderne, F-vรฆrdien og p-vรฆrdien.
  • โœ… Antagelsestjek: Test uafhรฆngighed, normalitet af residualer med shapiro.test() og lige stor varians med leveneTest() fรธr p-vรฆrdien er pรฅliden.
  • ๐Ÿ”Ž Post hoc-analyse: TukeyHSD() sammenligner hvert par af grupper, mens den familievise fejlrate holdes pรฅ det angivne niveau.
  • ๐Ÿงฎ Tovejsudvidelse: aov(tid~gift + behandling, data = df) tilfรธjer en anden faktor, og gift:behandling tilfรธjer interaktionstermen.
  • ๐Ÿ“Š Lรฆseresultater: En p-vรฆrdi under 0.05 forkaster nulhypotesen om lige gennemsnit, men identificerer aldrig hvilken gruppe der er forskellig.

ANOVA i R Envejs Tovejs

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.

Fortolk ANOVA test

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.

Fortolk ANOVA test

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:

Envejs ANOVA-testeksempel

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:

Parvis sammenligning

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

Ofte Stillede Spรธrgsmรฅl

F-vรฆrdien er forholdet mellem varians mellem grupper og varians inden for grupper. Vรฆrdier nรฆr 1 antyder, at gruppens middelvรฆrdier er ens. Store vรฆrdier angiver, at grupperne er trukket fra populationer med forskellige middelvรฆrdier.

Brug oneway.test() med var.equal = FALSE, nรฅr varianserne er ulige, og kruskal.test() nรฅr residualerne tydeligvis ikke er normale. Transformation af et skรฆvt svar med log() gendanner ofte bรฅde normalitet og ligelig varians.

Hver t-test har sin egen risiko for falsk positiv pรฅ 5 procent. Tre parvise tests รธger den familievise fejlrate til omkring 14 procent. ANOVA holder en enkelt samlet test pรฅ 5 procent, og Tukey HSD justerer de parvise sammenligninger.

ANOVA er et standardfilter til funktionsudvรฆlgelse: det rangerer kategoriske prรฆdiktorer efter, hvor stรฆrkt de adskiller et numerisk mรฅl. AI-teams bruger det ogsรฅ til at sammenligne modelvarianter pรฅ tvรฆrs af krydsvalideringsfoldninger.

Ja. AI-assistenter kan forklare frihedsgrader, oversรฆtte p-vรฆrdier til et letforstรฅeligt sprog og markere brud pรฅ antagelser i diagnostiske plots. Bekrรฆft altid aflรฆsningen mod dine egne leveneTest() og shapiro.test() resultater.

Opsummer dette indlรฆg med: