R ANOVA Tutorial: One way & Two way (med eksempler)
Hvad er ANOVA?
Analyse af variation (ANOVA) er en statistisk teknik, der almindeligvis bruges til at studere forskelle mellem to eller flere gruppemiddelvรฆrdier. ANOVA test er centreret om de forskellige kilder til variation i en typisk variabel. ANOVA i R giver primรฆrt bevis for eksistensen af โโden gennemsnitlige lighed mellem grupperne. Denne statistiske metode er en udvidelse af t-testen. Den bruges i en situation, hvor faktorvariablen har mere end รฉn gruppe.
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 (envejs ANOVA herefter). Denne test, ligesom alle andre statistiske test, giver bevis for, om H0-hypotesen kan accepteres eller forkastes.
Hypotese i envejs ANOVA-test
- H0: Middelvรฆrdierne mellem grupperne er identiske
- H3: I det mindste er gennemsnittet af en gruppe anderledes
Med andre ord indebรฆrer H0-hypotesen, at der ikke er tilstrรฆkkelig evidens til at bevise, at middelvรฆrdien af โโgruppen (faktoren) er forskellig fra en anden.
Denne test ligner t-testen, selvom ANOVA-testen anbefales i situationer med mere end 2 grupper. Bortset fra det giver t-testen og ANOVA lignende resultater.
Forudsรฆtninger
Vi antager, at hver faktor er tilfรฆldigt udvalgt, uafhรฆngig og kommer fra en normalfordelt population med ukendte, men lige store varianser.
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 Variabilitet afspejler forskellene mellem grupperne i hele befolkningen. Se pรฅ de to grafer nedenfor for at forstรฅ begrebet mellem-gruppe-varians.
Den venstre graf viser meget lidt variation mellem de tre grupper, og det er meget sandsynligt, at de tre middel har en tendens til samlet middelvรฆrdi (dvs. middelvรฆrdi for de tre grupper).
Den hรธjre graf plotter tre fordelinger langt fra hinanden, og ingen af โโdem overlapper hinanden. Der er stor chance for, at forskellen mellem det samlede gennemsnit og gruppegennemsnittet vil vรฆre stor.
inden for gruppen variabilitet tager hรธjde for forskellen mellem grupperne. Variationen kommer fra de enkelte observationer; nogle punkter kan vรฆre helt anderledes end gruppen betyder. Det inden for gruppen variabilitet opfanger denne effekt og henviser til prรธveudtagningsfejlen.
For visuelt at forstรฅ konceptet inden for gruppevariabilitet, se pรฅ grafen nedenfor.
Den venstre del plotter fordelingen af โโtre forskellige grupper. Du รธgede spredningen af โโhver prรธve, og det er tydeligt, at den individuelle varians er stor. F-testen vil falde, hvilket betyder, at du har tendens til at acceptere nulhypotesen
Den hรธjre del viser nรธjagtig de samme prรธver (identisk gennemsnit), men med lavere variabilitet. Det fรธrer til en forรธgelse af F-testen og tenderer 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.
En lav F-statistik indikerer med andre ord ringe eller ingen signifikant 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
- H3: Overlevelsestidsgennemsnittet er forskelligt for mindst รฉn gruppe.
Med andre ord vil du gerne vide, om der er en statistisk forskel mellem middelvรฆrdien af โโoverlevelsestiden i henhold til typen af โโgift, der er givet til marsvinet.
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 t-test
Trin 1) Du kan kontrollere niveauet af giften med fรธlgende kode. Du bรธr se tre tegnvรฆrdier, fordi du konverterer dem i faktor med det muterede udsagnsord.
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 besvare vores spรธrgsmรฅl: Er der nogen forskel i overlevelsestiden mellem marsvinet, ved at kende typen af โโgift, der gives.
Bemรฆrk, at det tilrรฅdes at gemme modellen og bruge funktionen summary() for at fรฅ et bedre print af resultaterne.
anova_one_way <- aov(time~poison, data = df) summary(anova_one_way)
Kode 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 lavere end den sรฆdvanlige tรฆrskel pรฅ 0.05. Du er sikker pรฅ at sige, at der er en statistisk forskel mellem grupperne, angivet med "*".
Parvis sammenligning
Envejs ANOVA-testen informerer ikke om, hvilken gruppe der har et andet gennemsnit. I stedet kan du udfรธre en Tukey-test med funktionen TukeyHSD().
TukeyHSD(anova_one_way)
Output:
To-vejs ANOVA
En tovejs ANOVA-test tilfรธjer en anden gruppevariabel til formlen. Den er identisk med envejs ANOVA-testen, selvom formlen รฆndres lidt:
y=x1+x2
med er en kvantitativ variabel og og er kategoriske variable.
Hypotese i to-vejs ANOVA test
- H0: Middelvรฆrdierne er ens for begge variabler (dvs. faktorvariabel)
- H3: Middelvรฆrdierne er forskellige for begge variable
Du tilfรธjer behandlingsvariabel til vores model. Denne variabel angiver den behandling, der gives til marsvinet. Du er interesseret i at se, om der er en statistisk afhรฆngighed mellem giften og behandlingen til marsvinet.
Vi justerer vores kode ved at tilfรธje treat med den anden 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 ## ---
Du kan konkludere, at bรฅde gift og godbid er statistisk forskellige fra 0. Du kan afvise NULL-hypotesen og bekrรฆfte, at รฆndring af behandlingen eller giften pรฅvirker overlevelsestidspunktet.
Resumรฉ
Vi kan opsummere testen i nedenstรฅende tabel:
| Test | Kode | Hypotese | P-vรฆrdi |
|---|---|---|---|
| Envejs ANOVA |
aov(y ~ X, data = df) |
H3: Gennemsnit er forskelligt for mindst รฉn gruppe | 0.05 |
| Parvis |
TukeyHSD(ANOVA summary) |
0.05 | |
| Tovejs ANOVA |
aov(y ~ X1 + X2, data = df) |
H3: Gennemsnit er forskelligt for begge grupper | 0.05 |




