A ideia principal desta análise é comparar as médias entre dois ou mais tratamentos (Crawley, 2012)
A ANOVA one-way deve ser utilizada quando a sua variável resposta é contÃnua (Y) e a sua variável explanatória é categórica (X).
Suponha um experimento com um fator (X) com três tratamentos (A,B,C) e uma variável respota contÃnua (Y). Você pode utilizar a ANOVA one-way para descobrir se os tratamentos possuem efeitos diferentes na variável resposta (Y). Lembre-se, a hipótese nula da ANOVA é que não existe diferença entre os tratamentos, ou seja, as médias de A,B e C são iguais.
Entrada de dados:
Y <- c(rnorm(6,6,1),rnorm(6,12,2),rnorm(6,13,2)) # Variável resposta
X <- rep(c("A","B","C"),each=6) # Variável explicativa (categórica)
dados <- data.frame(Y,X)
dados
## Y X
## 1 6.616267 A
## 2 5.872747 A
## 3 6.409609 A
## 4 6.845820 A
## 5 6.736194 A
## 6 7.510129 A
## 7 11.885694 B
## 8 11.497169 B
## 9 10.846336 B
## 10 14.705255 B
## 11 10.371959 B
## 12 14.808995 B
## 13 13.234263 C
## 14 8.452404 C
## 15 10.453115 C
## 16 13.397676 C
## 17 12.307103 C
## 18 14.666551 C
A função str é ótima para verificar se nossas variáveis foram criadas corretamentes. No caso, podemos observar que o R considera a coluna X dos dados como fator e a Y como numérica. Ou seja, tudo ok!
str(dados)
## 'data.frame': 18 obs. of 2 variables:
## $ Y: num 6.62 5.87 6.41 6.85 6.74 ...
## $ X: Factor w/ 3 levels "A","B","C": 1 1 1 1 1 1 2 2 2 2 ...
Podemos utilizar as funções lm ou aov. Ambas resultam no mesmo resultado, mas ao ajustar um modelo com a função lm podemos extrair informações mais detalhadas com a função summary. No entanto, o output da função aov permite realizar o teste de Tukey, portanto vamos fazer dos dois jeitos.
modelo.anova <- lm(Y ~ X, data= dados)
summary(modelo.anova) # Detalhes do ajuste
##
## Call:
## lm(formula = Y ~ X, data = dados)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.6328 -0.8396 0.0111 1.0731 2.5814
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.6651 0.7132 9.346 1.21e-07 ***
## XB 5.6874 1.0086 5.639 4.71e-05 ***
## XC 5.4201 1.0086 5.374 7.74e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.747 on 15 degrees of freedom
## Multiple R-squared: 0.7297, Adjusted R-squared: 0.6937
## F-statistic: 20.25 on 2 and 15 DF, p-value: 5.476e-05
anova(modelo.anova) # Tabela de anova
## Analysis of Variance Table
##
## Response: Y
## Df Sum Sq Mean Sq F value Pr(>F)
## X 2 123.591 61.795 20.25 5.476e-05 ***
## Residuals 15 45.774 3.052
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
modelo.anova2 <- aov(Y ~ X, data= dados)
O resultado demonstra que existe diferença significativa (ver valor de p na tabela de ANOVA) entre os tratamentos (A,B,C). Para saber quais tratamentos são diferentes precisamos contruir um gráfico de barras com as médias de cada tratamento. Para testar estatÃsticamente quais tratamentos são diferentes podemos realizar o teste de Tukey (ver a baixo)
O jeito mais fácil de calcular esses valores é utilizando a função tapply. Podemos também utilizar a função: function(x) sqrt(var(x)/length(x)) junto com tapply para calcular o erro padrão de cada grupo.
medias <- with(dados,tapply(Y,X,mean))
erro <- with(dados,tapply(Y,X,function(x) sqrt(var(x)/length(x))))
Perceba que as médias são diferentes, como foi demonstrado pela ANOVA:
medias
## A B C
## 6.665128 12.352568 12.085185
Podemos utilizar os objetos medias e erro para plotar nosso gráfico de barras com barras de erros representando o erro padrão de cada tratamento
x <- barplot(medias,beside=T,ylim=c(0,20),ylab="Y",xlab="X")
arrows(x0=x,y0=medias-erro,
x1=x,y1=medias+erro,
angle=90,length=0.14,code=3)
TukeyHSD(modelo.anova2)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Y ~ X, data = dados)
##
## $X
## diff lwr upr p adj
## B-A 5.6874403 3.067723 8.307157 0.0001316
## C-A 5.4200578 2.800341 8.039775 0.0002155
## C-B -0.2673825 -2.887099 2.352334 0.9620936
O test de Tukey demonstrou que os tratemtnos B e A e C e A são diferentes. No entanto, não existe diferença entre os tratamentos B e C. Este resultado pode ser facilmente observado no gráfico acima.
par(mfrow=c(2,2))
plot(modelo.anova)
Deseja contribuir? Entre em contato. Gustavo Paterno - 2014 (paternogbc@gmail.com)