R ANOVA Tutorial: Eenrichtings- en tweerichtingsverkeer (met voorbeelden)

Wat is ANOVA?

Analyse van variantie (ANOVA) is een statistische techniek die vaak wordt gebruikt om verschillen tussen twee of meer groepsgemiddelden te bestuderen. De ANOVA-test is gericht op de verschillende bronnen van variatie in een typische variabele. ANOVA in R levert voornamelijk bewijs voor het bestaan ​​van gemiddelde gelijkheid tussen de groepen. Deze statistische methode is een uitbreiding van de t-test. Het wordt gebruikt in een situatie waarin de factorvariabele meer dan één groep heeft.

Eenrichtings ANOVA

Er zijn veel situaties waarin u het gemiddelde van meerdere groepen moet vergelijken. De marketingafdeling wil bijvoorbeeld weten of drie teams dezelfde verkoopprestaties hebben.

  • Team: 3 niveaufactoren: A, B en C
  • Verkoop: een maatstaf voor prestaties

Met de ANOVA-test kan worden vastgesteld of de drie groepen vergelijkbare prestaties leveren.

Om te verduidelijken of de gegevens uit dezelfde populatie komen, kunt u een eenzijdige variantieanalyse (hierna eenrichtings-ANOVA). Deze test, zoals alle andere statistische tests, geeft bewijs of de H0-hypothese kan worden geaccepteerd of verworpen.

Hypothese in een eenrichtings-ANOVA-test

  • H0: De gemiddelden tussen groepen zijn identiek
  • H3: Het gemiddelde van één groep is tenminste verschillend

Met andere woorden, de H0-hypothese impliceert dat er niet genoeg bewijs is om te bewijzen dat het gemiddelde van de groep (factor) verschilt van dat van een andere groep.

Deze test is vergelijkbaar met de t-test, hoewel de ANOVA-test wordt aanbevolen in situaties met meer dan 2 groepen. Behalve dat de t-test en ANOVA vergelijkbare resultaten opleveren.

Veronderstellingen

We gaan ervan uit dat elke factor willekeurig is bemonsterd, onafhankelijk is en afkomstig is uit een normaal verdeelde populatie met onbekende maar gelijke varianties.

Interpreteer ANOVA-test

De F-statistiek wordt gebruikt om te testen of de gegevens afkomstig zijn uit significant verschillende populaties, dat wil zeggen verschillende steekproefgemiddelden.

Om de F-statistiek te berekenen, moet je de delen variabiliteit tussen groepen de variabiliteit binnen de groep.

De tussen-groep Variabiliteit weerspiegelt de verschillen tussen de groepen binnen de gehele populatie. Kijk naar de twee onderstaande grafieken om het concept van variantie tussen groepen te begrijpen.

De linkergrafiek laat heel weinig variatie zien tussen de drie groepen, en het is zeer waarschijnlijk dat de drie gemiddelden naar de volgende neigen totaal gemiddelde (dat wil zeggen, gemiddelde voor de drie groepen).

In de rechtergrafiek zijn drie verdelingen weergegeven die ver uit elkaar liggen, en geen enkele overlapt elkaar. Er is een grote kans dat het verschil tussen het totale gemiddelde en het groepsgemiddelde groot zal zijn.

Interpreteer ANOVA-test

De binnen groep Variabiliteit houdt rekening met het verschil tussen de groepen. De variatie komt voort uit de individuele waarnemingen; sommige punten kunnen totaal anders zijn dan de groepsgemiddelden. De binnen groep variabiliteit pikt dit effect op en verwijst naar de steekproeffout.

Om het concept van variabiliteit binnen een groep visueel te begrijpen, kunt u de onderstaande grafiek bekijken.

Het linkerdeel geeft de verdeling van drie verschillende groepen weer. Je hebt de spreiding van elke steekproef vergroot en het is duidelijk dat de individuele variantie groot is. De F-toets zal afnemen, wat betekent dat u de neiging heeft de nulhypothese te aanvaarden

Het rechtergedeelte toont exact dezelfde steekproeven (identiek gemiddelde), maar met een lagere variabiliteit. Het leidt tot een verhoging van de F-toets en neigt in het voordeel van de alternatieve hypothese.

Interpreteer ANOVA-test

U kunt beide metingen gebruiken om de F-statistieken samen te stellen. Het is zeer intuïtief om de F-statistiek te begrijpen. Als de teller toeneemt, betekent dit dat de variabiliteit tussen de groepen hoog is en dat de groepen in de steekproef waarschijnlijk uit totaal verschillende verdelingen komen.

Met andere woorden: een lage F-statistiek duidt op weinig of geen significant verschil tussen het groepsgemiddelde.

