venerdì 17 luglio 2009

ANOVA a due vie

L'analisi della varianza ad una via è utile per verificare contemporaneamente se le medie di più gruppi sono uguali. Ma questa analisi può risultare poco utile, ai fini di problemi più complessi. Ad esempio può essere necessario prendere in considerazione due fattori di variabilità, per verificare se le medie tra i gruppi dipendono dal gruppo di classificazione ("zone") o dalla seconda variabile che si va a considerare ("blocco"). In questo caso si ricorre ad una analisi della varianza a due vie (ANOVA a due vie, two-way ANOVA).

Cominciamo subito con un esempio, così da rendere più facile la comprensione di questo metodo statistico. I dati raccolti vengono organizzati in tabelle a doppia entrata.

Il direttore di una società ha raccolto le entrate (in migliaia di dollari) per 5 anni e in base al mese. Si vuole verificare se le entrate dipendono dall'annata e/o dal mese, oppure se sono indipendenti da questi due fattori.

Concettualmente il problema potrebbe essere risolto con un'ANOVA orizzontale, ed un ANOVA verticale. Si verifica cioè se le entrate medie classificate per anno siano uguali, e se sono uguali le entrate medie classificate per mese. Ciò richiederebbe numerosi calcoli, e pertanto si ricorre all'analisi ANOVA a due vie che offre il risultato istantaneamente.
Questa è la tabella delle entrate classificate per anno e per mese:



Come per l'ANOVA a una via, anche qui l'obiettivo è quello di strutturare un test F di Fisher per valutare la significatività della variabile mesi e della variabile anno, e stabilire se in base a uno (o entrambi) di questi criteri di classificazione dipendono le entrate.
In R la sintassi per l'ANOVA a due vie è la seguente. Innanzitutto si crea un array contenente tutti i valori tabulati, trascritti per riga:

> entrate = c(15,18,22,23,24, 22,25,15,15,14, 18,22,15,19,21,
+ 23,15,14,17,18, 23,15,26,18,14, 12,15,11,10,8, 26,12,23,15,18,
+ 19,17,15,20,10, 15,14,18,19,20, 14,18,10,12,23, 14,22,19,17,11,
+ 21,23,11,18,14)
>


A questo punto si classificano i valori così inseriti. In base ai mesi si crea un fattore a 12 livelli (numero righe) con 5 ripetizioni (numero colonne) in questa maniera:
> mesi = gl(12,5)

In base agli anni si crea un fattore a 5 livelli (numero colonne) e 1 ripetizione; si esplicita il numero di variabili inserite (la lunghezza dell'array entrate):
> anni = gl(5, 1, 60)

A questo punto è possibile fittare il modello lineare e produrre la tabella ANOVA:

> fit = aov(entrate ~ mesi + anni)
>
> anova(fit)

Analysis of Variance Table

Response: entrate
          Df Sum Sq Mean Sq F value Pr(>F)
mesi      11 308.45   28.04  1.4998 0.1660
anni       4  44.17   11.04  0.5906 0.6712
Residuals 44 822.63   18.70


Interpretiamo adesso i risultati.
La significatività della differenza tra mesi è: F = 1.4998. Questo valore è inferiore al valore tabulato e difatti p-value > 0.05. Quindi si accetta l'ipotesi nulla<: le medie valutate in base ai mesi sono uguali; quindi la variabile "mesi" non influisce sulle entrate.

La significatività della differenza tra anni è: F = 0.5906. Questo valore è inferiore al valore tabulato e difatti p-value > 0.05. Quindi si accetta l'ipotesi nulla: le medie valutate in base agli anni sono uguali; quindi la variabile "anni" non influisce sulle entrate.

10 commenti:

  1. Nel caso io dovessi confrontare 2 (o più gruppi) in base a diverse caratteristiche, va bene un ANOVA a due vie o dovre usare altro!?

    Es: Gruppi A B C

    Forma Tonda 10 8 4
    Colore chiaro 7 6 1
    Maculati 5 2 1

    Va bene l'ANOVA per sapere se i tre gruppi sono simili o meno!? Grazie

    RispondiElimina
  2. Secondo me sì... ma non ti posso assicurare ulla visto che sto approfondendo da poco l'argomento

    RispondiElimina
  3. Devo valutare la bontà di alcune comunità terapeutiche x tossicodipendenti. Posso usare l'ANOVA a due vie, per confrontare le strutture su caratteristiche simili (es.interruzione programma a 3, 6, 12 mesi, ricadute successive ecc)? Se si, esite la possibilità di stabilire delle graduatorie di merito?
    Grazie
    Daniele

    RispondiElimina
  4. ciao!!sto facendo vari test anova sui miei dati di laboratorio e il tuo articolo mi è risultato molto utile.Purtroppo però non riesco a capire come si fa a calcolare il livello di snificatività(pr)?
    Martina

    RispondiElimina
  5. @Martina
    Il livello di significatività corrisponde alla colonna Pr(>F). I numeri presenti sono il p-value, che andrai a confrontare con il tuo p-value di decisione (in genere 0.05), al fine di decidere se accettare o rifiutare l'ipotesi nulla.
    La significatività dell'intero modello la puoi ottenere con la funzione summary(fit), alla voce p-value, per decidere se l'ipotesi nulla del modello è significativa o no.

    RispondiElimina
  6. Scusate, ma nel caso in cui avessi più repliche per cella, come si imposta lo schema?

    RispondiElimina
  7. Per essere precisi con il comando
    >fit = aov(entrate ~ mesi + anni)
    si ottengono i risultati di due ANOVA a una via,
    infatti nei commenti (corretti)
    "Quindi si accetta l'ipotesi nulla: le medie valutate in base ai mesi sono uguali; quindi la variabile "mesi" non influisce sulle entrate."
    "Quindi si accetta l'ipotesi nulla: le medie valutate in base agli anni sono uguali; quindi la variabile "anni" non influisce sulle entrate."
    Si stanno commentanto i due risultati di due AOVA a una via.
    L'ANOVA a due vie serve per confrontare i sottogruppi di mesi e anni assieme (cioè, per confrontare il sottogruppo dei dati corrispondenti a mese=gennaio e anno=1 con il sottogruppo dei dati corrispondenti a mese=marzo e anno=5) che in questo caso è privo di senso poichè si ha un solo dato per sottogruppo.
    Il comando per l'ANOVA a due vie è semplicemente :
    >fit = aov(entrate ~ mesi * anni)

    RispondiElimina
  8. Domanda: nell'esempio, Pr era minore di F e maggiore di 0.05 e abbiamo accettato l'ipotesi nulla.
    Se avessimo avuto un caso in cui ad esempio Pr era minore di F, ma minore di 0.05 come lo avremmo interpretato?

    RispondiElimina
  9. Ciao, innanzitutto grazie per la spiegazione chiara di come implementare in R l'Anova a due vie. Ho però due dubbi: come faccio a valutare le interazioni? E come faccio i test post hoc dopo aver fatto un'Anova a due vie?

    Grazie mille

    RispondiElimina
  10. prima di effettuare ANOVA, bisogna verificare alcuni requisiti?
    *assunzione di normalità;
    *varianze uguale nei varie gruppi a confronto.
    altrimenti si usa test non parametrico se le assunzioni non sono rispettati.
    *l'altro dato, come verificare se ci sia interazione tra mesi e anni nel nostro esempio??

    RispondiElimina