Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the astra-sites domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/statplace/public_html/site/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the jetpack domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/statplace/public_html/site/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wpforms-lite domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/statplace/public_html/site/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wordpress-seo domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/statplace/public_html/site/wp-includes/functions.php on line 6114

Notice: A função _load_textdomain_just_in_time foi chamada incorretamente. O carregamento da tradução para o domínio astra foi ativado muito cedo. Isso geralmente é um indicador de que algum código no plugin ou tema está sendo executado muito cedo. As traduções devem ser carregadas na ação init ou mais tarde. Leia como Depurar o WordPress para mais informações. (Esta mensagem foi adicionada na versão 6.7.0.) in /home/statplace/public_html/site/wp-includes/functions.php on line 6114
Qual o melhor teste para a comparação de médias? - Statplace

Qual o melhor teste para a comparação de médias?

Se você faz pesquisa científica então com certeza já precisou comparar médias para analisar os resultados obtidos. O problema é que existem muitos testes estatísticos possíveis e cada um deles é aplicado para uma situação diferente. Então, como saber qual o melhor para os dados da sua pesquisa?

Se você faz pesquisa científica então com certeza já precisou comparar médias para analisar os resultados obtidos. O problema é que existem muitos testes estatísticos possíveis e cada um deles é aplicado para uma situação diferente.

Então, como saber qual o melhor para os dados da sua pesquisa? Para responder essa pergunta é preciso saber qual o tipo de dado que você tem em mãos.

As variáveis da sua pesquisa podem ser: quantitativas ou qualitativas, apresentar ou não distribuição normal, ser pareadas ou não e ter mais ou menos de dois níveis. Essas características serão as responsáveis pela escolha dos testes.

Continue lendo para saber mais sobre cada um dos testes e a sua aplicabilidade.

Quantitativa não apresenta distribuição normal

Teste de Wilcoxon/ Mann-Whitney

Este é um teste não paramétrico baseado nos postos dos valores obtidos combinando 2 amostras, sendo que a utilização dele é ideal para a comparação de 2 amostras não pareadas. Exemplo:

GrupoA1 <- c(1, 2, 3, 2, 3, 4, 5, 4, 3, 2, 2, 2, 3, 2, 3, 2)
GrupoA2 <- c(3, 4, 4, 4, 5, 5, 3, 3, 2, 3, 3, 4, 2, 4)

MedidasA <- c(GrupoA1, GrupoA2)

MedidasA %>% 
  shapiro.test()# Não segue distribuição normal
## 
##  Shapiro-Wilk normality test
## 
## data:  .
## W = 0.90592, p-value = 0.01176
GruposA <- c(rep("G1", length(GrupoA1)), 
             rep("G2", length(GrupoA2))) %>% 
  as.factor()

wilcox.test(MedidasA ~ GruposA, exact = FALSE)# exact: quando não tem empate nos postos
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  MedidasA by GruposA
## W = 61.5, p-value = 0.03053
## alternative hypothesis: true location shift is not equal to 0
whitney.abg(MedidasA, GruposA)
##     N  Média      E.P. 1º Q. 2º Q. 3º Q.    Valor-p
## G1 16 2.6875 0.2536196     2   2.5     3 0.03052584
## G2 14 3.5000 0.2513699     3   3.5     4 0.03052584

Teste de Kruskall-Wallis

O teste de Kruskal-Wallis é uma extensão do de Wilcoxon/Mann-Whitney. É um teste não paramétrico utilizado para comparar 3 ou mais amostras não pareadas. Ele é usado para testar a hipótese nula de que todas as populações possuem médias iguais contra a hipótese alternativa de que ao menos duas das populações possuem médias diferentes quanto à uma variável quantitativa. Exemplo:

GrupoB1 <- c(1, 1, 3, 2, 2, 4, 4, 4, 2, 2, 3, 2, 1, 2, 3, 2)
GrupoB2 <- c(4, 5, 4, 4, 5, 5, 3, 3, 2, 5, 3, 4)
GrupoB3 <- c(5, 4, 4, 4, 3, 5, 4, 4, 5, 5, 3, 3, 2, 3, 3, 4, 2, 4)

MedidasB <- c(GrupoB1, GrupoB2, GrupoB3)

MedidasB %>% 
  shapiro.test()# Não segue distribuição normal
## 
##  Shapiro-Wilk normality test
## 
## data:  .
## W = 0.90793, p-value = 0.001482
GruposB <- c(rep("G1", length(GrupoB1)), 
             rep("G2", length(GrupoB2)), 
             rep("G3", length(GrupoB3))) %>% 
  as.factor()

