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