Como montar uma tabela de comparação de medias

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.

Como montar uma tabela de comparação de medias

Como montar uma tabela de comparação de medias

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