Teste de Wilcoxon para comparação de médias

EST212 - Bioestatística

Helgem de Souza

Introdução

Antes de iniciar nossa aula:

  1. Abra o RStudio.

  2. Crie um novo script.

  3. Crie uma pasta na área de trabalho com seu nome.

  4. Defina a pasta como diretório de trabalho

  5. Salve o script criado na pasta com o nome "aula14_est212.R".

  6. Baixe do Moodle os arquivos peso_ratos.csv salve na pasta criada.

  7. Leia o arquivo peso_ratos.csv para o objeto ratos.

Testes baseados em ranqueamento

Conforme vimos, testes paramétricos são baseados em distribuições conhecidas e dependem desse requisito para apresentarem bons resultados.

Entretanto, nem sempre é possível assegurar que os dados seguem uma referida distribuição.

Muitas vezes a natureza dos dados sequer permite tal associação.

Para contornar esse problema, testes não paramétricos foram criados.

Os testes não paramétricos mais clássicos são baseados no ranqueamento dos dados.

Ranqueamento de dados

Seja \(X_1, X_2, \cdots, X_n\) uma amostra de uma população. O ranqueamento dessa amostra é dado por:

\[ r(X_1), r(X_2), \cdots, r(X_n) \]

Em que

\[ r(X_j) = \#\{X_j | X_j \leq X_i, j = 1, 2, \cdots, n\} \]

Ou seja, o rank de um valor é igual ao número de elementos da amostra que são menores ou iguais a ele.

O rank é atribuído por meio da posição da observação no conjunto de dados ordenados. Em caso de empates, utiliza-se a média dos ranks.

Ranqueamento de dados

Exemplos:

Valores contínuos Rank Valores discretos Rank
2,5 2 2 2,5
3,6 5 3 4,5
1,75 1 1 1
4,57 6 4 6
2,98 3 2 2,5
5,57 7 5 7
3,2 4 3 4,5

Note que:

  • \(1,75 \leq 2,5 \leq 2,98 \leq 3,2 \leq 3,6 \leq 4,57 \leq 5,57\)

  • \(1 \leq 2 \leq 2 \leq 3 \leq 3 \leq 4 \leq 5\)

Ranqueamento de dados

O R gera o ranqueamento dos dados por meio da função rank. Vejamos os exemplos acima no R:

#Dados a ranquear
x <- c(2.5, 3.6, 1.75, 4.57, 2.98, 5.57, 3.2)
y <- c(2, 3, 1, 4, 2, 5, 3)

#Ranqueamento dos dados
rank(x)
[1] 2 5 1 6 3 7 4
rank(y)
[1] 2.5 4.5 1.0 6.0 2.5 7.0 4.5

Não utilizaremos o ranqueamento dos dados diretamente. Eles são aplicados na construção dos testes, mas será útil para compreensão dos testes que estudaremos.

Teste do Sinal

Os testes não paramétricos, de modo geral, são baseados em ideias bastante intuitivas. O que não significa que são simples. A matemátiva envolvida na formalização do teste por vezes pode ser bastante complexa.

Para ilustrar, vamos construir o teste não paramétrico mais simples, o Teste do Sinal.

Suponha que se queira testar as seguintes hipóteses:

  • \(H_0\): A mediana de uma população é igual a \(m_0\). (\(H_0: m = m_0\) )

  • \(H_1\): A mediana de uma população é diferente de \(m_0\). (\(H_1: m \neq m_0\) )

Como você faria esse teste de uma forma intuitiva?

Teste do Sinal

Pela definição, mediana é o valor que deixa 50% dos itens da amostra abaixo dele e 50% dos elementos acima dele.

Ou seja, se a mediana for \(m_0\), teríamos em uma amostra aleatória dessa população, aproximadamente metade da amostra acima desse valor e metade abaixo.

Se pensarmos na diferença de cada valor para a mediana, a diferença entre valores menores que a mediana e a própria mediana seriam negativos, caso contrário, a diferença seria positiva. Ou seja:

\[ D_i = X_i - m_0 \]

  • Se \(X_i < m_0 \rightarrow Sinal(D_i) = -\)

  • Se \(X_i > m_0 \rightarrow Sinal(D_i) = +\)

Se aproximadamente 50% dos sinais forem positivos, temos evidências de que a mediana é igual a \(m_0\). Caso o número de sinais positivos seja muito distante de 50%, temos evidências para rejeitar a hipótese nula.

Teste do Sinal

Para calcular a probabilidade dos sinais positivos (ou negativos) observados serem próximos de 50%, considera-se \(H_0\) verdadeira.

Nesse caso, o número de sinais positivos seguiria uma distribuição binomial com n = número de observações e p = 0,5.

Ou seja: Denote X como o número de sinais positivos. Sob \(H_0\), \(X \sim Bin(n, 0,5)\)

Sabemos que se \(X \sim Bin(n, 0,5)\), então:

\[ P(X = x) = \dfrac{n!}{x!(n-x)!}p^x(1-p)^{n-x} = \dfrac{n!}{x!(n-x)!}0,5^n \]

Para calcular o p-valor do teste, devemos encontrar qual a probabilidade de observar números de sinais positivos tão ou mais extremos que o observado.

Teste do Sinal - Exemplo

A altura esperada de crianças de 10 anos é de 128cm. Em uma turma de ensino básico, suspeita-se que a altura mediana é menor que esse valor. As alturas seguem listadas a seguir:

128 125 126 127 129 125 123 131 130 123 124

Vamos testar as seguintes hipóteses usando o teste do sinal:

  • \(H_0\): A altura mediana da turma é igual a 128cm

  • \(H_1\): A altura mediana da turma é menor que 128cm

Vamos construir a tabela de diferenças e sinais. Lembrando que \(D_i = X_i - m_0\), em que \(m_0\) é o valor da mediana sob \(H_0\):

Teste do Sinal - Exemplo

\(X_i\) \(D_i\) Sinal
128 128 - 128 = 0 sorteia-se o sinal ( + )
125 125 - 128 = -3 -
126 126 - 128 = -2 -
127 127 - 128 = -1 -
129 129 - 128 = 1 +
125 125 - 128 = -3 -
123 123 - 128 = -5 -
131 131 - 128 = 3 +
130 130 - 128 = 2 +
123 123 - 128 = -5 -
124 124 - 128 = -4 -

Teste do Sinal - Exemplo

Obtivemos 4 sinais positivos e 7 negativos. Ou seja, temos mais observações abaixo de 128 do que acima de 128. Será que esses indícios são suficientes para rejeitar \(H_0\)?

Seja X a variável número de sinais positivos. sob \(H_0\), temos que

\[ X \sim Bin(11; 0,5) \implies P(X=x) = \dfrac{11!}{x!(11-x)!}0,5^{11} \]

A probabilidade de obter uma quantidade tão ou mais extremo de sinais positivos do que a obtida, no sentido da diferença, seria obter 0, 1, 2, 3 ou 4 sinais positivos, pois quanto mais distante da igualdade no número de sinais, maiores os indícios de que 128 não divide os dados em seu centro. Esse seria o p-valor do teste, dado por:

\[ \text{p-valor} = P(X \leq 4) = \sum \limits_{x = 0}^4 \dfrac{11!}{x!(11-x)!}0,5^{11} = 0,274 \]

Teste do Sinal - Exemplo

Como o p-valor é grande, maior que 0,05 por exemplo, não temos evidências suficientes para rejeitar a hipótese nula.

Logo, ao nível de 5% de significância, podemos afirmar que a altura mediana da turma é aproximadamente 128cm.

Essa construção do Teste do Sinal teve caráter ilustrativo. Boa parte dos testes não paramétricos para mediana seguem um raciocínio semelhante.

Esse teste não é muito utilizado, mas é bastante importante do ponto de vista didático. Veremos agora um teste que foi baseado no teste do Sinal, mas que apresenta resultados muito mais robustos.

Teste de Wilcoxon

O teste do sinal apresenta uma característica importante: ele desconsidera a magnitude das diferenças.

Vejamos o exemplo anterior. Os valores 123 e 127 apresentam diferenças de -5 e -1 para a mediana 128, respectivamente. Entretanto, para efeitos práticos, tal distância não faz diferença. Ambos recebem sinal negativo.

Uma forma de reduzir essa perda de informação é a incorporação da magnitude das diferenças, via ranqueamento.

O pesquisador Frank Wilcoxon sugeriu tal adaptação, criando o que hoje é conhecido como Teste de Wilcoxon.

Teste de Wilcoxon para uma amostra

Seja \(X_1, X_2, \cdots, X_n\) uma amostra de uma população. Suponha que deseja-se testar as seguintes hipóteses:

  • \(H_0\): A mediana de uma população é igual a \(m_0\). (\(H_0: m = m_0\) )

  • \(H_1\): A mediana de uma população é diferente de \(m_0\). (\(H_1: m \neq m_0\) )

Assim como no teste do sinal, podemos definir a seguinte diferença:

\[ D_i = X_i - m_0 \]

e a variável \(S_i\), dada por

  • \(S_i = 0\text{ se }D_i< 0\)

  • \(S_i = 1\text{ se }D_i> 0\)

Teste de Wilcoxon para uma amostra

A estatística do Teste de Wilcoxon é dada por

\[ T = 2\sum\limits_{i = 1}^n r(|D_i|)S_i - \frac{n(n+1)}{2} \]

Em que \(r(|D_i|)\) é o rank das diferenças entre o valor observado (\(X_i\)) e a mediana em teste (\(m_0\)).

Os quantis da estatística de teste são tabelados, mas como utilizaremos o R para seu cálculo, não será necessário utilizar tabelas

O Teste de Wilcoxon é uma alternativa ao teste T para uma amostra, quando os dados não apresentam distribuição normal.

Teste de Wilcoxon para uma amostra

A realização do Teste de Wilcoxon para uma amostra no R é feita por meio da função

wilcox.test(x, mu), em que:

  • x - vetor de dados

  • mu - valor da mediana em teste

Vamos como realizar o teste para uma única amostra no exemplo a seguir

Exemplo 1 - Teste de Wilcoxon para uma amostra

Um novo medicamento promete aliviar dores de cabeça em 10 minutos. Para verificar se a afirmação é verdadeira, uma agência reguladora realizou um experimento com 15 voluntários que sofrem com dores de cabeça recorrentes.

Após a ingestão do medicamento, os pacientes acionaram um cronômetro e o paralizaram ao perceber o alívio da dor. Foram obtidos os seguintes resultados:

101, 28, 290, 47, 5, 96, 11, 16, 4, 44, 17, 10, 40, 2, 1

Vamos utilizar o teste de Wilcoxon para verificar se a afirmação da fabricante procede, ao nível de 5% de significância.

Exemplo 1 - Teste de Wilcoxon para uma amostra

Primeiramente, a título de ilustração, vamos verificar que os dados não são normais

#Tempo até o alívio da dor
tempo <- c(101, 28, 29, 47, 5, 96, 11, 16, 4, 44, 17, 10, 40, 2, 1)

shapiro.test(tempo)

    Shapiro-Wilk normality test

data:  tempo
W = 0.81262, p-value = 0.005362

Como o p-valor é menor que 0,1, temos evidências que indicam que os tempos até o alívio da dor não seguem uma distribuição normal. Logo, não podemos usar o teste t.

Vamos usar o teste de Wilcoxon para testar as seguintes hipóteses:

  • \(H_0:\) o tempo mediano de alívio é igual a 10 minutos

  • \(H_1:\) o tempo mediano de alívio é diferente de 10 minutos

Exemplo 1 - Teste de Wilcoxon para uma amostra

O teste é executado da seguinte forma:

# Teste de Wilcoxon para o tempo mediano de alívio
wilcox.test(tempo, mu = 10)

    Wilcoxon signed rank test with continuity correction

data:  tempo
V = 86.5, p-value = 0.03542
alternative hypothesis: true location is not equal to 10

Como o p-valor é menor que o nível de significância definido, podemos afirmar, ao nível de 5% de significância, que o tempo mediano para o alívio das dores de cabeça é diferente de 10 minutos.

Exemplo 1 - Teste de Wilcoxon para uma amostra

Vamos verificar se o tempo até o alívio da dor é igual a 15 minutos

# Teste de Wilcoxon para o tempo mediano de alívio
wilcox.test(tempo, mu = 15)

    Wilcoxon signed rank test with continuity correction

data:  tempo
V = 85, p-value = 0.1639
alternative hypothesis: true location is not equal to 15

Ao nível de 5% de significância, podemos afirmar que o tempo de alívio das dores de cabeça é igual a 15 minutos. Ou seja, a empresa poderia afirmar que seu remédio alivia as dores em 15 minutos, em mediana.

Teste de Wilcoxon para duas amostras pareadas

Assim como o teste de Wilcoxon para uma amostra é um substituto para o teste t, quando a amostra não provém de uma distribuição normal, também podemos utilizar o teste de Wilcoxon para verificar se duas amostras pareadas possuem a mesma mediana.

A ideia é análoga ao teste t. Verifica-se se a diferença entre as medianas é igual a 0 ou diferente de 0.

A única diferença para o teste de Wilcoxon para uma única população e para duas populações pareadas é o cálculo das diferenças.

Teste de Wilcoxon para duas amostra pareadas

Sejam \(X_1, X_2, \cdots, X_n\) e \(Y_1, Y_2, \cdots, Y_n\) amostras de duas populações pareadas. Suponha que deseja-se testar as seguintes hipóteses:

  • \(H_0\): A diferença entre as medianas das populações é igual a 0.

    (\(H_0: m_X - m_y = 0\) )

  • \(H_1\): A diferença entre as medianas das populações é diferente de 0.

    (\(H_0: m_X - m_y = 0\) )

Assim como no teste do para uma amostra, podemos definir a seguinte diferença:

\[ D_i = X_i - Y_i \]

e a variável \(S_i\), dada por

  • \(S_i = 0\text{ se }D_i< 0\)

  • \(S_i = 1\text{ se }D_i> 0\)

Teste de Wilcoxon para duas amostras pareadas

Como a mudança ocorreu apenas no cálculo das diferenças, a estatística do Teste de Wilcoxon para duas amostras pareadas segue a mesma, dada por

\[ T = 2\sum\limits_{i = 1}^n r(|D_i|)S_i - \frac{n(n+1)}{2} \]

Em que \(r(|D_i|)\) é o rank das diferenças entre os valores observados (\(X_i\)) e (\(Y_i\)).

NEssa configuração, o Teste de Wilcoxon é uma alternativa ao teste T pareado, quando os dados não apresentam distribuição normal.

Teste de Wilcoxon para duas amostras pareadas

A realização do Teste de Wilcoxon paraduas amostras pareadas no R é feita por meio da mesma função utilizada no caso de uma amostra. A diferença é apenas nos parâmetros do teste.

Existem duas possibilidades de aplicação, a depender do formato dos dados.

Vamos ilustrar cada uma delas.

Formulação 1 - Amostras em colunas separadas

Quando as duas populações estão em colunas distintas do banco de dados, utilizamos a seguinte formulação:

wilcox.test(x, y, paired = T), em que:

  • x - amostra da população 1

  • y -amostra da população 2

  • paired - indica que o teste é pareado

Em dados pareados, este é o formato mais comum, pois os dados são medidos em momentos distintos.

Formulação 2 - Amostras na mesma coluna

Quando as amostras estão em uma mesma coluna e uma segunda variável é utilizada para identificar quais são os grupos, utilizamos a notação de fórmula que já estamos habituados

wilcox.test(x ~ grupo, data = dados, paired = T), em que:

  • x - amostra da população 1

  • y -amostra da população 2

  • paired - indica que o teste é pareado

Exemplo 2 - Teste para amostras pareadas

Dois grupos de gêmeos identicos participaram de testes psicológicos para avaliar seu nível de agressividade. O grupo de pesquisa deseja verificar a hipótese de que o primeiro gêmeo a nascer tende a ser mais agressivo que o segundo. Os dados seguem apresentados a seguir

Gêmeo 1 86 71 77 68 91 72 77 91 70 71 88 87
Gêmeo 2 88 77 76 64 96 72 65 90 65 80 81 72

As hipóteses são as seguintes:

  • \(H_0\): Não existem diferenças significativas na agressividade entre os gêmeos

  • \(H_1\): Existem diferenças significativas na agressividade entre os gêmeos

Vejamos como realizar esse teste no R

Exemplo 2 - Teste para amostras pareadas

Primeiramente vamos registrar os dados

#Dados de agressividade
g1 <- c(86, 71, 77, 68, 91, 72, 77, 91, 70, 71, 88, 87)
g2 <- c(88, 77, 76, 64, 96, 72, 65, 90, 65, 80, 81, 72)

Podemos fazer um boxplot para comparar os grupos antes de realizar o teste

#Boxplot para comparação dos grupos
boxplot(g1, g2)

Exemplo 2 - Teste para amostras pareadas

O boxplot não indica visualmente a presença de diferenças significativas. Vamos realizar o teste de Wilcoxon ao nível de 5% de significância

# Teste de Wilcoxon para amostras pareadas
wilcox.test(x = g1, y = g2, paired = T)

    Wilcoxon signed rank test with continuity correction

data:  g1 and g2
V = 41.5, p-value = 0.4765
alternative hypothesis: true location shift is not equal to 0

Como o p-valor é maior que o nível de significância, podemos afirmar com 5% de significância que não existe diferença significativa na agressividade mediana dos gêmeos devido à ordem de nascimento.

Exercício Prático 1

O peso de ratos foi registrado antes e depois de uma dieta de recuperação de peso. Os dados estão registrados no arquivo peso_ratos.csv. Verifique se o aumento de peso foi significativo ao nível de 1% de significância.

As hipóteses são as seguintes:

  • \(H_0\): O peso dos ratos antes e depois da dieta é o mesmo.

  • \(H_1\): O peso dos ratos antes e depois da dieta é diferente.

Visualize o comportamento dos dados utilizando boxplots e na sequência execute o teste de Wilcoxon para dados pareados.

Exercício Prático 1

Primeiramente podemos verificar o comportamento dos dados usando um boxplot:

#Boxplot dos dados
boxplot(ratos$antes, ratos$depois)

Claramente a dieta de recuperação gerou aumento de peso. Vamos confirmar por meio do teste de Wilcoxon.

Exercício Prático 1

# Teste de Wilcoxon para dados pareados
wilcox.test(x = ratos$antes, y = ratos$depois, paired = T)

    Wilcoxon signed rank exact test

data:  ratos$antes and ratos$depois
V = 0, p-value = 0.001953
alternative hypothesis: true location shift is not equal to 0

Como o p-valor é menor que o nível de significância (0,01), podemos afirmar, com 1% de significância, que o peso dos ratos antes e depois da dieta de recuperação de peso é de fato diferente.

Conclusão

Nessa aula aprendemos dois testes que substituem o teste t em caso de não normalidade:

  • Teste de Wilcoxon para 1 amostra - Substitui o teste t para uma amostra

  • Teste de Wilcoxon para duas amostras pareadas - Substitui o teste t para dados pareados

Na próxima aula, veremos o teste de Mann-Whitney, que substitui o teste t para duas amostras independentes, quando não há normalidade nos dados.