Tutorial R ANOVA: unidirezionale e bidirezionale (con esempi)

Cos'è l'ANOVA?

Analisi della varianza (ANOVA) è una tecnica statistica, comunemente usata per studiare le differenze tra due o più medie di gruppo. Il test ANOVA è incentrato sulle diverse fonti di variazione in una variabile tipica. L'ANOVA in R fornisce principalmente la prova dell'esistenza dell'uguaglianza media tra i gruppi. Questo metodo statistico è un'estensione del t-test. Viene usato in una situazione in cui la variabile fattore ha più di un gruppo.

ANOVA a senso unico

Esistono molte situazioni in cui è necessario confrontare la media tra più gruppi. Ad esempio, il reparto marketing vuole sapere se tre team hanno le stesse prestazioni di vendita.

  • Squadra: fattore di livello 3: A, B e C
  • Vendita: una misura della performance

Il test ANOVA può stabilire se i tre gruppi hanno prestazioni simili.

Per chiarire se i dati provengono dalla stessa popolazione, è possibile eseguire a analisi della varianza unidirezionale (di seguito ANOVA unidirezionale). Questo test, come qualsiasi altro test statistico, fornisce prove se l'ipotesi H0 può essere accettata o rifiutata.

Ipotesi nel test ANOVA unidirezionale

  • H0: le medie tra i gruppi sono identiche
  • H3: Almeno, la media di un gruppo è diversa

In altre parole, l'ipotesi H0 implica che non ci siano prove sufficienti per dimostrare che la media del gruppo (fattore) è diversa da un'altra.

Questo test è simile al t-test, sebbene il test ANOVA sia raccomandato in situazioni con più di 2 gruppi. Tranne per il fatto che il t-test e l'ANOVA forniscono risultati simili.

Ipotesi

Assumiamo che ciascun fattore sia campionato casualmente, indipendente e provenga da una popolazione distribuita normalmente con varianze sconosciute ma uguali.

Interpretare il test ANOVA

La statistica F viene utilizzata per verificare se i dati provengono da popolazioni significativamente diverse, ovvero medie campionarie diverse.

Per calcolare la statistica F, è necessario dividere il variabilità tra gruppi sulla variabilità all’interno del gruppo.

tra gruppi la variabilità riflette le differenze tra i gruppi all’interno dell’intera popolazione. Guarda i due grafici seguenti per comprendere il concetto di varianza tra gruppi.

Il grafico a sinistra mostra pochissime variazioni tra i tre gruppi, ed è molto probabile che le tre medie tendano a coincidere complessivo media (cioè media per i tre gruppi).

Il grafico di destra traccia tre distribuzioni distanti tra loro e nessuna di esse si sovrappone. C'è un'alta probabilità che la differenza tra la media totale e la media dei gruppi sia ampia.

Interpretare il test ANOVA

all'interno del gruppo la variabilità considera la differenza tra i gruppi. La variazione deriva dalle singole osservazioni; alcuni punti potrebbero essere totalmente diversi da quelli indicati dal gruppo. IL all'interno del gruppo la variabilità coglie questo effetto e si riferisce all'errore di campionamento.

Per comprendere visivamente il concetto di variabilità all'interno del gruppo, guarda il grafico qui sotto.

La parte sinistra traccia la distribuzione di tre diversi gruppi. Hai aumentato la diffusione di ciascun campione ed è chiaro che la varianza individuale è ampia. Il test F diminuirà, il che significa che tenderai ad accettare l'ipotesi nulla

La parte destra mostra esattamente gli stessi campioni (media identica) ma con una variabilità inferiore. Porta ad un aumento del test F e tende a favorire l'ipotesi alternativa.

Interpretare il test ANOVA

È possibile utilizzare entrambe le misure per costruire le statistiche F. È molto intuitivo comprendere la statistica F. Se il numeratore aumenta, significa che la variabilità tra gruppi è elevata ed è probabile che i gruppi del campione provengano da distribuzioni completamente diverse.

In altre parole, una statistica F bassa indica una differenza significativa minima o nulla rispetto alla media del gruppo.

Esempio di test ANOVA unidirezionale

