R ANOVA-opplæring: Enveis og toveis (med eksempler)

Hva er ANOVA?

Analyse av varianter (ANOVA) er en statistisk teknikk som vanligvis brukes til å studere forskjeller mellom to eller flere gruppemidler. ANOVA-testen er sentrert om de forskjellige kildene til variasjon i en typisk variabel. ANOVA i R gir først og fremst bevis på eksistensen av gjennomsnittlig likhet mellom gruppene. Denne statistiske metoden er en utvidelse av t-testen. Den brukes i en situasjon der faktorvariabelen har mer enn én gruppe.

Enveis ANOVA

Det er mange situasjoner der du må sammenligne gjennomsnittet mellom flere grupper. For eksempel ønsker markedsavdelingen å vite om tre team har samme salgsytelse.

  • Lag: Faktor på 3 nivåer: A, B og C
  • Salg: Et mål på ytelse

ANOVA-testen kan fortelle om de tre gruppene har lignende prestasjoner.

For å avklare om dataene kommer fra samme populasjon, kan du utføre en enveis variansanalyse (enveis ANOVA heretter). Denne testen, som alle andre statistiske tester, gir bevis på om H0-hypotesen kan aksepteres eller forkastes.

Hypotese i enveis ANOVA-test

  • H0: Middelene mellom gruppene er identiske
  • H3: I det minste er gjennomsnittet for en gruppe forskjellig

H0-hypotesen innebærer med andre ord at det ikke er nok bevis til å bevise at gjennomsnittet av gruppen (faktoren) er forskjellig fra en annen.

Denne testen ligner på t-testen, selv om ANOVA-testen anbefales i situasjoner med mer enn 2 grupper. Bortsett fra det gir t-testen og ANOVA lignende resultater.

Antagelser

Vi antar at hver faktor er tilfeldig utvalgt, uavhengig og kommer fra en normalfordelt populasjon med ukjente men like varianser.

Tolk ANOVA-test

F-statistikken brukes til å teste om dataene er fra signifikant forskjellige populasjoner, dvs. forskjellige utvalgsgjennomsnitt.

For å beregne F-statistikken må du dele variasjon mellom grupper over variasjon innen gruppe.

De mellom-gruppen variasjon gjenspeiler forskjellene mellom gruppene i hele befolkningen. Se på de to grafene nedenfor for å forstå konseptet med varians mellom grupper.

Den venstre grafen viser svært liten variasjon mellom de tre gruppene, og det er svært sannsynlig at de tre middelene har en tendens til samlet gjennomsnitt (dvs. gjennomsnitt for de tre gruppene).

Den høyre grafen plotter tre fordelinger langt fra hverandre, og ingen av dem overlapper hverandre. Det er stor sjanse for at forskjellen mellom det totale gjennomsnittet og gruppegjennomsnittet blir stor.

Tolk ANOVA-test

De innenfor gruppen variasjon vurderer forskjellen mellom gruppene. Variasjonen kommer fra de enkelte observasjonene; noen punkter kan være helt annerledes enn gruppen mener. De innenfor gruppen variabilitet fanger opp denne effekten og refererer til prøvetakingsfeilen.

For visuelt å forstå konseptet innen gruppevariabilitet, se på grafen nedenfor.

Den venstre delen plotter fordelingen av tre forskjellige grupper. Du økte spredningen av hver prøve og det er tydelig at den individuelle variansen er stor. F-testen vil avta, noe som betyr at du har en tendens til å akseptere nullhypotesen

Den høyre delen viser nøyaktig de samme prøvene (identisk gjennomsnitt), men med lavere variasjon. Det fører til en økning av F-testen og tenderer til fordel for den alternative hypotesen.

Tolk ANOVA-test

Du kan bruke begge målene for å konstruere F-statistikken. Det er veldig intuitivt å forstå F-statistikken. Hvis telleren øker, betyr det at variasjonen mellom grupper er høy, og det er sannsynlig at gruppene i utvalget er trukket fra helt forskjellige fordelinger.

Med andre ord, en lav F-statistikk indikerer liten eller ingen signifikant forskjell mellom gruppens gjennomsnitt.

Eksempel Enveis ANOVA-test

Du vil bruke giftdatasettet til å implementere enveis ANOVA-testen. Datasettet inneholder 48 rader og 3 variabler:

  • Tid: Dyrets overlevelsestid
  • gift: Type gift brukt: faktornivå: 1,2 og 3
  • behandle: Type behandling som brukes: faktornivå: 1,2 og 3

Før du begynner å beregne ANOVA-testen, må du forberede dataene som følger:

  • Trinn 1: Importer dataene
  • Trinn 2: Fjern unødvendig variabel
  • Trinn 3: Konverter variabel gift som bestilt 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)

Utgang:

## 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 er å teste følgende antakelse:

  • H0: Det er ingen forskjell i gjennomsnittlig overlevelsestid mellom gruppene
  • H3: Gjennomsnittet for overlevelsestid er forskjellig for minst én gruppe.

Du vil med andre ord vite om det er en statistisk forskjell mellom gjennomsnittet av overlevelsestiden i henhold til typen gift som gis marsvinet.

Du vil fortsette som følger:

  • Trinn 1: Sjekk formatet til den variable giften
  • Trinn 2: Skriv ut sammendragsstatistikken: antall, gjennomsnitt og standardavvik
  • Trinn 3: Plott et boksplott
  • Trinn 4: Beregn enveis ANOVA-testen
  • Trinn 5: Kjør en parvis t-test

Trinn 1) Du kan sjekke nivået på giften med følgende kode. Du bør se tre tegnverdier fordi du konverterer dem i faktor med det muterte verbet.

levels(df$poison)

Utgang:

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

Trinn 2) Du beregner gjennomsnittet og standardavviket.

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

Utgang:

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

Trinn 3) I trinn tre kan du grafisk sjekke om det er forskjell mellom fordelingen. Vær oppmerksom på at du inkluderer den rystede prikken.

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

Utgang:

Enveis ANOVA-testeksempel

Trinn 4) Du kan kjøre enveis ANOVA-testen med kommandoen aov. Den grunnleggende syntaksen for en ANOVA-test er:

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

Syntaksen til formelen er:

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

Du kan svare på spørsmålet vårt: Er det noen forskjell i overlevelsestiden mellom marsvinet, vel vitende om typen gift som er gitt.

Merk at det anbefales å lagre modellen og bruke funksjonen summary() for å få en bedre utskrift av resultatene.

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

Kode Forklaring

  • aov(tid ~ gift, data = df): Kjør ANOVA-testen med følgende formel
  • summary(anova_one_way): Skriv ut sammendraget av testen

Utgang:

##             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-verdien er lavere enn den vanlige terskelen på 0.05. Du er sikker på å si at det er en statistisk forskjell mellom gruppene, indikert med "*".

Parvis sammenligning

Enveis ANOVA-testen informerer ikke om hvilken gruppe som har et annet gjennomsnitt. I stedet kan du utføre en Tukey-test med funksjonen TukeyHSD().

TukeyHSD(anova_one_way)

Utgang:

Parvis sammenligning

Toveis ANOVA

En toveis ANOVA-test legger til en annen gruppevariabel til formelen. Den er identisk med enveis ANOVA-testen, selv om formelen endres litt:

y=x1+x2

with er en kvantitativ variabel og og er kategoriske variabler.

Hypotese i toveis ANOVA-test

  • H0: Gjennomsnittene er like for begge variablene (dvs. faktorvariabel)
  • H3: Middelene er forskjellige for begge variablene

Du legger til behandlingsvariabel til modellen vår. Denne variabelen indikerer behandlingen som gis marsvinet. Du er interessert i å se om det er en statistisk avhengighet mellom giften og behandlingen gitt til marsvinet.

Vi justerer koden vår ved å legge til godbit med den andre uavhengige variabelen.

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

Utgang:

##             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 med at både gift og godbit er statistisk forskjellig fra 0. Du kan avvise NULL-hypotesen og bekrefte at endring av behandling eller gift påvirker overlevelsestidspunktet.

Oppsummering

Vi kan oppsummere testen i tabellen nedenfor:

Test Kode Hypotese P-verdien
Enveis ANOVA
aov(y ~ X, data = df)
H3: Gjennomsnittet er forskjellig for minst én gruppe 0.05
Parvis
TukeyHSD(ANOVA summary)
0.05
Toveis ANOVA
aov(y ~ X1 + X2, data = df)
H3: Gjennomsnittet er forskjellig for begge gruppene 0.05