R ANOVA Tutorial: One way & Two way (med exempel)

Vad är ANOVA?

Variansanalys (ANOVA) är en statistisk teknik som vanligtvis används för att studera skillnader mellan två eller flera gruppmedelvärden. ANOVA-testet är centrerat på de olika källorna till variation i en typisk variabel. ANOVA i R ger i första hand bevis på förekomsten av den genomsnittliga jämlikheten mellan grupperna. Denna statistiska metod är en förlängning av t-testet. Den används i en situation där faktorvariabeln har mer än en grupp.

Envägs ANOVA

Det finns många situationer där du behöver jämföra medelvärdet mellan flera grupper. Marknadsavdelningen vill till exempel veta om tre team har samma försäljningsprestanda.

  • Lag: Faktor på 3 nivåer: A, B och C
  • Försäljning: Ett mått på prestanda

ANOVA-testet kan avgöra om de tre grupperna har liknande prestationer.

För att klargöra om uppgifterna kommer från samma population kan du utföra en enkelriktad variansanalys (envägs ANOVA härefter). Detta test, liksom alla andra statistiska test, ger bevis på om H0-hypotesen kan accepteras eller förkastas.

Hypotes i envägs ANOVA-test

  • H0: Medelvärdena mellan grupperna är identiska
  • H3: Åtminstone är medelvärdet för en grupp olika

Med andra ord antyder H0-hypotesen att det inte finns tillräckligt med bevis för att bevisa att medelvärdet av gruppen (faktorn) skiljer sig från en annan.

Detta test liknar t-testet, även om ANOVA-testet rekommenderas i situationer med fler än 2 grupper. Förutom det ger t-testet och ANOVA liknande resultat.

antaganden

Vi antar att varje faktor är slumpmässigt urval, oberoende och kommer från en normalfördelad population med okända men lika varianser.

Tolka ANOVA-test

F-statistiken används för att testa om data kommer från signifikant olika populationer, dvs olika urvalsmedelvärden.

För att beräkna F-statistiken måste du dividera variation mellan grupper över variation inom gruppen.

Smakämnen mellan-gruppen Variabilitet speglar skillnaderna mellan grupperna inom hela befolkningen. Titta på de två graferna nedan för att förstå konceptet med varians mellan grupper.

Den vänstra grafen visar mycket liten variation mellan de tre grupperna, och det är mycket troligt att de tre medelvärdena tenderar att övergripande medelvärde (dvs medelvärde för de tre grupperna).

Den högra grafen plottar tre distributioner långt ifrån varandra, och ingen av dem överlappar varandra. Det finns en stor chans att skillnaden mellan det totala medelvärdet och gruppens medelvärde blir stor.

Tolka ANOVA-test

Smakämnen inom gruppen variabilitet tar hänsyn till skillnaden mellan grupperna. Variationen kommer från de enskilda observationerna; vissa punkter kan vara helt annorlunda än vad gruppen menar. De inom gruppen variabilitet tar upp denna effekt och hänvisar till provtagningsfelet.

För att visuellt förstå konceptet inom gruppvariabilitet, titta på grafen nedan.

Den vänstra delen plottar fördelningen av tre olika grupper. Du ökade spridningen av varje prov och det är tydligt att den individuella variansen är stor. F-testet kommer att minska, vilket innebär att du tenderar att acceptera nollhypotesen

Den högra delen visar exakt samma prov (identiskt medelvärde) men med lägre variabilitet. Det leder till en ökning av F-testet och tenderar till den alternativa hypotesen.

Tolka ANOVA-test

Du kan använda båda måtten för att konstruera F-statistiken. Det är väldigt intuitivt att förstå F-statistiken. Om täljaren ökar betyder det att variationen mellan grupperna är hög, och det är troligt att grupperna i urvalet kommer från helt olika fördelningar.

Med andra ord indikerar en låg F-statistik liten eller ingen signifikant skillnad mellan gruppens genomsnitt.

Exempel Envägs ANOVA-test

Du kommer att använda giftdataset för att implementera envägs ANOVA-testet. Datauppsättningen innehåller 48 rader och 3 variabler:

  • Tid: Djurets överlevnadstid
  • gift: Typ av gift som används: faktornivå: 1,2 och 3
  • behandla: Typ av behandling som används: faktornivå: 1,2 och 3

Innan du börjar beräkna ANOVA-testet måste du förbereda data enligt följande:

  • Steg 1: Importera data
  • Steg 2: Ta bort onödig variabel
  • Steg 3: Konvertera variabel gift enligt beställd 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)

Produktion:

## 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 är att testa följande antagande:

  • H0: Det finns ingen skillnad i genomsnittlig överlevnadstid mellan grupper
  • H3: Genomsnittet för överlevnadstid är olika för minst en grupp.

Du vill med andra ord veta om det finns en statistisk skillnad mellan medelvärdet av överlevnadstiden beroende på vilken typ av gift som ges till marsvinet.

Du kommer att gå tillväga enligt följande:

  • Steg 1: Kontrollera formatet på det variabla giftet
  • Steg 2: Skriv ut den sammanfattande statistiken: antal, medelvärde och standardavvikelse
  • Steg 3: Rita en boxplot
  • Steg 4: Beräkna envägs ANOVA-testet
  • Steg 5: Kör ett parvis t-test

Steg 1) Du kan kontrollera nivån på giftet med följande kod. Du bör se tre teckenvärden eftersom du konverterar dem i faktor med det muterade verbet.

levels(df$poison)

Produktion:

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

Steg 2) Du beräknar medelvärdet och standardavvikelsen.

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

Produktion:

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

Steg 3) I steg tre kan du grafiskt kontrollera om det är skillnad mellan fördelningen. Observera att du inkluderar den skakiga punkten.

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

Produktion:

Envägs ANOVA-testexempel

Steg 4) Du kan köra envägs ANOVA-testet med kommandot aov. Den grundläggande syntaxen för ett ANOVA-test är:

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

Formelns syntax är:

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

Du kan svara på vår fråga: Finns det någon skillnad i överlevnadstiden mellan marsvinet, med kunskap om vilken typ av gift som ges.

Observera att det rekommenderas att lagra modellen och använda funktionen summary() för att få en bättre utskrift av resultaten.

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

Kodförklaring

  • aov(tid ~ gift, data = df): Kör ANOVA-testet med följande formel
  • summary(anova_one_way): Skriv ut sammanfattningen av testet

Produktion:

##             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ärdet är lägre än det vanliga tröskelvärdet på 0.05. Du är säker på att säga att det finns en statistisk skillnad mellan grupperna, indikerad med "*".

Parvis jämförelse

Envägs ANOVA-testet informerar inte vilken grupp som har ett annat medelvärde. Istället kan du utföra ett Tukey-test med funktionen TukeyHSD().

TukeyHSD(anova_one_way)

Produktion:

Parvis jämförelse

Tvåvägs ANOVA

Ett tvåvägs ANOVA-test lägger till ytterligare en gruppvariabel till formeln. Det är identiskt med envägs ANOVA-testet, även om formeln ändras något:

y=x1+x2

with är en kvantitativ variabel och och är kategoriska variabler.

Hypotes i tvåvägs ANOVA-test

  • H0: Medelvärdena är lika för båda variablerna (dvs faktorvariabel)
  • H3: Medelvärdena är olika för båda variablerna

Du lägger till behandlingsvariabel till vår modell. Denna variabel indikerar behandlingen som ges till marsvinet. Du är intresserad av att se om det finns ett statistiskt beroende mellan giftet och behandlingen som ges till marsvinet.

Vi justerar vår kod genom att lägga till behandla med den andra oberoende variabeln.

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

Produktion:

##             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 dra slutsatsen att både gift och godis skiljer sig statistiskt från 0. Du kan förkasta NULL-hypotesen och bekräfta att en förändring av behandlingen eller giftet påverkar tiden för överlevnad.

Sammanfattning

Vi kan sammanfatta testet i tabellen nedan:

Testa Koda Hypotes P-värde
Envägs ANOVA
aov(y ~ X, data = df)
H3: Genomsnittet är olika för minst en grupp 0.05
Parvis
TukeyHSD(ANOVA summary)
0.05
Tvåvägs ANOVA
aov(y ~ X1 + X2, data = df)
H3: Genomsnittet är olika för båda grupperna 0.05