Quando utilizzare aov() rispetto a anova() in r


Le funzioni aov() e anova() in R sembrano simili, ma in realtà le utilizziamo in due scenari diversi.

Usiamo aov() quando vogliamo adattare un modello ANOVA e visualizzare i risultati in una tabella di riepilogo ANOVA.

Usiamo anova() quando vogliamo confrontare l’adattamento dei modelli di regressione nidificati per determinare se un modello di regressione con un certo insieme di coefficienti fornisce un adattamento significativamente migliore rispetto a un modello con solo un sottoinsieme di coefficienti.

Gli esempi seguenti mostrano come utilizzare nella pratica ciascuna funzione.

Esempio 1: come utilizzare aov() in R

Supponiamo di voler eseguire un’ANOVA unidirezionale per determinare se tre diversi programmi di esercizi hanno un impatto diverso sulla perdita di peso.

Reclutiamo 90 persone per partecipare a un esperimento in cui assegniamo casualmente 30 persone a seguire il Programma A, il Programma B o il Programma C per un mese.

Il codice seguente mostra come utilizzare la funzione aov() in R per eseguire questa ANOVA unidirezionale:

 #make this example reproducible
set. seeds (0)

#create data frame
df <- data. frame (program = rep(c("A", "B", "C"), each= 30 ),
                 weight_loss = c(runif(30, 0, 3),
                                 runif(30, 0, 5),
                                 runif(30, 1, 7)))

#fit one-way anova using aov()
fit <- aov(weight_loss ~ program, data=df)

#view results
summary(fit)

            Df Sum Sq Mean Sq F value Pr(>F)    
program 2 98.93 49.46 30.83 7.55e-11 ***
Residuals 87 139.57 1.60                     
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Dai risultati del modello, possiamo vedere che il valore p del programma (0,0000000000755) è inferiore a 0,05, il che significa che esiste una differenza statisticamente significativa nella perdita di peso media tra i tre programmi.

Esempio 2: come utilizzare anova() in R

Supponiamo di voler utilizzare il numero di ore studiate per prevedere i punteggi degli esami per gli studenti di un determinato college. Possiamo decidere di adattare i seguenti due modelli di regressione:

Modello completo: punteggio = β 0 + B 1 (ore) + B 2 (ore) 2

Modello ridotto: punteggio = β 0 + B 1 (ore)

Il codice seguente mostra come utilizzare la funzione anova() in R per eseguire un test di adattamento per determinare se il modello completo fornisce un adattamento significativamente migliore rispetto al modello ridotto:

 #make this example reproducible
set. seeds (1)

#create dataset
df <- data.frame(hours = runif(50, 5, 15), score=50)
df$score = df$score + df$hours^3/150 + df$hours*runif(50, 1, 2)

#view head of data
head(df)

      hours score
1 7.655087 64.30191
2 8.721239 70.65430
3 10.728534 73.66114
4 14.082078 86.14630
5 7.016819 59.81595
6 13.983897 83.60510

#fit full model
full <- lm(score ~ poly(hours,2), data=df)

#fit reduced model
reduced <- lm(score ~ hours, data=df)

#perform lack of fit test using anova()
anova(full, reduced)

Analysis of Variance Table

Model 1: score ~ poly(hours, 2)
Model 2: score ~ hours
  Res.Df RSS Df Sum of Sq F Pr(>F)   
1 47 368.48                                
2 48 451.22 -1 -82.744 10.554 0.002144 **
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Poiché il valore p nella tabella di output (0,002144) è inferiore a 0,05, possiamo rifiutare l’ipotesi nulla del test e concludere che il modello completo fornisce un adattamento migliore, statisticamente significativo, rispetto al modello ridotto.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni in R:

Come eseguire l’ANOVA unidirezionale in R
Come eseguire l’ANOVA bidirezionale in R
Come eseguire l’ANOVA a misure ripetute in R

Aggiungi un commento

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