Para esta sexta aula prática de Estatística Computacional I, precisaremos dos seguintes pacotes:
require(ggplot2) # Abordagem gráfica
require(dplyr) # Manipulação de bases de dados
require(DescTools) # Para o teste de Levene
require(qqplotr) # Gráfico QQ-plot
Na maior parte dos estudos comparativos no mundo real, raramente lidamos com apenas duas populações. Em vez disso, lidamos com múltiplos grupos, múltiplos tratamentos, múltiplas regiões ou categorias. Por isso, a inferência para mais de duas populações é essencial para análises estatísticas reais.
EXEMPLOS PRÁTICOS:
Uma pesquisa de opinião quer comparar a média de satisfação de clientes entre cinco filiais de uma empresa.
Um experimento clínico avalia quatro tratamentos diferentes para dor crônica e deseja saber se pelo menos um é mais eficaz.
Um estudo educacional compara o desempenho médio de alunos de três escolas públicas e duas privadas.
Nesses casos, aplicar um conjunto de testes entre pares (como o t de Student) geraria múltiplas comparações, o que aumenta o risco de erro tipo I. Isso leva a conclusões potencialmente enganosas.
A pergunta central é: Existe evidência de que pelo menos uma das populações tem média diferente das outras? Essa é a motivação principal por trás de testes como a ANOVA. Nesta aula, veremos como aplicar este teste paramétrico.
A Análise de Variância (ANOVA) é uma técnica estatística usada para verificar se há diferenças significativas entre as médias de três ou mais populações.
Inicialmente, veremos a formulação matemática da ANOVA, as hipóteses do teste e as suposições necessárias.
Suponha que temos \(k\) populações ou tratamentos:
\[ X_1, X_2, \dots, X_k \]
Cada \(X_i\) representa uma população com média \(\mu_i\), onde:
\[ X_i \sim \mathcal{N}(\mu_i, \sigma^2), \quad i = 1, 2, \dots, k \]
E suponha que temos \(n_i\) observações na \(i\)-ésima população, totalizando \(n = \sum_{i=1}^k n_i\) observações.
Queremos testar se as médias populacionais são todas iguais. As hipóteses são:
Hipótese nula (\(H_0\)): \[ \mu_1 = \mu_2 = \dots = \mu_k \]
Hipótese alternativa (\(H_1\)): \[ \exists \ i,j \text{ tal que } \mu_i \ne \mu_j \]
Para que a ANOVA seja válida, as seguintes suposições devem ser satisfeitas:
A estatística usada na ANOVA é a F, definida como:
\[ F = \frac{\text{Variabilidade entre os grupos}}{\text{Variabilidade dentro dos grupos}} = \frac{QM_{grupo}}{QM_{residuos}} \]
Onde:
\(SQ_{grupo}\):
Soma dos quadrados entre os grupos
\[
SQ_{grupo} = \sum_{i=1}^k n_i (\bar{X}_i - \bar{X})^2
\]
\(SQ_{residuos}\): Soma dos
quadrados dentro dos grupos
\[
SQ_{resíduos} = \sum_{i=1}^k \sum_{j=1}^{n_i} (X_{ij} - \bar{X}_i)^2
\]
\(GL_{grupo}\)
= \(k - 1\)
\(GL_{resíduos}\) = \(n - k\)
\(QM_{grupo}\)
= \(SQ_{grupo} / (k - 1)\)
\(QM_{resíduos}\) = \(SQ_{resíduos} / (n - k)\)
A base de dados PlantGrowth é um
conjunto clássico disponível no R que
registra o peso de plantas submetidas a três diferentes
tratamentos.
weight: peso das plantas (em unidades
de massa)group: tipo de tratamento aplicado às plantas,
com três níveis:
ctrl: grupo controle (sem
tratamento)trt1: tratamento 1trt2: tratamento 2Ou seja, ctrl é o grupo padrão, e trt1 e
trt2 são dois grupos experimentais submetidos a
diferentes tratamentos para avaliar o efeito sobre o peso das
plantas. Em cada grupo, foram avaliadas 10
plantas. Esta base é muito utilizada para demonstrar
técnicas de comparação entre médias, como a ANOVA. A base de
dados pode ser acionada com o seguinte comando:
PlantGrowth
## weight group
## 1 4.17 ctrl
## 2 5.58 ctrl
## 3 5.18 ctrl
## 4 6.11 ctrl
## 5 4.50 ctrl
## 6 4.61 ctrl
## 7 5.17 ctrl
## 8 4.53 ctrl
## 9 5.33 ctrl
## 10 5.14 ctrl
## 11 4.81 trt1
## 12 4.17 trt1
## 13 4.41 trt1
## 14 3.59 trt1
## 15 5.87 trt1
## 16 3.83 trt1
## 17 6.03 trt1
## 18 4.89 trt1
## 19 4.32 trt1
## 20 4.69 trt1
## 21 6.31 trt2
## 22 5.12 trt2
## 23 5.54 trt2
## 24 5.50 trt2
## 25 5.37 trt2
## 26 5.29 trt2
## 27 4.92 trt2
## 28 6.15 trt2
## 29 5.80 trt2
## 30 5.26 trt2
Inicialmente, vamos visualizar graficamente o comportamento do peso para cada um dos tratamentos:
ggplot(PlantGrowth, aes(x = group, y = weight, fill = group)) +
geom_boxplot() +
labs(
title = "Distribuição do Peso das Plantas por Grupo",
x = "Grupo",
y = "Peso da Planta"
) +
theme_minimal() +
theme(legend.position = "none")
Agora, segue uma tabela com algumas medidas descritivas para estes dados:
resumo <- PlantGrowth %>%
group_by(group) %>%
summarise(
media = mean(weight),
mediana = median(weight),
variancia = var(weight),
n = n()
)
resumo
## # A tibble: 3 × 5
## group media mediana variancia n
## <fct> <dbl> <dbl> <dbl> <int>
## 1 ctrl 5.03 5.15 0.340 10
## 2 trt1 4.66 4.55 0.630 10
## 3 trt2 5.53 5.44 0.196 10
Descritivamente, as médias são diferentes e os grupos se comportam de maneira distinta com respeito ao peso das plantas.
Para aplicar a ANOVA, é fundamental que os dados sejam normalmente distribuídos, ou tenha um tamanho suficiente para que seja utilizado o teorema central do limite. Vamos checar se os grupos de plantas possuem um peso normalmente distribuído: com os diagnósticos de normalidade que aprendemos:
ggplot(PlantGrowth, aes(x = weight)) +
geom_density(fill = "blue", alpha = 0.6) +
facet_wrap(~ group) +
xlab("Pesos") +
ylab("Densidade") +
theme_bw() +
theme(text = element_text(size = 14))
ggplot(PlantGrowth, aes(sample = weight)) +
stat_qq_band(fill="lightblue") +
stat_qq_line() +
stat_qq_point() +
facet_wrap(~group,scales = "free")+
xlab("Quantis Teoricos")+
ylab("Quantis Amostrais")+
theme_bw() +
theme(text = element_text(size = 14))
by(PlantGrowth$weight, PlantGrowth$group, shapiro.test)
## PlantGrowth$group: ctrl
##
## Shapiro-Wilk normality test
##
## data: dd[x, ]
## W = 0.95668, p-value = 0.7475
##
## ------------------------------------------------------------
## PlantGrowth$group: trt1
##
## Shapiro-Wilk normality test
##
## data: dd[x, ]
## W = 0.93041, p-value = 0.4519
##
## ------------------------------------------------------------
## PlantGrowth$group: trt2
##
## Shapiro-Wilk normality test
##
## data: dd[x, ]
## W = 0.94101, p-value = 0.5643
Dessa forma, há evidências (com um nível de significância de
5%) de que os dados em cada grupo são normalmente distribuídos.
Há uma ressalva que houve um desvio no qqplot para o
grupo trt1, mas a ANOVA é robusta a pequenos
desvios de normalidade, especialmente se as variâncias
forem parecidas e o n dos grupos não é
desigual.
Antes de aplicar a ANOVA (Análise de Variância), uma outra suposição fundamental é a homocedasticidade, ou seja, a igualdade das variâncias entre os grupos. A violação dessa suposição pode comprometer a validade dos resultados da ANOVA. Dois testes estatísticos amplamente utilizados para verificar essa suposição são:
Em ambos os testes as hipóteses são:
O teste de Bartlett é sensível à suposição de normalidade. Ele é mais poderoso quando os dados seguem uma distribuição normal.
Este teste deve ser usado
A função bartlett.test() é utilizada no R para testar a
homogeneidade de variâncias com a seguinte sintaxe:
bartlett.test(formula, data)
formula: uma fórmula do tipo
resposta~grupo.
data: base de dados.
Para os dados da base PlanthGrowth, o
teste de Bartlett aponta o seguinte:
bartlett.test(formula = weight~group,data = PlantGrowth)
##
## Bartlett test of homogeneity of variances
##
## data: weight by group
## Bartlett's K-squared = 2.8786, df = 2, p-value = 0.2371
De acordo com o teste de Bartlett, há evidencias (ao nível de 5%) de que a suposição de homocedasticidade é atendida.
O teste de Levene é uma alternativa robusta ao teste de Bartlett. Ele é menos sensível a desvios da normalidade.
Assim, para este teste, considere
A função LeveneTest() do pacote DescTools é
utilizada no R para testar a homogeneidade de
variâncias com a seguinte sintaxe:
LeveneTest(formula, data)
formula: uma fórmula do tipo
resposta~grupo.
data: base de dados.
Vamos aplicar o teste de Levene nesse caso:
LeveneTest(formula = weight~group,data = PlantGrowth)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 1.1192 0.3412
## 27
De acordo com o teste de Levene, há evidencias (ao nível de 5%) de que a suposição de homocedasticidade é atendida.
Como não ficamos tão seguros da suposição de normalidade dos dados, o teste de Levene é mais adequado aqui.
Com as suposições verificadas, podemos
aplicar a ANOVA. No R, isso é
feito com a função aov, que possui a seguinte
sintaxe:
aov(formula, data)
formula: uma fórmula do tipo
resposta~grupo.
data: base de dados.
Vamos aplicar esta função aos dados da base
PlantGrowth:
ANOVA = aov(formula = weight~group,data = PlantGrowth)
summary(ANOVA)
## Df Sum Sq Mean Sq F value Pr(>F)
## group 2 3.766 1.8832 4.846 0.0159 *
## Residuals 27 10.492 0.3886
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Note que a saída da função apresenta, para os grupos e resíduos:
Assim, rejeitamos a hipótese nula de igualdade das médias para os três grupos. Isto é, há evidências (ao nível de 5%) de que exista \(i\) e \(j\), tal que \(i\neq j\) e \(\mu_i\neq \mu_j\).
Após uma ANOVA rejeitar a hipótese nula, usamos testes de comparação múltipla para descobrir quais pares de grupos diferem. Existem diversos testes de comparação múltipla disponíveis na literatura. Aqui, usaremos os testes:
Em ambos os testes, considere que temos \(k\) grupos com médias populacionais \(\mu_1, \mu_2, \ldots, \mu_k\).
Os testes de comparação múltipla realizam comparações par-a-par entre essas médias. Para cada par \((i,j)\), as hipóteses são:
Hipótese nula (\(H_0\)):
\[ H_0: \mu_i = \mu_j \]
Ou seja, as médias dos grupos \(i\) e \(j\) são iguais.
Hipótese alternativa (\(H_1\)):
\[ H_1: \mu_i \ne \mu_j \]
Ou seja, as médias dos grupos \(i\) e \(j\) são diferentes.
Estas hipóteses são testadas para todos os pares \((i,j)\) possíveis entre os \(k\) grupos, e deve-se atentar à uma correção do nível \(\alpha\) para que o erro do tipo I não seja inflacionado.
O teste de Bonferroni é um método de comparações múltiplas usado após uma ANOVA quando se rejeita a hipótese nula de igualdade entre as médias de três ou mais grupos.
Sua principal função é controlar o erro do tipo I. Ele faz isso ajustando o nível de significância \(\alpha\) dividido pelo número de comparações. É um método conservador, ou seja, reduz bastante a chance de falsos positivos, mas com menor poder estatístico.
No R, o teste de Bonferroni pode ser realizado com a
função pairwise.t.test(), que tem a seguinte sintaxe:
pairwise.t.test(x,g,p.adjust.method)
em que
x é a variável respostag a variável de grupop.adjust.method é o tipo de correção a ser
realizadaPara o método bonferroni, especifique o argumento
p.adjust.method = "bonferroni".
Na base de dados de PlantGrowth, temos 4 comparações
múltiplas a serem executados. Assim, será feito um ajuste no valor-p de
acordo com essa quantidade de combinações:
Bonferroni = pairwise.t.test(x=PlantGrowth$weight,g=PlantGrowth$group,p.adjust.method = "bonferroni")
Bonferroni
##
## Pairwise comparisons using t tests with pooled SD
##
## data: PlantGrowth$weight and PlantGrowth$group
##
## ctrl trt1
## trt1 0.583 -
## trt2 0.263 0.013
##
## P value adjustment method: bonferroni
Assim, de acordo com o teste de Bonferroni, os grupos
trt1 e trt2 possuem médias diferentes (a um
nível de 5% de significância)
O teste de Tukey, também chamado de Tukey HSD (Honest Significant Difference), é utilizado após uma ANOVA quando encontramos evidência de que pelo menos um grupo difere dos demais.
Ele serve para realizar comparações múltiplas entre todas as médias 2 a 2, controlando o erro do tipo I no conjunto das comparações.
O teste de Tukey pode ser aplicado diretamente a um modelo ajustado
com aov() utilizando a função TukeyHSD().
Essa função aplica automaticamente a correção para comparações múltiplas — mais precisamente, ela controla o erro do tipo I, usando o critério de Tukey baseado na distribuição studentizada range.
Na base de dados de PlantGrowth, temos o seguinte
comando:
TukeyHSD(ANOVA)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = weight ~ group, data = PlantGrowth)
##
## $group
## diff lwr upr p adj
## trt1-ctrl -0.371 -1.0622161 0.3202161 0.3908711
## trt2-ctrl 0.494 -0.1972161 1.1852161 0.1979960
## trt2-trt1 0.865 0.1737839 1.5562161 0.0120064
Assim, também de acordo com o teste de Tukey, foi detectada uma
diferença (ao nível de 5%) nas médias dos grupos trt1 e
trt2.
A escolha do teste depende do objetivo da análise, do número de comparações, do equilíbrio e tamanho das amostras, e das suposições dos dados:
Se o foco é comparar todos os pares de médias e as amostras são relativamente balanceadas, o teste de Tukey costuma ser a melhor escolha por equilibrar controle de erro e poder.
Se o número de comparações for pequeno ou se for necessário um ajuste mais rigoroso para evitar falsos positivos, o teste de Bonferroni é uma opção simples e segura, apesar de mais conservadora.
A ANOVA clássica depende de três suposições principais:
Quando alguma dessas condições muda, ou quando o desenho experimental é diferente, usamos extensões da ANOVA. A seguir, mostramos como proceder no R em cada situação.
Quando os tamanhos amostrais são grandes, o Teorema Central do Limite garante que a distribuição da média é aproximadamente normal. Por isso, a ANOVA clássica tende a ser robusta mesmo com desvios de normalidade.
Ainda assim, recomenda-se verificar a homocedasticidade com o teste de Bartlet (dados normais) ou levene (dados não normais).
Quando os mesmos indivíduos são medidos em mais de um momento/condição, as observações não são independentes. Nesse caso, NÃO se usa a ANOVA tradicional, mas sim a ANOVA para medidas repetidas
Quando as variâncias entre os grupos NÃO são iguais, a ANOVA clássica NÃO deve ser usada. A extensão correta é ANOVA de Welch (não assume variâncias iguais).
Considere a base de dados que consta no arquivo
lettuce.xlsx. Essa base de dados está disponível no
repositório do grupo statOmics e contém informações de um experimento
com alfaces submetidas a diferentes condições de cultivo. Cada
observação representa uma planta individual, e as variáveis registradas
são:
treatment: indica o tratamento experimental aplicado
(com quatro níveis diferentes) freshweight, que
representa o peso fresco (em gramas) da planta.
Essa base é especialmente útil para análises de variância (ANOVA), pois permite investigar se as médias dos pesos diferem significativamente entre os tratamentos. Por ser um experimento real com estrutura simples, ela é ideal para introduzir conceitos como homogeneidade de variâncias, normalidade dos resíduos e comparações múltiplas.
1- Leia a base de dados.
2- Faça uma análise descritiva dos dados.
3- Investigue a normalidade dos grupos com respeito à variável
freshweight.
4- Investigue a homocedasticidade.
5- Efetua a análise de variância e, se necessário, recorra a utilização de testes de comparação múltipla.