L’analisi della varianza, Anova. Spiegata semplice

L’analisi della varianza (ANOVA) è un test parametrico che valuta le differenze tra le medie di due o più gruppi di dati.
Si tratta di un test di ipotesi statistica che trova ampio impiego nell’ambito della ricerca scientifica e che consente di determinare se le medie di almeno due popolazioni sono diverse.
Sono necessari come presupposto minimo una variabile dipendente continua e una variabile indipendente categoriale che divida i dati in gruppi di confronto.

Il termine “analisi della varianza” deriva dal modo in cui l’analisi utilizza le varianze per determinare se le medie sono diverse.

ANOVA funziona confrontando la varianza delle medie tra i gruppi (è chiamata varianza between) con la varianza all’interno dei singoli gruppi (o varianza within).

L’analisi della varianza è stata sviluppata dal grande statistico Ronald Fisher (diciamo che è uno degli Dei nell’Olimpo della statistica…).
Non è un caso che Anova si basi su una distribuzione chiamata distribuzione F.

Youngronaldfisher2
Ronald Fisher in una foto giovanile
(da Wikipedia)

Anova: un test di tipo parametrico

Anova è un test di tipo parametrico. Richiede dunque che siano soddisfatti un certo numero di requisiti:

  • Normalità. I dati nei gruppi devono seguire una distribuzione normale.
  • Omogeneità delle varianze: i gruppi dovrebbero avere varianze approssimativamente uguali.
  • I residui seguono le assunzioni di minimi quadrati.
  • C’è almeno una variabile indipendente di tipo categorico (fattore).
  • La variabile dipendente è continua.
  • Le osservazioni sono indipendenti.

Perchè Anova e non una serie di t-test?

Una domanda che è lecito porsi è la seguente: perchè mai dovrei usare Anova quando posso usare una serie di confronti tra ogni gruppo e ognuno degli altri?
La risposta non è legata semplicemente alla noia e alla difficoltà nel dover svolgere un gran numero di test (ad esempio, per 4 fattori avrei bisogno di svolgere 6 differenti t-test). Il maggiore problema è che la probabilità di commettere un errore di Tipo I aumenta con una progressione di tipo esponenziale. Sappiamo che se scegliamo un alpha “tipico” di 0,05 fissiamo la probabilità di incorrere in un errore di Tipo I del 5%.
Se chiamiamo n il numero dei t-test da svolgere avremo una probabilità complessiva di commettere errori di Tipo I pari a:

\( 1-(1-\alpha)^n \\ \)

nel nostro esempio questo significa:

\( 1-(1-0,05)^6 = \\ 1-0,735 = \\ 0,265 \\ \\ \)

Vale a dire una probabilità di errore di Tipo I del 26,5% ! Chiaramente inaccettabile… Quando vogliamo testare la media di 3 o più gruppi, Anova è certamente da preferire rispetto a una serie di T-test.

Il caso più semplice: Anova a una via

Il tipo più semplice di test ANOVA è l’ANOVA a un fattore. Questo metodo è una generalizzazione dei t-test in grado di valutare la differenza tra più di due medie di gruppo.
I dati sono organizzati in vari gruppi sulla base di una singola variabile categorica (chiamata variabile fattore).

Come abbiamo detto, Anova è un test delle ipotesi. In questo caso, abbiamo una ipotesi nulla H0:
le medie tra i diversi gruppi sono uguali
e una ipotesi alternativa Ha:
almeno una media è diversa.

ATTENZIONE: Anova ci dice SE una media è diversa, non QUALE gruppo presenta una media differente. Per quello, avremo bisogno di un passaggio supplementare, il test post hoc, che vedremo a tempo debito.

Il modo “classico” (e un po’ tedioso) di svolgere un test Anova: la tabella Anova

E’ vero che utilizzare il modo “classico” di computare il risultato di un test Anova può fornire nozioni teoriche importanti, ma è altresì vero che chiunque utilizzi questa tipologia di test nella quotidianità difficilmente – per non dire mai – usa carta e penna e compila una tabella Anova… La praticità delle funzioni di R nel svolgere tutto il “lavoro duro” con un clic è davvero impagabile. Tuttavia, un esempio passo-passo ci fornirà una importante infarinatura. Siamo pronti a “sporcarci le mani”?

I passaggi che compiremo possono essere schematizzati così:

  • Calcoleremo la varianza comune, chiamata varianza nei campioni S2within, o varianza residuale.
  • Calcoleremo la varianza tra le medie dei campioni, quindi:
    La media di ogni gruppo
    La varianza tra le medie dei campioni (S2between)
  • E poi ricaveremo la statistica F come rapporto tra S2between/S2within

Dal momento che la SEO è uno dei campi che seguo con maggiore interesse, ipotizzo un esempio (ovviamente privo di reale valore) che ha per oggetto l’analisi dei dati di traffico di un sito web.

La mia variabile indipendente a più fattori è il tipo di dispositivo usato dai navigatori: desktop, mobile, tablet.