kruskal.test(MedidasB ~ GruposB)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  MedidasB by GruposB
## Kruskal-Wallis chi-squared = 14.47, df = 2, p-value = 0.0007208
kruskal.abg(MedidasB, GruposB)$tabela
##     N    Média      E.P. 1º Q. 2º Q. 3º Q.      Valor-p
## G1 16 2.375000 0.2561738     2     2     3 0.0007207691
## G2 12 3.916667 0.2875796     3     4     5 0.0007207691
## G3 18 3.722222 0.2258688     3     4     4 0.0007207691

Quando o teste de Kruskall-Wallis verifica diferença significativa, utiliza-se o de Nemenyi, que é um post-hoc, para a verificação de diferenças par-a-par (comparações múltiplas). Exemplo:

if(!require(PMCMR)){ install.packages("PMCMR"); require(PMCMR) }

posthoc.kruskal.nemenyi.test(MedidasB ~ GruposB, dist = "Chisq")# Método para determinar o valor-p (defaut tukey)
## 
##  Pairwise comparisons using Nemenyi-test with Chi-squared    
##                        approximation for independent samples 
## 
## data:  MedidasB by GruposB 
## 
##    G1     G2    
## G2 0.0039 -     
## G3 0.0059 0.9018
## 
## P value adjustment method: none
kruskal.abg(MedidasB, GruposB)$C.Multiplas
##             G1        G2
## G2 0.003937787        NA
## G3 0.005871800 0.9018024

Teste de Wilcoxon pareado

O teste de Wilcoxon pareado é utilizado para comparar se as medidas de posição de 2 amostras são iguais no caso em que as amostras são dependentes (pareadas). Exemplo:

GrupoC1 <- c(2, 2, 1, 3, 1, 3, 2, 2, 3, 3, 3, 3, 2, 1, 1, 2, 4, 2)
GrupoC2 <- c(3, 4, 3, 3, 2, 3, 3, 4, 3, 3, 3, 3, 3, 4, 2, 2, 4, 2)

MedidasC <- c(GrupoC1, GrupoC2)

MedidasC %>% 
  shapiro.test()# Não segue distribuição normal
## 
##  Shapiro-Wilk normality test
## 
## data:  .
## W = 0.87325, p-value = 0.0006849
GruposC <- c(rep("G1", length(GrupoC1)), 
             rep("G2", length(GrupoC2))) %>% 
  as.factor()

wilcox.test(MedidasC ~ GruposC, exact = FALSE, paired = TRUE)
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  MedidasC by GruposC
## V = 0, p-value = 0.007745
## alternative hypothesis: true location shift is not equal to 0
wilcox.abg(GrupoC1, GrupoC2)
##           N_validos      Média       E.P 1ºQ  2ºQ 3ºQ     Valor-P
## diferença        18 -0.7777778 0.2222222  -1 -0.5   0 0.007744715

Teste de Friedman

Esse é um teste não-paramétrico utilizado para comparar 3 ou mais amostras pareadas quanto à uma variável quantitativa. Exemplo:

GrupoD1 <- c(2, 2, 1, 3, 1, 3, 2, 2, 3, 3, 3, 3, 2, 1, 1, 2, 4, 2)
GrupoD2 <- c(3, 4, 3, 3, 2, 3, 3, 4, 3, 3, 3, 3, 3, 4, 2, 2, 4, 2)
GrupoD3 <- c(2, 5, 4, 4, 3, 4, 4, 5, 4, 4, 2, 4, 2, 5, 3, 3, 4, 2)

MedidasD <- c(GrupoD1, GrupoD2, GrupoD3)

MedidasD %>%
  shapiro.test()# Não segue distribuição normal
## 
##  Shapiro-Wilk normality test
## 
## data:  .
## W = 0.91304, p-value = 0.0008227
Matriz <- cbind(GrupoD1, GrupoD2, GrupoD3)

Matriz %>%
  friedman.test()
## 
##  Friedman rank sum test
## 
## data:  .
## Friedman chi-squared = 16.836, df = 2, p-value = 0.0002208

Quando o teste de Friedman verifica diferença significativa, utiliza-se o de Nemenyi, que é um post-hoc, para a verificação de diferenças par-a-par (comparações múltiplas). Exemplo:

Matriz %>% 
  posthoc.friedman.nemenyi.test()# Pacote PMCMR
