ANOVA in R: test a una e due vie con esempi
โก Riepilogo intelligente
In R, l'ANOVA confronta le medie di tre o piรน gruppi suddividendo la variazione totale in componenti tra gruppi e all'interno dei gruppi. Questa procedura guidata esegue test a una e due vie sul dataset dei veleni, verifica le ipotesi e isola le coppie differenti con il test HSD di Tukey.

Cos'รจ l'ANOVA?
Analisi della varianza (ANOVA) รจ una tecnica statistica utilizzata per confrontare le medie di due o piรน gruppi. Il test funziona suddividendo la variazione totale in una misurazione nella parte spiegata dall'appartenenza al gruppo e nella parte rimanente come rumore casuale. L'ANOVA in R quindi ti dice se almeno una media di gruppo differisce dalle altre, non quale. ร un'estensione diretta dell' test t in situazioni in cui la variabile fattoriale ha piรน di due livelli.
Prima di eseguire un test, รจ utile sapere quale membro della famiglia ANOVA si adatta al proprio disegno sperimentale.
Tipi di test ANOVA in R
L'ANOVA รจ una famiglia di test, non una singola procedura. La scelta del test piรน adatto dipende dal numero di fattori da considerare e dalle modalitร di raccolta dei dati.
| Test | Quando usarlo | Chiamata R |
|---|---|---|
| ANOVA a senso unico | Un fattore con tre o piรน livelli | aov(y ~ x, dati = df) |
| ANOVA a due vie | Due fattori indipendenti | aov(y ~ x1 + x2, dati = df) |
| Interazione bidirezionale | L'effetto di un fattore dipende dall'altro | aov(y ~ x1 * x2, dati = df) |
| ANOVA a misure ripetute | Gli stessi soggetti misurati piรน di una volta | aov(y ~ x + Errore(soggetto/x)) |
| ANCORA | ร necessario controllare una covariata continua per | aov(y ~ x + covariata, dati = df) |
| MANOVA | Due o piรน variabili di risposta contemporaneamente | manova(cbind(y1, y2) ~ x) |
Questo tutorial illustra le prime tre varianti. Le varianti rimanenti utilizzano la stessa interfaccia aov(), quindi una volta che si รจ in grado di leggere una tabella di output, si possono leggere tutte.
ANOVA vs. test t in R: differenze principali
Entrambi i test confrontano le medie, quindi รจ opportuno precisare in che punto uno sostituisce l'altro.
| Criteri | Prova T | ANOVA |
|---|---|---|
| Numero di gruppi | Esattamente due | Due o piรน |
| Statistica di prova | t | F, uguale a t al quadrato quando ci sono due gruppi |
| Risultato | Indica la direzione della differenza | Solo segnalano che esiste una differenza |
| ร necessario un follow-up | Nona | Test post hoc come Tukey HSD |
| funzione R | t.test() | aov() |
La tentazione con tre gruppi รจ quella di eseguire tre test t separati. Resisti. Ogni test ha il suo tasso di errore del 5%, quindi tre confronti portano la probabilitร di un falso positivo a circa il 14%. L'ANOVA risponde alla stessa domanda con un singolo test, e il test HSD di Tukey gestisce quindi i dettagli a coppie con il tasso di errore tenuto sotto controllo. Per il caso di due gruppi, vedere il tutorial sul test t.
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 (ANOVA a una via d'ora in poi). Come qualsiasi altro test statistico, fornisce prove sulla possibilitร di rifiutare l'ipotesi H0. Si noti che non rifiutare H0 non equivale a dimostrarne la veridicitร .
Ipotesi nel test ANOVA unidirezionale
- H0: le medie tra i gruppi sono identiche
- H1: Almeno, la media di un gruppo รจ diversa
In altre parole, non rifiutare H0 significa che non ci sono prove sufficienti per concludere che la media di un gruppo differisce da quella degli altri.
Questo test รจ simile al test t, ma l'ANOVA รจ la scelta corretta quando ci sono piรน di due gruppi. Con esattamente due gruppi, i due test sono equivalenti e la statistica F รจ uguale al quadrato della statistica t.
Ipotesi
L'ANOVA a una via si basa su tre condizioni: le osservazioni sono campionate in modo casuale e indipendenti l'una dall'altra, i residui all'interno di ciascun gruppo sono approssimativamente distribuiti normalmente e la varianza รจ la stessa in ogni gruppo (omogeneitร della varianza). La sezione sulla verifica delle ipotesi, riportata di seguito, mostra come testare ciascuna di esse in R.
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.
Migliori tra gruppi La variabilitร riflette quanto la media di ciascun gruppo si discosti dalla media generale. Confronta i due grafici sottostanti per comprendere meglio il concetto.
Il grafico a sinistra mostra pochissima variazione tra i tre gruppi, quindi tutte e tre le medie dei gruppi sono vicine a complessivo significare.
Il grafico a destra mostra tre distribuzioni molto distanti tra loro e senza sovrapposizioni, quindi il divario tra la media complessiva e la media di ciascun gruppo รจ ampio.
Migliori all'interno del gruppo La variabilitร misura quanto le singole osservazioni si discostano dalla media del proprio gruppo. Alcuni punti si trovano molto distanti dalla media del gruppo e il termine "all'interno del gruppo" cattura proprio questa dispersione, che rappresenta l'errore di campionamento.
Per comprendere visivamente il concetto di variabilitร all'interno del gruppo, guarda il grafico qui sotto.
La parte sinistra mostra la distribuzione di tre gruppi diversi. Hai aumentato la dispersione di ciascun campione ed รจ chiaro che la varianza individuale รจ elevata. La statistica F diminuisce, quindi non puoi rifiutare l'ipotesi nulla.
La parte destra mostra campioni con la stessa media ma con una dispersione molto inferiore. Ciรฒ aumenta la statistica F e depone a favore dell'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, un basso valore della statistica F indica una differenza minima o nulla tra le medie dei gruppi.
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
- H1: La media del tempo di sopravvivenza รจ diversa per almeno un gruppo.
In altre parole, si vuole sapere se esiste una differenza statisticamente significativa 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 confronto a coppie con Tukey HSD
Passo 1) Verifica i livelli di veleno con il codice seguente. Dovresti visualizzare tre valori di tipo carattere, poichรฉ il verbo mutate ha convertito la colonna in un fattore ordinato.
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
Ora puoi rispondere alla domanda: c'รจ qualche differenza nel tempo di sopravvivenza tra le cavie, a seconda del tipo di veleno somministrato?
Memorizza il modello in un oggetto e passalo alla funzione summary() per ottenere una stampa leggibile dei risultati.
anova_one_way <- aov(time~poison, data = df) summary(anova_one_way)
Code Spiegazione
- 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 รจ 7.66e-05, ben al di sotto della soglia usuale di 0.05, e le tre stelle indicano il codice di significativitร piรน forte. ร possibile rifiutare H0 e concludere che almeno un gruppo di veleni ha un tempo di sopravvivenza medio diverso.
Come verificare le ipotesi dell'ANOVA in R
Il valore p di un'analisi ANOVA รจ affidabile solo se vengono soddisfatte le tre condizioni elencate in precedenza. Ciascuna di esse ha una verifica diretta in R, e tutte vengono eseguite sull'oggetto modello adattato.
1. Indipendenza delle osservazioni. Questa รจ una caratteristica del disegno dello studio, non dei dati, quindi nessun test puรฒ porvi rimedio. Ogni cavia deve essere misurata una sola volta e assegnata al suo gruppo in modo casuale. Se lo stesso soggetto compare in piรน righe, รจ necessario utilizzare un modello a misure ripetute.
2. Normalitร dei residui. L'ANOVA presuppone che i residui, e non i dati grezzi, seguano una distribuzione approssimativamente normale. Esamina il grafico QQ e conferma con il test di Shapiro-Wilk:
par(mfrow = c(2, 2)) plot(anova_one_way) # four diagnostic plots shapiro.test(residuals(anova_one_way))
I punti che si trovano lungo la diagonale del grafico QQ normale indicano residui distribuiti normalmente. Un valore p del test di Shapiro-Wilk superiore a 0.05 significa che non รจ possibile rifiutare l'ipotesi di normalitร .
3. Omogeneitร della varianza. Ogni gruppo dovrebbe mostrare una dispersione simile. Il grafico dei residui rispetto ai valori previsti dovrebbe apparire come una banda piatta piuttosto che come un imbuto. Confermatelo con il test di Levene, che รจ piรน robusto alla non normalitร rispetto al test di Bartlett:
library(car)
leveneTest(time ~ poison, data = df)
bartlett.test(time ~ poison, data = df)
Un valore p superiore a 0.05 supporta l'uguaglianza delle varianze.
Cosa fare quando un'ipotesi si rivela errata. Se le varianze sono disuguali, esegui oneway.test(time ~ poison, data = df, var.equal = FALSE), la correzione di Welch. Se i residui non sono chiaramente normali e il campione รจ piccolo, passa al test di rango di Kruskal-Wallis, kruskal.test(time ~ poison, data = df). Con campioni ampi e bilanciati, l'ANOVA รจ abbastanza robusta a deviazioni moderate dalla normalitร , quindi un risultato al limite del test di Shapiro-Wilk raramente รจ fatale.
Confronto a coppie
Un test F significativo indica che le medie dei gruppi non sono tutte uguali, ma non quale coppia differisce. Il test di Tukey per la differenza significativa onesta risponde a questa domanda confrontando ogni coppia e controllando il tasso di errore complessivo.
TukeyHSD(anova_one_way)
Produzione:
Leggi l'output una riga per coppia. diff la colonna contiene la differenza tra le medie dei due gruppi, lwr and licenza delimitare l'intervallo di confidenza del 95% per tale differenza e p adj Il valore p รจ corretto per confronti multipli. Una coppia differisce significativamente quando il suo intervallo esclude lo zero, equivalentemente quando p adj รจ inferiore a 0.05. In questo set di dati, i confronti che coinvolgono il veleno 3 sono quelli significativi, il che corrisponde al box plot: il gruppo 3 ha un tempo di sopravvivenza medio nettamente inferiore rispetto ai gruppi 1 e 2, mentre i gruppi 1 e 2 sono statisticamente indistinguibili tra loro.
ANOVA a due vie
Un'ANOVA a due vie aggiunge un secondo fattore alla formula. Funziona esattamente come il test a una via, cambia solo la formula:
y ~ x1 + x2
Qui y rappresenta la variabile di risposta quantitativa, mentre x1 e x2 sono entrambi fattori categoriali.
Ipotesi nel test ANOVA bidirezionale
- H0: Le medie di gruppo sono uguali per entrambe le variabili fattoriali
- H1: Almeno una media di gruppo differisce, per almeno uno dei due fattori
Si aggiunge la variabile "trattamento" al modello. Questa variabile registra il trattamento somministrato alla cavia. La formula additiva riportata di seguito verifica se ciascun fattore influisce sul tempo di sopravvivenza singolarmente, dopo aver tenuto conto degli altri.
Modifica il codice aggiungendo "treat" accanto alla prima 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 ## ---
Entrambi i valori p (5.7e-07 per il veleno e 6.7e-06 per il trattamento) sono ben al di sotto di 0.05, quindi si rifiuta H0 per entrambi i fattori e si conclude che la modifica del veleno o del trattamento influisce sul tempo di sopravvivenza.
Aggiunta di un termine di interazione
Il modello additivo sopra riportato presuppone che l'effetto del veleno sia lo stesso indipendentemente dal trattamento. Per verificare tale presupposto, sostituite il segno piรน con un asterisco, che rappresenta sia gli effetti principali che la loro interazione:
anova_interaction <- aov(time~poison * treat, data = df) summary(anova_interaction)
Se la riga veleno:trattamento non รจ significativa, il modello additivo รจ la scelta migliore perchรฉ richiede un minor numero di gradi di libertร .
ANOVA in R: Guida rapida al test
La tabella seguente elenca ciascun test utilizzato in precedenza, la chiamata R che lo esegue e l'ipotesi che valuta:
| Test | Code | Ipotesi | P-value |
|---|---|---|---|
| ANOVA unidirezionale |
aov(y ~ X, data = df)
|
H1: la media รจ diversa per almeno un gruppo | 0.05 |
| a coppie |
TukeyHSD(ANOVA summary) |
0.05 | |
| ANOVA bidirezionale |
aov(y ~ X1 + X2, data = df)
|
H1: Almeno una media di gruppo differisce per entrambi i fattori | 0.05 |




