Come eseguire un'anova a tre vie in r


Un’ANOVA a tre vie viene utilizzata per determinare se esiste o meno una differenza statisticamente significativa tra le medie di tre o più gruppi indipendenti distribuiti su tre fattori.

L’esempio seguente mostra come eseguire un’ANOVA a tre vie in R.

Esempio: ANOVA a tre vie in R

Supponiamo che un ricercatore voglia determinare se due programmi di allenamento portano a diversi miglioramenti medi nell’altezza del salto tra i giocatori di basket del college.

Il ricercatore sospetta che anche il sesso e la divisione (Divisione I o II) possano influenzare l’altezza del salto, motivo per cui raccoglie dati anche su questi fattori.

Il suo obiettivo è eseguire un’ANOVA a tre vie per determinare in che modo il programma di allenamento, il sesso e la divisione influiscono sull’altezza del salto.

Seguire i seguenti passaggi per eseguire questa ANOVA a tre vie in R:

Passaggio 1: creare i dati

Innanzitutto, creiamo un data frame per contenere i dati:

 #create dataset
df <- data. frame (program=rep(c(1, 2), each= 20 ),
                 gender=rep(c(' M ', ' F '), each= 10 , times= 2 ),
                 division=rep(c(1, 2), each= 5 , times= 4 ),
                 height=c(7, 7, 8, 8, 7, 6, 6, 5, 6, 5,
                          5, 5, 4, 5, 4, 3, 3, 4, 3, 3,
                          6, 6, 5, 4, 5, 4, 5, 4, 4, 3,
                          2, 2, 1, 4, 4, 2, 1, 1, 2, 1)) 

#view first six rows of dataset
head(df)

  program gender division height
1 1 M 1 7
2 1 M 1 7
3 1 M 1 8
4 1 M 1 8
5 1 M 1 7
6 1 M 2 6

Passaggio 2: visualizza le statistiche descrittive

Prima di eseguire l’ANOVA a tre vie, possiamo utilizzare dplyr per riassumere rapidamente l’aumento medio dell’altezza del salto raggruppato per programma di allenamento, genere e divisione:

 library (dplyr)

#calculate mean jumping height increase grouped by program, gender, and division
df %>%
  group_by(program, gender, division) %>%
  summarize(mean_height = mean(height))

# A tibble: 8 x 4
# Groups: program, gender [4]
  program gender division mean_height
                 
1 1 F 1 4.6
2 1 F 2 3.2
3 1 M 1 7.4
4 1 M 2 5.6
5 2 F 1 2.6
6 2 F 2 1.4
7 2 M 1 5.2
8 2 M 2 4  

Ecco come interpretare il risultato:

  • L’aumento medio dell’altezza del salto per le donne della Divisione I che hanno utilizzato il Programma di Allenamento 1 è stato di 4,6 pollici .
  • L’aumento medio dell’altezza del salto tra le donne della Divisione II che hanno utilizzato il Programma di Allenamento 1 è stato di 3,2 pollici .
  • L’aumento medio dell’altezza del salto tra gli uomini della Divisione I che hanno utilizzato il Programma di Allenamento 1 è stato di 7,4 pollici .

E così via.

Passaggio 3: eseguire l’ANOVA a tre vie

Successivamente, possiamo utilizzare la funzione aov() per eseguire l’ANOVA a tre vie:

 #perform three-way ANOVA
model <- aov(height ~ program * gender * division, data=df)

#view summary of three-way ANOVA
summary(model)

                        Df Sum Sq Mean Sq F value Pr(>F)    
program 1 36.1 36.10 65.636 2.98e-09 ***
gender 1 67.6 67.60 122.909 1.71e-12 ***
division 1 19.6 19.60 35.636 1.19e-06 ***
program:gender 1 0.0 0.00 0.000 1.000    
program:division 1 0.4 0.40 0.727 0.400    
gender:division 1 0.1 0.10 0.182 0.673    
program:gender:division 1 0.1 0.10 0.182 0.673    
Residuals 32 17.6 0.55                     
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

La colonna Pr(>F) mostra il valore p per ogni singolo fattore e le interazioni tra i fattori.

Dai risultati possiamo vedere che nessuna delle interazioni tra i tre fattori era statisticamente significativa.

Possiamo anche vedere che ciascuno dei tre fattori – programma, genere e divisione – era statisticamente significativo.

Ora possiamo utilizzare nuovamente dplyr per trovare separatamente l’aumento medio dell’altezza del salto per programma, genere e divisione:

 library (dplyr)

#find mean jumping increase by program
df %>%
  group_by(program) %>%
  summarize(mean_height = mean(height))

# A tibble: 2 x 2
  program mean_height
           
1 1 5.2
2 2 3.3

#find mean jumping increase by gender
df %>%
  group_by(gender) %>%
  summarize(mean_height = mean(height))

# A tibble: 2 x 2
  gender mean_height
          
1 F 2.95
2M 5.55

#find mean jumping increase by division
df %>%
group_by(division) %>%
summarize(mean_height = mean(height))

# A tibble: 2 x 2
  division mean_height
            
1 1 4.95
2 2 3.55

Dal risultato possiamo osservare quanto segue:

  • L’aumento medio dell’altezza del salto per gli individui che hanno utilizzato il programma di allenamento 1 ( 5,2 pollici ) è stato maggiore dell’aumento medio per gli individui che hanno utilizzato il programma di allenamento 2 (3,3 pollici ).
  • L’aumento medio dell’altezza di salto per gli uomini ( 5,55 pollici ) è stato maggiore dell’aumento medio per le donne (2,95 pollici ).
  • L’aumento medio dell’altezza di salto tra i giocatori della Divisione 1 ( 4,95 pollici ) è stato maggiore dell’aumento medio tra i giocatori della Divisione 2 (3,55 pollici ).

In conclusione, diremmo che il programma di allenamento, il genere e la divisione sono tutti indicatori significativi dell’aumento dell’altezza di salto nei giocatori.

Diremmo anche che non ci sono effetti di interazione significativi tra questi tre fattori.

Risorse addizionali

I seguenti tutorial spiegano come adattare altri modelli ANOVA in R:

Come eseguire l’ANOVA unidirezionale in R
Come eseguire l’ANOVA bidirezionale in R

Aggiungi un commento

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