Quando usar aov() versus anova() em r


As funções aov() e anova() em R parecem semelhantes, mas na verdade as usamos em dois cenários diferentes.

Usamos aov() quando queremos ajustar um modelo ANOVA e exibir os resultados em uma tabela de resumo ANOVA.

Usamos anova() quando queremos comparar o ajuste de modelos de regressão aninhados para determinar se um modelo de regressão com um determinado conjunto de coeficientes fornece um ajuste significativamente melhor do que um modelo com apenas um subconjunto de coeficientes.

Os exemplos a seguir mostram como usar cada função na prática.

Exemplo 1: Como usar aov() em R

Digamos que queremos realizar uma ANOVA unidirecional para determinar se três programas de exercícios diferentes têm um impacto diferente na perda de peso.

Recrutamos 90 pessoas para participar de um experimento no qual designamos aleatoriamente 30 pessoas para seguir o Programa A, o Programa B ou o Programa C durante um mês.

O código a seguir mostra como usar a função aov() em R para realizar esta ANOVA unidirecional:

 #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

A partir dos resultados do modelo, podemos observar que o valor p do programa (0,0000000000755) é inferior a 0,05, o que significa que existe uma diferença estatisticamente significativa na perda média de peso entre os três programas.

Exemplo 2: Como usar anova() em R

Suponha que queiramos usar o número de horas estudadas para prever as notas dos exames dos alunos de uma determinada faculdade. Podemos decidir adaptar os dois modelos de regressão a seguir:

Modelo completo: pontuação = β 0 + B 1 (horas) + B 2 (horas) 2

Modelo reduzido: pontuação = β 0 + B 1 (horas)

O código a seguir mostra como usar a função anova() em R para realizar um teste de falta de ajuste para determinar se o modelo completo fornece um ajuste significativamente melhor do que o modelo reduzido:

 #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

Como o valor p na tabela de saída (0,002144) é inferior a 0,05, podemos rejeitar a hipótese nula do teste e concluir que o modelo completo fornece um ajuste estatisticamente significativamente melhor do que o modelo reduzido.

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns em R:

Como realizar ANOVA unidirecional em R
Como realizar ANOVA bidirecional em R
Como realizar ANOVA de medidas repetidas em R

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *