#Carregando pacote
library(readr)
#Importando os dados
= read_csv2("base_tratamento.csv") base
24 ANOVA
Agora vamos discutir o problema de se comparar a média de três ou mais populações.
Problema: um médico está avaliando três grupos de pacientes (controle, medicação e medicação + atividade). Ele gostaria de verificar se as médias de idade, glicemia e razão quadril/cintura difere entre os grupos.
Para respondermos o questionamento acima, precisamos realizar uma análise de variância - ANOVA. Vamos começar com a análise da variável idade. Porém, antes de especificarmos as hipóteses, sabemos que a ANOVA possui certos pressupostos que precisam ser checados, dentre eles, normalidade e homocedasticidade.
Abaixo podemos visualizar as variáveis que compõem a base de dados.
#Visualizando os dados
base
# A tibble: 60 × 4
grupo Idade glicemia RQC
<chr> <dbl> <dbl> <dbl>
1 Controle 37 109. 1.36
2 Controle 32 104. 1.23
3 Controle 29 101. 1.26
4 Controle 33 110. 1.32
5 Controle 33 93 1.33
6 Controle 35 103. 1.31
7 Controle 33 104. 1.28
8 Controle 36 107. 1.37
9 Controle 40 97.1 1.35
10 Controle 36 111. 1.29
# ℹ 50 more rows
Vamos agora analisar a normalidade dos dados. Lembrando que é preciso analisar a normalidade em cada população. Como temos 3 (controle, medicação e medicação + atividade), faremos 3 qq-plots e 3 testes de normalidade.
#Ativando pacote
library(dplyr)
#Criando um tibble somente com as informações do grupo controle
= base |>
baseA filter(grupo == "Controle")
#Criando um tibble somente com as informações do grupo medicação
= base |>
baseB filter(grupo == "Medicação")
#Criando um tibble somente com as informações do grupo medicação + atividade
= base |>
baseC filter(grupo == "Medicação + Atividade")
#Carregando pacote
library(ggpubr)
#Criando um qq-plot com o ggpubr para a população 1
= ggqqplot(baseA$Idade)
qq1
#Criando um qq-plot com o ggpubr para a população 2
= ggqqplot(baseB$Idade)
qq2
#Criando um qq-plot com o ggpubr para a população 3
= ggqqplot(baseC$Idade)
qq3
#Carregando pacote
library(patchwork)
#Plotando os qqplots
+ qq2)/ qq3 (qq1
#Teste de normalidade para a população 1
shapiro.test(x = baseA$Idade)
Shapiro-Wilk normality test
data: baseA$Idade
W = 0.9397, p-value = 0.2367
#Teste de normalidade para a população 2
shapiro.test(x = baseB$Idade)
Shapiro-Wilk normality test
data: baseB$Idade
W = 0.96748, p-value = 0.8192
#Teste de normalidade para a população 3
shapiro.test(x = baseC$Idade)
Shapiro-Wilk normality test
data: baseC$Idade
W = 0.96181, p-value = 0.4518
Com base na análise acima, usando um nível de significância de 5%, concluímos que as amostras são provenientes de distribuições normais.
A seguir, vamos verificar a homocedasticidade, isto é,
Hipótese: \[H_0: \sigma^2_1 = \sigma^2_2 = \sigma^2_3 \qquad \times \qquad H_1: \mbox{Existe pelo menos uma variância diferente}.\]
Para executarmos o teste de comparação de variâncias, usaremos a função LeveneTest
do pacote DescTools
.
A seguir, vamos apresentar os principais argumentos da função LeveneTest
:
- y - o vetor com a amostra de todas as populações;
- group - o vetor que indica a qual população a amostra pertence;
- center - indica qual teste você deseja realizar (default = median - realiza o teste Brown-Forsythe-Test, se alimentarmos com o mean - realizamos o teste de Levene original).
#Carregando o pacote
library(DescTools)
#Avaliando as variâncias nas duas populações
|>
base group_by(grupo) |>
summarise(variâncias = var(Idade))
# A tibble: 3 × 2
grupo variâncias
<chr> <dbl>
1 Controle 8.75
2 Medicação 12.5
3 Medicação + Atividade 20.1
#Realizando o teste de comparação das variâncias
LeveneTest(y = base$Idade,
group = base$grupo,
center = "mean")
Warning in LeveneTest.default(y = base$Idade, group = base$grupo, center =
"mean"): base$grupo coerced to factor.
Levene's Test for Homogeneity of Variance (center = "mean")
Df F value Pr(>F)
group 2 1.9839 0.1469
57
Avaliando as estimativas pontuais, aparentemente o grupo Atividade + Medicação possui uma variância para a idade maior, mas este resultado não se confirma com o teste de Levene. Com base em um nível de significância de 5%, não rejeitamos a hipótese de igualdade das variâncias.
Após checarmos normalidade e homocedasticidade, podemos comparar as médias de idade. Notem que, se alguma população não possuísse normalidade e/ou não fosse detectado homocedasticidade não poderíamos prosseguir com a análise.
No problema levantado queremos testar as seguintes hipóteses
Hipótese: \[H_0: \mu_1 = \mu_2 = \mu_3 \qquad \times \qquad H_1: \mbox{Existe pelo menos uma média diferente}.\]
Vamos realiazar uma análise exploratória dos dados, antes de realizarmos o teste de comparação de médias.
#Comparando os grupos descritivamente
|>
base group_by(grupo) |>
summarise(medias = mean(Idade))
# A tibble: 3 × 2
grupo medias
<chr> <dbl>
1 Controle 35.3
2 Medicação 34.9
3 Medicação + Atividade 35.2
#Ativando pacote
library(ggplot2)
#Comparando os grupos graficamente
ggplot(data = base, aes(x = grupo, y = Idade)) +
geom_boxplot() +
theme_classic2() +
labs(x = "Grupo",
y = "Idade")
Para executarmos o teste de comparação das médias, usaremos a função aov
.
A seguir, vamos apresentar os principais argumentos da função aov
:
- formula - o vetor com a amostra;
- mu - o valor do parâmetro que definem as hipóteses (default = 0);
- alternative - argumento que define se o teste é bilateral ou unilateral a esquerda e a direita (default = bilateral - two.sided).
#Realizando o teste de comparação das médias
= aov(formula = Idade ~ grupo,
comp1 data = base)
#Visualizando o resultado
summary(comp1)
Df Sum Sq Mean Sq F value Pr(>F)
grupo 2 1.2 0.60 0.042 0.959
Residuals 57 823.1 14.44
Note que, as estimativas pontuais parecem muito semelhantes. Com base em um nível de significância de 5%, não rejeitamos \(H_0\), isto é, não encontramos evidências para acreditar que as idades médias das três populações sejam diferentes.
E se o nosso desejo for comparar a glicemia dos três grupos? Vamos usar um nível de significância de 1%.
#Criando um qq-plot com o ggpubr para a população 1
= ggqqplot(baseA$glicemia)
qq_1
#Criando um qq-plot com o ggpubr para a população 2
= ggqqplot(baseB$glicemia)
qq_2
#Criando um qq-plot com o ggpubr para a população 3
= ggqqplot(baseC$glicemia)
qq_3
#Plotando os qqplots
+ qq_2) / qq_3 (qq_1
#Teste de normalidade para a população 1
shapiro.test(x = baseA$glicemia)
Shapiro-Wilk normality test
data: baseA$glicemia
W = 0.97659, p-value = 0.8829
#Teste de normalidade para a população 2
shapiro.test(x = baseB$glicemia)
Shapiro-Wilk normality test
data: baseB$glicemia
W = 0.87838, p-value = 0.04488
#Teste de normalidade para a população 3
shapiro.test(x = baseC$glicemia)
Shapiro-Wilk normality test
data: baseC$glicemia
W = 0.97381, p-value = 0.742
#Avaliando as variâncias nas duas populações
|>
base group_by(grupo) |>
summarise(variâncias = var(glicemia),
medias = mean(glicemia))
# A tibble: 3 × 3
grupo variâncias medias
<chr> <dbl> <dbl>
1 Controle 26.2 104.
2 Medicação 24.1 96.9
3 Medicação + Atividade 13.7 90.3
#Comparando os grupos graficamente
ggplot(data = base, aes(x = grupo, y = glicemia)) +
geom_boxplot() +
labs(x = "Grupo",
y = "Glicemia") +
theme_minimal()
#Realizando o teste de comparação das variâncias
LeveneTest(y = base$glicemia,
group = base$grupo,
center = "mean")
Warning in LeveneTest.default(y = base$glicemia, group = base$grupo, center =
"mean"): base$grupo coerced to factor.
Levene's Test for Homogeneity of Variance (center = "mean")
Df F value Pr(>F)
group 2 1.2919 0.2827
57
#Realizando o teste de comparação das médias
= aov(formula = glicemia ~ grupo,
comp2 data = base)
#Visualizando o resultado
summary(comp2)
Df Sum Sq Mean Sq F value Pr(>F)
grupo 2 2206 1103.2 54.07 6.82e-14 ***
Residuals 57 1163 20.4
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Comentários de cada passo da análise:
O QQ-plot, junto com a banda de confiança, indica que os quantis amostrais não se distanciam muitos dos quantis de uma distribuição normal, indicando que parece razoável assumir normalidade dos dados.
Com base em um nível de significância de 1%, não rejeitamos \(H_0\), indicando normalidade dos dados, conforme indicava o QQ-plot.
A estimativa pontual das variânicas, indica que a variância da glicemia do grupo Atividade + Medicação é menor do que a dos demais, mas analisando o teste de hipóteses, com base em um nível de significância de 5%, não rejeitamos a hipótese de homocedasticidade.
*Com base em um nível de significância de 1%, rejeitamos \(H_0\), indicando que possuímos evidências suficiente para acreditar que existe pelo menos uma glicemia média diferente das demais.
O resultado de diferênça entre as médias apontado pela ANOVA não nos permite dizer entre quais grupos as médias são diferentes, por isso precisamos realizar um teste de comparações múltiplas.
Existem diversos testes de comparações múltiplas disponíveis na literatura, aqui vamos investigar alguns destes testes.
#Realizando o teste de Tuckey
TukeyHSD(x = comp2)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = glicemia ~ grupo, data = base)
$grupo
diff lwr upr p adj
Medicação-Controle -7.551667 -11.26437 -3.838963 0.0000250
Medicação + Atividade-Controle -14.089000 -17.34990 -10.828095 0.0000000
Medicação + Atividade-Medicação -6.537333 -10.08736 -2.987310 0.0001262
#Realizando o teste de Duncan
PostHocTest(x = comp2,
method = "duncan")
Posthoc multiple comparisons of means : Duncan's new multiple range test
95% family-wise confidence level
$grupo
diff lwr.ci upr.ci pval
Medicação-Controle -7.551667 -10.641138 -4.462195 8.5e-06 ***
Medicação + Atividade-Controle -14.089000 -16.943402 -11.234598 5.6e-12 ***
Medicação + Atividade-Medicação -6.537333 -9.491433 -3.583233 4.3e-05 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Tanto o teste de Tukey quanto o teste de Duncan indicam que as médias dos três grupos são diferentes.
24.1 Desafio
Resolva os exercícios de 2 a 4 usando o arquivo Escalas psicometricas.tx. Nas três escalas, quanto maior a pontuação, pior o desempenho do paciente.
Usando a base discutida ao longo da aula, verifique se existe diferença na média da razão cintura quadril entre os três grupos. utilize um nível de significância de 5%.
Usando um nível de significância de 5%, existe diferença na pontuação do MEEM entre os três grupos?
Ao nível de significância de 5%, é correto afirmar que o desempenho de pacientes com Alzheimer e Demência são iguais e que eles diferem do grupo controle para a pontuação no CAMCOG?
Usando um nível de significância de 1%, existe diferença na pontuação do teste do relógio entre os três grupos?