Utilizzerai il dataset poison per implementare il test ANOVA unidirezionale. Il dataset contiene 48 righe e 3 variabili:

  • Tempo: tempo di sopravvivenza dell'animale
  • veleno: Tipo di veleno utilizzato: livello di fattore: 1,2 e 3
  • trattare: Tipo di trattamento utilizzato: livello di fattore: 1,2 e 3

Prima di iniziare a calcolare il test ANOVA, è necessario preparare i dati come segue:

  • Passaggio 1: importa i dati
  • Passaggio 2: rimuovere la variabile non necessaria
  • Passaggio 3: converti la variabile veleno come livello ordinato
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)

Produzione:

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

Il nostro obiettivo è testare la seguente ipotesi:

  • H0: non vi è alcuna differenza nella media del tempo di sopravvivenza tra i gruppi
  • H3: La media del tempo di sopravvivenza è diversa per almeno un gruppo.

In altre parole, si vuole sapere se esiste una differenza statistica tra la media del tempo di sopravvivenza in base al tipo di veleno somministrato alla cavia.

Procederai come segue:

  • Passaggio 1: controlla il formato della variabile veleno
  • Passaggio 2: stampare la statistica riassuntiva: conteggio, media e deviazione standard
  • Passaggio 3: tracciare un box plot
  • Passaggio 4: calcolare il test ANOVA unidirezionale
  • Passaggio 5: eseguire un test t a coppie

Passo 1) Puoi controllare il livello del veleno con il seguente codice. Dovresti vedere tre valori di caratteri perché li converti in fattore con il verbo mutate.

levels(df$poison)

Produzione:

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

Passo 2) Si calcola la media e la deviazione standard.

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

Produzione:

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

Passo 3) Nel passaggio tre, puoi verificare graficamente se c'è una differenza tra la distribuzione. Tieni presente che includi il punto tremolante.

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

Produzione:

Esempio di test ANOVA unidirezionale

Passo 4) Puoi eseguire il test ANOVA unidirezionale con il comando aov. La sintassi di base per un test ANOVA è:

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

La sintassi della formula è:

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

Puoi rispondere alla nostra domanda: c'è qualche differenza nel tempo di sopravvivenza della cavia, conoscendo il tipo di veleno somministrato.

Si noti che si consiglia di memorizzare il modello e utilizzare la funzione summary() per ottenere una stampa migliore dei risultati.

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

Spiegazione del codice

  • aov(time ~ poison, data = df): esegui il test ANOVA con la seguente formula
  • summary(anova_one_way): Stampa il riepilogo del test

Produzione:

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

Il valore p è inferiore alla soglia abituale di 0.05. Sei sicuro di dire che esiste una differenza statistica tra i gruppi, indicata da "*".

Confronto a coppie

Il test ANOVA unidirezionale non informa quale gruppo ha una media diversa. Invece, puoi eseguire un test Tukey con la funzione TukeyHSD().

TukeyHSD(anova_one_way)

Produzione:

Confronto a coppie

ANOVA a due vie

Un test ANOVA bidirezionale aggiunge un'altra variabile di gruppo alla formula. È identico al test ANOVA unidirezionale, sebbene la formula cambi leggermente:

y=x1+x2

con è una variabile quantitativa e e sono variabili categoriali.

Ipotesi nel test ANOVA bidirezionale

  • H0: le medie sono uguali per entrambe le variabili (ovvero, variabile fattore)
  • H3: Le medie sono diverse per entrambe le variabili

Aggiungi la variabile Treat al nostro modello. Questa variabile indica il trattamento riservato alla cavia. Ti interessa vedere se esiste una dipendenza statistica tra il veleno e il trattamento riservato alla cavia.

Regoliamo il nostro codice aggiungendo Treat con l'altra variabile indipendente.

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

Produzione:

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

Puoi concludere che sia il veleno che il trattamento sono statisticamente diversi da 0. Puoi rifiutare l'ipotesi NULL e confermare che la modifica del trattamento o del veleno influisce sul tempo di sopravvivenza.

Sommario

Possiamo riassumere il test nella tabella seguente:

Test Code Ipotesi P-value
ANOVA unidirezionale
aov(y ~ X, data = df)
H3: la media è diversa per almeno un gruppo 0.05
a coppie
TukeyHSD(ANOVA summary)
0.05
ANOVA bidirezionale
aov(y ~ X1 + X2, data = df)
H3: La media è diversa per entrambi i gruppi 0.05