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.

Fortolk ANOVA test

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.

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.

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:

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

Parvis sammenligning

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