## 
##  Pairwise comparisons using Nemenyi multiple comparison test 
##              with q approximation for unreplicated blocked data 
## 
## data:  . 
## 
##         GrupoD1 GrupoD2
## GrupoD2 0.21810 -      
## GrupoD3 0.00099 0.13394
## 
## P value adjustment method: none

Quantitativa apresenta distribuição normal

Teste t

A utilização do teste t é ideal para comparar 2 amostras quanto à uma variável quantitativa quando essa segue uma distribuição normal. Existem três casos para a sua utilização: amostras não pareadas com variâncias populacionais iguais, amostras não pareadas com variâncias populacionais diferentes, e amostras pareadas. Exemplo do primeiro caso:

set.seed(16)
GrupoE1 <- rnorm(25, 3, 1)

set.seed(16)
GrupoE2 <- rnorm(21, 4, 1)

MedidasE <- c(GrupoE1, GrupoE2)

MedidasE %>% 
  shapiro.test()# Segue distribuição normal
## 
##  Shapiro-Wilk normality test
## 
## data:  .
## W = 0.98049, p-value = 0.6261
GruposE <- c(rep("G1", length(GrupoE1)), 
             rep("G2", length(GrupoE2))) %>% 
  as.factor()

if(!require(car)){ install.packages("car"); require(car) }

leveneTest(MedidasE ~ GruposE)# Variâncias iguais
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  1   1e-04 0.9923
##       44
t.test(GrupoE1, GrupoE2, var.equal = TRUE)
## 
##  Two Sample t-test
## 
## data:  GrupoE1 and GrupoE2
## t = -3.3456, df = 44, p-value = 0.001687
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -1.6352090 -0.4057567
## sample estimates:
## mean of x mean of y 
##  3.134466  4.154949

Exemplo do segundo caso:

set.seed(16)
GrupoF1 <- rnorm(25, 3, 1)

set.seed(16)
GrupoF2 <- rnorm(21, 4, 2)

MedidasF <- c(GrupoF1, GrupoF2)

MedidasF %>% 
  shapiro.test()# Segue distribuição normal
## 
##  Shapiro-Wilk normality test
## 
## data:  .
## W = 0.98159, p-value = 0.6719
GruposF <- c(rep("G1", length(GrupoF1)), 
             rep("G2", length(GrupoF2))) %>% 
  as.factor()

leveneTest(MedidasF ~ GruposF)# Variâncias diferentes
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value   Pr(>F)   
## group  1  8.2799 0.006163 **
##       44                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
t.test(GrupoE1, GrupoE2, var.equal = FALSE)
## 
##  Welch Two Sample t-test
## 
## data:  GrupoE1 and GrupoE2
## t = -3.3383, df = 42.254, p-value = 0.001768
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -1.6372852 -0.4036805
## sample estimates:
## mean of x mean of y 
##  3.134466  4.154949

Exemplo do terceiro caso:

set.seed(16)
GrupoH1 <- rnorm(25, 3, 2)

set.seed(16)
GrupoH2 <- rnorm(25, 4, 1)

MedidasH <- c(GrupoH1, GrupoH2)

MedidasH %>% 
  shapiro.test()# Segue distribuição normal
## 
##  Shapiro-Wilk normality test
## 
## data:  .
## W = 0.96379, p-value = 0.1282
t.test(GrupoH1, GrupoH2, paired = TRUE)
## 
##  Paired t-test
## 
## data:  GrupoH1 and GrupoH2
## t = -4.248, df = 24, p-value = 0.0002811
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -1.2860539 -0.4450143
## sample estimates:
## mean of the differences 
##              -0.8655341

ANOVA

A análise de variância (ANOVA) pode determinar se existe diferença significativa entre três ou mais grupos quanto à uma variável quantitativa que siga distribuição normal. A ANOVA usa testes F para testar estatisticamente a igualdade entre médias.

set.seed(16)
GrupoG1 <- rnorm(26, 3, 1)

set.seed(16)
GrupoG2 <- rnorm(22, 5, 2)

set.seed(16)
GrupoG3 <- rnorm(19, 4, 1)

MedidasG <- c(GrupoG1, GrupoG2, GrupoG3)

MedidasG %>% 
  shapiro.test()# Segue distribuição normal
## 
##  Shapiro-Wilk normality test
## 
## data:  .
## W = 0.96997, p-value = 0.1046
GruposG <- c(rep("G1", length(GrupoG1)), 
             rep("G2", length(GrupoG2)), 
             rep("G3", length(GrupoG3))) %>% 
  as.factor()

model <- lm(MedidasG ~ GruposG)

if(!require(stats)){ install.packages("stats"); require(stats) }

model %>% 
  aov() %>% 
  summary()
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## GruposG      2  51.56  25.781   12.46 2.69e-05 ***
## Residuals   64 132.44   2.069                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Quando se verifica diferença significativa entre os grupos na ANOVA, utiliza-se o teste de Tukey, que é um post-hoc, para a verificação de diferenças par-a-par (comparações múltiplas). Exemplo:

model %>% 
  aov() %>% 
  TukeyHSD()
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = .)
## 
## $GruposG
##            diff         lwr        upr     p adj
## G2-G1  2.079207  1.07931276 3.07910145 0.0000146
## G3-G1  1.010591 -0.03118535 2.05236636 0.0591258
## G3-G2 -1.068617 -2.14964050 0.01240729 0.0533450

Dados longitudinais agrupados via GEE

O método GEE, conhecido como Modelos Marginais, é um dos métodos mais adequados no tratamento de dados longitudinais agrupados (3 ou mais grupos), quando a variável de interesse segue distribuição normal. Exemplo:

set.seed(16)
GrupoI1 <- rnorm(20, 3, 1.5)

set.seed(16)
GrupoI2 <- rnorm(20, 3.5, 1.2)

set.seed(16)
GrupoI3 <- rnorm(20, 4, 1)

MedidasI <- c(GrupoI1, GrupoI2, GrupoI3)

MedidasI %>% 
  shapiro.test()# Segue distribuição normal
## 
##  Shapiro-Wilk normality test
## 
## data:  .
## W = 0.96577, p-value = 0.09037
GruposI <- c(rep("G1", length(GrupoI1)), 
             rep("G2", length(GrupoI2)), 
             rep("G3", length(GrupoI3))) %>% 
  as.factor()

ID <- c(seq(1:length(GrupoI1)), 
        seq(1:length(GrupoI2)), 
        seq(1:length(GrupoI3))) %>% 
  as.factor()

Data <- data.frame(ID, MedidasI, GruposI)

if(!require(geepack)){ install.packages("geepack"); require(geepack) }

model2 <- geeglm(MedidasI ~ GruposI, id = ID, family = gaussian,  
                corstr = "exchangeable", data = Data[order(Data$ID),])
model2 %>% 
  summary()
## 
## Call:
## geeglm(formula = MedidasI ~ GruposI, family = gaussian, data = Data[order(Data$ID), 
##     ], id = ID, corstr = "exchangeable")
## 
##  Coefficients:
##             Estimate Std.err   Wald Pr(>|W|)    
## (Intercept)  3.36763 0.32171 109.58  < 2e-16 ***
## GruposIG2    0.42647 0.06434  43.93 3.40e-11 ***
## GruposIG3    0.87746 0.10724  66.95 3.33e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Estimated Scale Parameters:
##             Estimate Std.err
## (Intercept)    1.438  0.3614
## 
## Correlation: Structure = exchangeable  Link = identity 
## 
## Estimated Correlation Parameters:
##       Estimate   Std.err
## alpha   0.9595 2.665e-09
## Number of clusters:   20   Maximum cluster size: 3

Já consegue definir qual o tipo de teste adequado para a sua pesquisa? Deixe suas dúvidas nos comentários aqui embaixo que iremos responder. E, caso precise de ajuda, entre em contato para fazer seu orçamento! Nós realizamos análises estatísticas para trabalhos acadêmicos como teses e dissertações.

EScrito em colaboração com Luis Henrique Carvalho

Share the Post:
Compartilhar no facebook
Compartilhar no twitter
Compartilhar no linkedin

6 comentários em “Qual o melhor teste para a comparação de médias?”

    1. Bom dia, Vanderley. Existe sim! O operador pipe (%>%) ainda existe. Este operador é utilizado principalmente com as bibliotecas tidyverse/dplyr. Em alguns artigos ou scripts pela internet você pode encontrar o operador pipe como sendo |>. Isso porque a versão 4.1 do R trouxe algumas novidades para os usuários, como por exemplo a inclusão de um operador pipe nativo (|>).

  1. Neste caso, se eu tenho dados sobre consumo de um produto e quero comparar as categorias entre quem consome menos e quem consome mais, qual seria o teste mais adequado?

    1. Bom dia, Lucas!
      De acordo com as informações que você nos deu, o teste Mann-Whitney poderia ser utilizado já que possui 2 grupos (consome menos e consome mais o produto) independentes (não pareados). Mas, para algo mais assertivo, seria melhor você analisar primeiramente os dados, ver o comportamento e avaliar se a sugestão se encaixa ao seu estudo!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Related Posts