sabato 4 luglio 2009

Confronto tra più gruppi, metodo parametrico: analisi della varianza ANOVA

Analisi della varianza: ANOVA

Il metodo ANOVA permette di effettuare il confronto tra più gruppi, con metodo parametrico (supponendo cioè che i vari gruppi seguano una distribuzione gaussiana).
Procediamo con il seguente esempio:

Il dirigente di una catena di supermercati vuole verificare se il consumo in KiloWatt di 4 suoi negozi siano tra loro uguali. Raccoglie i dati alla fine di ogni mese, per 6 mesi. I risultati sono i seguenti:
Supermercato A: 65, 48, 66, 75, 70, 55
Supermercato B: 64, 44, 70, 70, 68, 59
Supermercato C: 60, 50, 65, 69, 69, 57
Supermercato D: 62, 46, 68, 72, 67, 56


Per procedere con la verifica ANOVA, occorre dapprima verificare l'omoschedasticità (ossia effettuare test per l'omogeneità delle varianze). Il software R mette a disposizione due test nel pacchetto standard: il test di Bartlett e il test di Fligner-Killeen; numerosi altri test per testare l'omogeneità delle varianze (test di Hartley, di Cochran, di Levene, eccetera) vengono discussi in questo post.




Cominciamo con il test di Bartlett.

Per prima cosa creiamo 4 array con i valori:


a = c(65, 48, 66, 75, 70, 55)
b = c(64, 44, 70, 70, 68, 59)
c = c(60, 50, 65, 69, 69, 57)
d = c(62, 46, 68, 72, 67, 56)


Adesso concateniamo i 4 valori in un unico vettore:


dati = c(a, b, c, d)


Ora su questo unico contenitore in cui sono salvati tutti i dati, creiamo i 4 livelli:


gruppi = factor(rep(letters[1:4], each = 6))


Possiamo osservare il contenuto del vettore gruppi semplicemente digitando gruppi + [invio].

A questo punto avviamo il test di Bartlett:


bartlett.test(dati, gruppi)

Bartlett test of homogeneity of variances

data: dati and gruppi
Bartlett's K-squared = 0.4822, df = 3, p-value = 0.9228


La funzione ci ha fornito il valore della statistica test, nonché il p-value. Possiamo affermare che le varianze sono omogenee essendo p-value > 0.05. In alternativa possiamo confrontare il Bartlett's K-squared con il valore del chi-quadro-tabulato; calcoliamo quest'ultimo valore, assegnando il valore di alpha e i gradi di libertà:


qchisq(0.950, 3)
[1] 7.814728


Come vedete, chi-quadro-tabulato è maggiore di Bartlett's K-squared, quindi l'ipotesi di omoschedasticità è vera.




Proviamo a verificare l'omoschedasticità con il test di Fligner-Killeen.
La sintassi è del tutto analoga, quindi procediamo velocemente.


a = c(65, 48, 66, 75, 70, 55)
b = c(64, 44, 70, 70, 68, 59)
c = c(60, 50, 65, 69, 69, 57)
d = c(62, 46, 68, 72, 67, 56)

dati = c(a, b, c, d)

gruppi = factor(rep(letters[1:4], each = 6))

fligner.test(dati, gruppi)

Fligner-Killeen test of homogeneity of variances

data: dati and gruppi
Fligner-Killeen:med chi-squared = 0.1316, df = 3, p-value = 0.9878


Le conclusioni sono analoghe a quelle viste per il test di Bartlett.




Verificata l'omoschedasticità dei 4 gruppi, possiamo procedere con il metodo ANOVA.

Anzitutto organizziamo i valori:


modello = lm(formula = dati ~ gruppi)


Quindi analizziamo col metodo ANOVA:


anova (modello)

Analysis of Variance Table

Response: dati
Df Sum Sq Mean Sq F value Pr(>F)
gruppi 3 8.46 2.82 0.0327 0.9918
Residuals 20 1726.50 86.33


L'output della funzione è la classica tabella ANOVA con i seguenti dati:
Df = gradi di libertà
Sum Sq = devianza (entro gruppi, e residua)
Mean Sq = varianza (entro gruppi, e residua)
F value = è il valore della statistica test, calcolato come (varianza entro gruppi) / (varianza residua)
Pr(>F) = è il p-value

Essendo p-value > 0.05, accettiamo l'ipotesi H0: le medie dei valori sono statisticamente uguali. Per sicurezza possiamo confrontare F-value con il valore F-tabulato (alpha, gradi di libertà del numeratore, gradi di libertà del denominatore):


qf(0.950, 20, 3)
[1] 8.66019


Poiché F-tabulato > F-value-calcolato, posso concludere accettando l'ipotesi H0: le medie sono statisticamente uguali.

Se l'ANOVA fosse risultata significativa (ossia se p-value < 0.05, allora vuol dire che non tutte le medie dei k gruppi considerati sono tra loro uguali. Occorre andare a ricercare quale o quali coppie di gruppi rendono significativa l'ANOVA, ossia si deve cercare quali coppie di medie sono significativamente differenti. Per far questo sono a disposizione gli ANOVA post hoc-tests, di cui si parla in questo post.

7 commenti:

  1. Io conoscevo il test di normalità di Kolmogorov-Sirnov o quello di Shapiro-Wilk. Forse mi sbaglio.

    RispondiElimina
  2. Non sbagli, sono altri test per verificare la normalità dei dati. Se fai un ricerca nel blog, trovi quelli ed anche altri ancora.

    RispondiElimina
  3. appena ho tempo me lo studio per bene, intanto me lo salvo tra i preferiti... grazie!!

    RispondiElimina
  4. Ciao, volevo solo ragguagliarti di un'inesattezza (almeno credo): il quantile di F associato al livello di significatività 0.95 è 3.098 e non 8.660 poichè hai invertito i g.d.l. in qf(). Credo sia qf(0.95,3,20).

    RispondiElimina
  5. Ciao, grazie del post.
    Una domanda: ma se i quattro vettori iniziali avessero lunghezza diversa, come potrei fare?
    grazie

    RispondiElimina
  6. Salve,
    volevo sapere come potevo creare una matrice con celle multivalore come quella nella seguente iimmagine
    [IMG]http://i67.tinypic.com/30l06zr.jpg[/IMG]
    http://it.tinypic.com/r/30l06zr/9

    Grazie

    RispondiElimina
  7. Salve, sto muovendo i miei primi passi in R. Volevo chiedere: come faccio a confrontare una stessa variabile categorica in 3 o più gruppi diversi? La funzione chisq.test funziona solo se ho 2 gruppi di confronto.. Cosa uso invece se i gruppi di confronto sono 3 o più di 3? Grazie mille

    RispondiElimina