Voorbeeld van een eenrichtings-ANOVA-test

U gebruikt de poison dataset om de one-way ANOVA-test te implementeren. De dataset bevat 48 rijen en 3 variabelen:

  • Tijd: overlevingstijd van het dier
  • gif: Gebruikt giftype: factorniveau: 1,2 en 3
  • treat: Type behandeling: factorniveau: 1,2 en 3

Voordat u begint met het uitvoeren van de ANOVA-test, moet u de gegevens als volgt voorbereiden:

  • Stap 1: Importeer de gegevens
  • Stap 2: Verwijder onnodige variabele
  • Stap 3: Converteer het variabele gif naar het bestelde 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, ...		

Ons doel is om de volgende aanname te testen:

  • H0: Er is geen verschil in gemiddelde overlevingstijd tussen groepen
  • H3: Het gemiddelde van de overlevingstijd is voor ten minste één groep verschillend.

Met andere woorden, je wilt weten of er een statistisch verschil is tussen het gemiddelde van de overlevingstijd afhankelijk van het soort gif dat aan de cavia wordt gegeven.

U gaat als volgt te werk:

  • Stap 1: Controleer het formaat van de variabele gif
  • Stap 2: Druk de samenvattende statistiek af: aantal, gemiddelde en standaarddeviatie
  • Stap 3: Teken een boxplot
  • Stap 4: Bereken de eenrichtings-ANOVA-test
  • Stap 5: Voer een paargewijze t-test uit

Stap 1) U kunt het niveau van het gif controleren met de volgende code. U zou drie karakterwaarden moeten zien omdat u ze in factor converteert met het werkwoord muteren.

levels(df$poison)

Output:

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

Stap 2) Je berekent het gemiddelde en de standaarddeviatie.

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

Stap 3) In stap drie kunt u grafisch controleren of er een verschil is tussen de verdelingen. Houd er rekening mee dat u de jitterende stip opneemt.

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:

Voorbeeld van een eenrichtings-ANOVA-test

Stap 4) U kunt de one-way ANOVA-test uitvoeren met de opdracht aov. De basissyntaxis voor een ANOVA-test is:

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

De syntaxis van de formule is:

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

U kunt onze vraag beantwoorden: Is er een verschil in overlevingstijd tussen cavia's, afhankelijk van het soort gif dat is toegediend?

Merk op dat het aangeraden is om het model op te slaan en de functie summary() te gebruiken om een ​​betere afdruk van de resultaten te krijgen.

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

Code Uitleg

  • aov(tijd ~ gif, data = df): Voer de ANOVA-test uit met de volgende formule
  • samenvatting(anova_one_way): Druk de samenvatting van de test af

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

De p-waarde is lager dan de gebruikelijke drempel van 0.05. U kunt met zekerheid zeggen dat er een statistisch verschil bestaat tussen de groepen, aangegeven door de “*”.

Paargewijze vergelijking

De one-way ANOVA-test informeert niet welke groep een ander gemiddelde heeft. In plaats daarvan kunt u een Tukey-test uitvoeren met de functie TukeyHSD().

TukeyHSD(anova_one_way)

Output:

Paargewijze vergelijking

Bidirectionele ANOVA

Een two-way ANOVA-test voegt een andere groepsvariabele toe aan de formule. Het is identiek aan de one-way ANOVA-test, hoewel de formule enigszins verandert:

y=x1+x2

with is een kwantitatieve variabele en en zijn categorische variabelen.

Hypothese in tweeweg-ANOVA-test

  • H0: De gemiddelden zijn gelijk voor beide variabelen (dwz factorvariabele)
  • H3: De gemiddelden zijn voor beide variabelen verschillend

U voegt de treat-variabele toe aan ons model. Deze variabele geeft de behandeling weer die aan de cavia wordt gegeven. U bent geïnteresseerd om te zien of er een statistische relatie bestaat tussen het gif en de behandeling die aan de cavia wordt gegeven.

We passen onze code aan door treat toe te voegen aan de andere onafhankelijke variabele.

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

Je kunt concluderen dat zowel vergif als behandeling statistisch verschillend zijn van 0. Je kunt de NULL-hypothese verwerpen en bevestigen dat het veranderen van de behandeling of het vergif de overlevingstijd beïnvloedt.

Samenvatting

We kunnen de test samenvatten in de onderstaande tabel:

Test Code Hypothese P-waarde
Eenrichtings-ANOVA
aov(y ~ X, data = df)
H3: Gemiddeld is voor tenminste één groep verschillend 0.05
paarsgewijs
TukeyHSD(ANOVA summary)
0.05
Tweeweg-ANOVA
aov(y ~ X1 + X2, data = df)
H3: Gemiddeld is voor beide groepen verschillend 0.05