La mia variabile dipendente saranno gli obiettivi realizzati sul sito.

Immaginiamo di seguire i dati mensili per 6 mesi e di ricavare queste misure:

DesktopMobileTablet
394530
675445
786422
595239
424638
513541
Obiettivi per device

Vado a calcolare la media dei valori per il gruppo Desktop:
(39+67+78+59+42+51)/6 = 56

Calcolo la media per Mobile:
(45+54+64+52+46+35)/6 = 49,3

E quella per i Tablet:
(30+45+22+39+38+41)/6 = 35,83

Passiamo a calcolare le somme dei quadrati:

DesktopMobileTablet
(39-56)2 = 289(45-49,3)2 = 18,49(30-35.83)2 = 33.99
(67-56)2 = 121(54-49,3)2 = 22.09(45-35.83)2 = 84.09
(78-56)2 = 484(64-49,3)2 = 216.09(22-35.83)2 = 191.27
(59-56)2 = 9(52-49,3)2 = 7.29(39-35.83)2 = 10.05
(42-56)2 = 196(46-49,3)2 = 10.89(38-35.83)2 = 4.71
(51-56)2 = 25(35-49,3)2 = 204.49(41-35.83)2 = 26.73
TotaleTotaleTotale
1124479.34350.84

Siamo pronti per ricavare SSe, la somma degli errori quadratici:
SSe = 1124 + 479.34 + 350.84 = 1954.18

Calcoliamo la Grande Media di tutte le osservazioni, sommando i valori del gruppo desktop,mobile e tablet e dividendoli per il numero delle osservazioni:
(336+296+215)/18 = 47

Procediamo nel calcolo aiutandoci con una tabella:

A-OsservazioniB-Grande MediaC-Media(B-C)2A * D
Desktop6475681486
Mobile64749,35.2931.74
Tablet64735.83124.77748.62

E troviamo così la Somma dei Quadrati between:

SSb = 486 + 31.74 + 748.62 = 1266,4

Ancora un piccolo sforzo, ma ora viene il bello!

I gradi di libertà between df1 sono uguali a N – 1, quindi:
3 – 1 = 2
I gradi di libertà within df2 sono uguali a N – K, quindi:
18 – 3 = 15

Troviamo la Media Quadrata dell’Errore, MSe:

\( MS_e=\frac{SS_e}{df_2} \\ \frac{1954.18}{15} = 130.3 \\ \\ \)

E la Media Quadrata between:

\( MS_b=\frac{SS_b}{df_1} \\ \frac{1266.4}{2}=633.18 \\ \\ \)

E’ arrivato il momento: possiamo ricavare finalmente il nostro valore F!

\( F=\frac{MS_b}{MS_e} \\ \frac{633.18}{130.3}=4.86 \\ \)

Ho finalmente trovato il valore che cercavo, F=4.86.
Non mi resta che prendere in mano una tabella della distribuzione F e andare a cercare il valore critico in corrispondenza dell’incrocio tra i valori df2/df1.
Quel valore risulta essere pari a 3.68.

Il mio valore F=4.86 cade nella zona di rigetto dell’ipotesi nulla H0
Il mio test, per un valore alpha di 0.05, mi indica che le medie dei tre gruppi non sono uguali.

Quanta fatica… E’ ora di sfruttare tutta la potenza di R

I valori d’esempio sono contenuti in questo file csv.

Ipotizzando di avere il nostro file csv nella home, posso creare uno script R in Rstudio e caricare il mio semplicissimo dataset:

obiettivianova <- read.csv("~/anova-ex1.csv")

Uno sguardo grafico a come si presentano i valori per i tre gruppi:

boxplot(obiettivianova$obiettivi ~ obiettivianova$device, main="Boxplot obiettivi per device", xlab="Device", ylab="Obiettivi")
boxplot

Già il boxplot sembra suggerirci qualcosa, ma ovviamente procediamo analiticamente.

Diamo uno sguardo alle medie:

aggregate(obiettivi ~ device,obiettivianova,mean)
   device obiettivi
1 desktop  56.00000
2  mobile  49.33333
3  tablet  35.83333

e procediamo con il nostro test:

miomodello <- aov(obiettivianova$obiettivi ~ obiettivianova$device)

summary(miomodello)

l’output che otteniamo è il seguente:

                      Df Sum Sq Mean Sq F value Pr(>F)  
obiettivianova$device  2   1267   633.4   4.862 0.0236 *
Residuals             15   1954   130.3                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

La potenza di R qui è evidente. Bastano pochi attimi per avere un sacco di informazioni utili. Il valore di F è 4,862, i gradi di libertà sono 2, ecc.ecc.
Non serve consultare la tabella della distribuzione F (o usare il comando R corrispondente) perchè già è presente il p-value, che segnala il rigetto dell’ipotesi nulla al livello del 5% (p= 0.0236 < 0,05).

Anova ci dice che le medie non sono tutte uguali. E’ giunto il momento di un test post-hoc per poter valutare dove si trova “l’anomalia”:

TukeyHSD(miomodello)

Il Test HSD di Tukey è uno dei test post hoc più utili in casi come quello in esame. Ci restituisce questo output:

                     diff       lwr       upr     p adj
mobile-desktop  -6.666667 -23.78357 10.450234 0.5810821
tablet-desktop -20.166667 -37.28357 -3.049766 0.0204197
tablet-mobile  -13.500000 -30.61690  3.616900 0.1348303

Come si può notare, mentre per il confronto tra le medie mobile-desktop e tablet-mobile non possiamo scartare l’ipotesi nulla, lo stesso non si può dire nel caso delle medie tablet-desktop, dove la differenza risulta statisticamente significativa.

Un caso pratico SEO: il tempo sulla pagina dipende dal canale?

Mettiamo l’Anova al lavoro su una domanda che chiunque guardi i dati di un sito si pone prima o poi: gli utenti che arrivano da canali diversi si comportano in modo diverso? Abbiamo il tempo sulla pagina (in secondi) di alcune sessioni provenienti da quattro canali — organico, diretto, paid e social — e vogliamo sapere se l’engagement varia tra loro. È esattamente la situazione per cui l’Anova esiste: una variabile di risposta continua (il tempo) e un fattore categoriale con più di due livelli (il canale).

organico <- c(98, 112, 85, 105, 92, 120, 88, 101)
diretto  <- c(90, 102, 78, 95, 110, 84, 99, 88)
paid     <- c(72, 65, 80, 58, 70, 75, 62, 68)
social   <- c(55, 48, 62, 50, 44, 58, 52, 46)

tempo  <- c(organico, diretto, paid, social)
canale <- factor(rep(c("organico","diretto","paid","social"), each = 8))

summary(aov(tempo ~ canale))
#             Df Sum Sq Mean Sq F value   Pr(>F)
# canale       3  11913    3971   46.82 4.89e-11 ***
# Residuals   28   2375      85
round(tapply(tempo, canale, mean), 1)
#  diretto organico     paid   social
#     93.2    100.1     68.8     51.9

Il valore di F è 46,82 e il p-value è dell’ordine di 10⁻¹¹: ben al di sotto di qualsiasi soglia ragionevole. Rifiutiamo l’ipotesi nulla e concludiamo che almeno un canale ha un tempo sulla pagina medio diverso dagli altri. E le medie raccontano una storia coerente con l’intuizione di chi fa SEO: l’organico è il canale più «coinvolto» (100 secondi di media), seguito dal diretto (93), mentre il social si ferma a 52 — il traffico che arriva da un feed tende a rimbalzare in fretta.

Un’avvertenza, però, che vale come per ogni test: l’Anova ci dice che una differenza esiste, non quanto è grande né quali canali differiscono tra loro. Per il «quanto» possiamo calcolare la quota di varianza spiegata dal canale (l’eta-quadro, η²): qui è 11913 / (11913 + 2375) ≈ 0,83, cioè il canale spiega l’83% della variabilità nei tempi — un effetto fortissimo. È il terreno dell’effect size. Per il «quali», invece, serve un test post-hoc come il Tukey HSD che abbiamo appena visto.

Prova tu

Tocca a te. Un e-commerce ha fatto girare tre campagne (A, B, C) e vuole sapere se il valore medio dell’ordine (in euro) cambia in modo significativo tra di esse. Ecco gli ordini raccolti, otto per campagna:

camp_A <- c(42, 38, 45, 50, 41, 47, 39, 44)
camp_B <- c(48, 52, 46, 55, 50, 53, 49, 51)
camp_C <- c(44, 40, 49, 43, 46, 41, 45, 47)

valore   <- c(camp_A, camp_B, camp_C)
campagna <- factor(rep(c("A","B","C"), each = 8))
summary(aov(valore ~ campagna))

Il compito: leggere F e il p-value, e decidere se le tre campagne hanno lo stesso valore medio dell’ordine. Per controllare i conti: F vale 10,77 e il p-value 0,0006 — la differenza è significativa, e guardando le medie (A 43,2 · B 50,5 · C 44,4) si vede che è la campagna B a fare la differenza. Un test post-hoc lo confermerebbe puntando il dito proprio su B.

L’Anova è una di quelle idee che, una volta capite, si vedono ovunque: ogni volta che confrontiamo una metrica continua tra più gruppi — canali, dispositivi, varianti, periodi — è lo strumento giusto per non confondere il rumore con il segnale. E non è un’isola: sotto il cofano, l’analisi della varianza e la regressione lineare sono lo stesso identico modello, visto da due angolazioni diverse. È da quel modello — il modello lineare — che passa la parte più potente della statistica applicata, ed è lì che il nostro percorso continua.

Potrebbe interessarti anche


Per approfondire

L’analisi della varianza è trattata in tutte le sue forme — a una via, a due vie, con misure ripetute — in Statistica di Newbold, Carlson e Thorne, per chi vuole andare oltre l’introduzione di questo articolo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *