Tutorial R ANOVA: unidirecional e bidirecional (com exemplos)

O que รฉ ANOVA?

Anรกlise de variaรงรฃo (ANOVA) รฉ uma tรฉcnica estatรญstica comumente usada para estudar diferenรงas entre duas ou mais mรฉdias de grupos. O teste ANOVA estรก centrado nas diferentes fontes de variaรงรฃo de uma variรกvel tรญpica. ANOVA em R fornece principalmente evidรชncias da existรชncia de igualdade mรฉdia entre os grupos. Este mรฉtodo estatรญstico รฉ uma extensรฃo do teste t. ร‰ utilizado numa situaรงรฃo em que a variรกvel fatorial possui mais de um grupo.

ANOVA unilateral

Existem muitas situaรงรตes em que vocรช precisa comparar a mรฉdia entre vรกrios grupos. Por exemplo, o departamento de marketing quer saber se trรชs equipes tรชm o mesmo desempenho de vendas.

  • Equipe: fator de 3 nรญveis: A, B e C
  • Venda: uma medida de desempenho

O teste ANOVA pode dizer se os trรชs grupos tรชm desempenhos semelhantes.

Para esclarecer se os dados vรชm da mesma populaรงรฃo, vocรช pode realizar uma anรกlise de variรขncia unidirecional (ANOVA unidirecional daqui em diante). Este teste, como qualquer outro teste estatรญstico, evidencia se a hipรณtese H0 pode ser aceita ou rejeitada.

Hipรณtese no teste ANOVA unidirecional

  • H0: As mรฉdias entre os grupos sรฃo idรชnticas
  • H3: Pelo menos a mรฉdia de um grupo รฉ diferente

Em outras palavras, a hipรณtese H0 implica que nรฃo hรก evidรชncias suficientes para provar que as mรฉdias do grupo (fator) sรฃo diferentes de outro.

Este teste รฉ semelhante ao teste t, embora o teste ANOVA seja recomendado em situaรงรตes com mais de 2 grupos. Exceto que o teste t e a ANOVA fornecem resultados semelhantes.

Pressupostos

Assumimos que cada fator รฉ amostrado aleatoriamente, independente e vem de uma populaรงรฃo normalmente distribuรญda com variรขncias desconhecidas, mas iguais.

Interpretar teste ANOVA

A estatรญstica F รฉ usada para testar se os dados sรฃo de populaรงรตes significativamente diferentes, ou seja, diferentes mรฉdias amostrais.

Para calcular a estatรญstica F, vocรช precisa dividir o variabilidade entre grupos sobre o variabilidade dentro do grupo.

O processo de entre grupos a variabilidade reflete as diferenรงas entre os grupos dentro de toda a populaรงรฃo. Observe os dois grรกficos abaixo para entender o conceito de variaรงรฃo entre grupos.

O grรกfico da esquerda mostra muito pouca variaรงรฃo entre os trรชs grupos, e รฉ muito provรกvel que as trรชs mรฉdias tendam para o global mรฉdia (ou seja, mรฉdia para os trรชs grupos).

O grรกfico da direita representa trรชs distribuiรงรตes distantes umas das outras e nenhuma delas se sobrepรตe. Hรก uma grande chance de que a diferenรงa entre a mรฉdia total e a mรฉdia do grupo seja grande.

Interpretar teste ANOVA

O processo de dentro do grupo a variabilidade considera a diferenรงa entre os grupos. A variaรงรฃo vem das observaรงรตes individuais; alguns pontos podem ser totalmente diferentes do que o grupo significa. O dentro do grupo a variabilidade capta esse efeito e se refere ao erro amostral.

Para entender visualmente o conceito de variabilidade dentro do grupo, observe o grรกfico abaixo.

A parte esquerda representa a distribuiรงรฃo de trรชs grupos diferentes. Vocรช aumentou o spread de cada amostra e fica claro que a variaรงรฃo individual รฉ grande. O teste F diminuirรก, o que significa que vocรช tende a aceitar a hipรณtese nula

A parte direita mostra exatamente as mesmas amostras (mรฉdia idรชntica), mas com menor variabilidade. Isso leva a um aumento do teste F e tende a favor da hipรณtese alternativa.

Interpretar teste ANOVA

Vocรช pode usar ambas as medidas para construir as estatรญsticas F. ร‰ muito intuitivo entender a estatรญstica F. Se o numerador aumentar, significa que a variabilidade entre grupos รฉ alta e รฉ provรกvel que os grupos da amostra sejam retirados de distribuiรงรตes completamente diferentes.

Em outras palavras, uma estatรญstica F baixa indica pouca ou nenhuma diferenรงa significativa entre a mรฉdia do grupo.

Exemplo de teste ANOVA unidirecional

Vocรช usarรก o conjunto de dados venenosos para implementar o teste ANOVA unidirecional. O conjunto de dados contรฉm 48 linhas e 3 variรกveis:

  • Tempo: Tempo de sobrevivรชncia do animal
  • veneno: Tipo de veneno usado: nรญvel de fator: 1,2 e 3
  • tratar: Tipo de tratamento utilizado: nรญvel de fator: 1,2 e 3

Antes de comeรงar a calcular o teste ANOVA, vocรช precisa preparar os dados da seguinte forma:

  • Etapa 1: importe os dados
  • Etapa 2: remover variรกveis โ€‹โ€‹desnecessรกrias
  • Etapa 3: Converta a variรกvel veneno como nรญvel ordenado
library(dplyr)
PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/poisons.csv"
df <- read.csv(PATH) %>%
select(-X) %>% 
mutate(poison = factor(poison, ordered = TRUE))
glimpse(df)

Saรญda:

## Observations: 48
## Variables: 3
## $ time   <dbl> 0.31, 0.45, 0.46, 0.43, 0.36, 0.29, 0.40, 0.23, 0.22, 0...
## $ poison <ord> 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2...
## $ treat  <fctr> A, A, A, A, A, A, A, A, A, A, A, A, B, B, B, B, B, B, ...		

Nosso objetivo รฉ testar a seguinte suposiรงรฃo:

  • H0: Nรฃo hรก diferenรงa na mรฉdia do tempo de sobrevivรชncia entre os grupos
  • H3: A mรฉdia do tempo de sobrevivรชncia รฉ diferente para pelo menos um grupo.

Ou seja, vocรช quer saber se existe diferenรงa estatรญstica entre a mรฉdia do tempo de sobrevivรชncia de acordo com o tipo de veneno dado ao porquinho-da-รญndia.

Vocรช procederรก da seguinte forma:

  • Etapa 1: verifique o formato da variรกvel veneno
  • Etapa 2: Imprimir a estatรญstica resumida: contagem, mรฉdia e desvio padrรฃo
  • Etapa 3: traรงar um grรกfico de caixa
  • Etapa 4: calcular o teste ANOVA unidirecional
  • Etapa 5: execute um teste t pareado

Passo 1) Vocรช pode verificar o nรญvel do veneno com o cรณdigo a seguir. Vocรช deverรก ver trรชs valores de caracteres porque os converte em fator com o verbo mutate.

levels(df$poison)

Saรญda:

## [1] "1" "2" "3"

Passo 2) Vocรช calcula a mรฉdia e o desvio padrรฃo.

df % > %
	group_by(poison) % > %
	summarise(
		count_poison = n(),
		mean_time = mean(time, na.rm = TRUE),
		sd_time = sd(time, na.rm = TRUE)
	)

Saรญda:

## 
# A tibble: 3 x 4
##   poison count_poison mean_time    sd_time
##    <ord>        <int>     <dbl>      <dbl>
## 1      1           16  0.617500 0.20942779
## 2      2           16  0.544375 0.28936641
## 3      3           16  0.276250 0.06227627

Passo 3) Na etapa trรชs, vocรช pode verificar graficamente se hรก diferenรงa entre as distribuiรงรตes. Observe que vocรช inclui o ponto instรกvel.

ggplot(df, aes(x = poison, y = time, fill = poison)) +
    geom_boxplot() +
    geom_jitter(shape = 15,
        color = "steelblue",
        position = position_jitter(0.21)) +
    theme_classic()

Saรญda:

Exemplo de teste ANOVA unilateral

Passo 4) Vocรช pode executar o teste ANOVA unidirecional com o comando aov. A sintaxe bรกsica para um teste ANOVA รฉ:

aov(formula, data)
Arguments:			
- formula: The equation you want to estimate
- data: The dataset used	

A sintaxe da fรณrmula รฉ:

y ~ X1+ X2+...+Xn # X1 +  X2 +... refers to the independent variables
y ~ . # use all the remaining variables as independent variables

Vocรช pode responder nossa pergunta: Existe alguma diferenรงa no tempo de sobrevivรชncia entre o porquinho-da-รญndia, sabendo o tipo de veneno administrado.

Observe que รฉ aconselhรกvel armazenar o modelo e usar a funรงรฃo summary() para obter uma melhor impressรฃo dos resultados.

anova_one_way <- aov(time~poison, data = df)
summary(anova_one_way)

Explicaรงรฃo do cรณdigo

  • aov(time ~ Poison, data = df): Execute o teste ANOVA com a seguinte fรณrmula
  • summary(anova_one_way): Imprime o resumo do teste

Saรญda:

##             Df Sum Sq Mean Sq F value   Pr(>F)
## poison       2  1.033  0.5165   11.79 7.66e-05 ***
## Residuals   45  1.972  0.0438                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

O valor p รฉ inferior ao limite usual de 0.05. Vocรช tem certeza de afirmar que existe uma diferenรงa estatรญstica entre os grupos, indicada pelo โ€œ*โ€.

Comparaรงรฃo parelha

O teste ANOVA unidirecional nรฃo informa qual grupo possui mรฉdia diferente. Em vez disso, vocรช pode realizar um teste de Tukey com a funรงรฃo TukeyHSD().

TukeyHSD(anova_one_way)

Saรญda:

Comparaรงรฃo parelha

ANOVA de duas vias

Um teste ANOVA bidirecional adiciona outra variรกvel de grupo ร  fรณrmula. ร‰ idรชntico ao teste ANOVA unidirecional, embora a fรณrmula mude ligeiramente:

y=x1+x2

with รฉ uma variรกvel quantitativa e e sรฃo variรกveis โ€‹โ€‹categรณricas.

Hipรณtese no teste ANOVA bidirecional

  • H0: As mรฉdias sรฃo iguais para ambas as variรกveis โ€‹โ€‹(ou seja, variรกvel fatorial)
  • H3: As mรฉdias sรฃo diferentes para ambas as variรกveis

Vocรช adiciona a variรกvel treat ao nosso modelo. Esta variรกvel indica o tratamento dado ao porquinho-da-รญndia. Vocรช estรก interessado em saber se existe uma dependรชncia estatรญstica entre o veneno e o tratamento dado ao porquinho-da-รญndia.

Ajustamos nosso cรณdigo adicionando treat com a outra variรกvel independente.

anova_two_way <- aov(time~poison + treat, data = df)
summary(anova_two_way)

Saรญda:

##             Df Sum Sq Mean Sq F value  Pr(>F)    
## poison       2 1.0330  0.5165   20.64 5.7e-07 ***
## treat        3 0.9212  0.3071   12.27 6.7e-06 ***
## Residuals   42 1.0509  0.0250                    
## ---

Vocรช pode concluir que tanto o veneno quanto o tratamento sรฃo estatisticamente diferentes de 0. Vocรช pode rejeitar a hipรณtese NULA e confirmar que a mudanรงa do tratamento ou do veneno afeta o tempo de sobrevivรชncia.

Resumo

Podemos resumir o teste na tabela abaixo:

Testar Code Hipรณtese Valor P
ANOVA unidirecional
aov(y ~ X, data = df)
H3: A mรฉdia รฉ diferente para pelo menos um grupo 0.05
Emparelhados
TukeyHSD(ANOVA summary)
0.05
ANOVA bidirecional
aov(y ~ X1 + X2, data = df)
H3: A mรฉdia รฉ diferente para ambos os grupos 0.05

Resuma esta postagem com: