Teste dos sinais

O teste dos sinais é o teste não paramétrico mais simples. Ele usa apenas a direção de cada observação em relação a um valor de referência (positivo ou negativo), ignorando magnitudes completamente. Isso o torna extremamente robusto, mas também menos poderoso do que alternativas que aproveitam mais os dados.

Como funciona

Dadas \(n\) observações (ou diferenças), registre o sinal de cada uma em relação à mediana hipotética \(M_0\):

  • \(+\) se a observação está acima de \(M_0\).
  • \(-\) se a observação está abaixo de \(M_0\).
  • Empates (igualdade exata a \(M_0\)) são descartados.

Sob \(H_0\) (a verdadeira mediana é \(M_0\)), cada observação não empatada tem igual probabilidade de ser positiva ou negativa, então o número de sinais positivos \(S^+\) segue uma distribuição \(\text{Binomial}(n, 0{,}5)\).

Teste \(H_0\) \(H_1\) valor-p
Bilateral \(M = M_0\) \(M \neq M_0\) \(2 \times P(X \leq \min(S^+, S^-))\)
Unilateral à direita \(M = M_0\) \(M > M_0\) \(P(X \geq S^+)\)
Unilateral à esquerda \(M = M_0\) \(M < M_0\) \(P(X \leq S^+)\)

em que \(X \sim \text{Binomial}(n, 0{,}5)\) e \(n\) é o número de observações não empatadas.

Exemplos

Exemplo 1: dados pareados (método de ensino)

Dez estudantes fazem uma prova antes e depois de uma nova intervenção pedagógica. Diferenças nos escores (depois - antes):

\[+3,\; +1,\; -2,\; +4,\; +2,\; 0,\; -1,\; +3,\; +1,\; -2\]

Passo 1: descarte a diferença zero. \(n = 9\).

Passo 2: conte os sinais. \(S^+ = 6\) (positivos), \(S^- = 3\) (negativos).

Passo 3: valor-p bilateral a partir de \(X \sim \text{Binomial}(9, 0{,}5)\):

\[p = 2 \times P(X \leq 3) = 2 \times \sum_{k=0}^{3} \binom{9}{k} 0{,}5^9 = 2 \times 0{,}254 = 0{,}508\]

Decisão: \(p = 0{,}508 > 0{,}05\), não rejeitamos \(H_0\).

Nenhuma evidência significativa de que o método de ensino mudou a mediana dos escores. A divisão 6-3 nos sinais não é inusual sob \(H_0\).

Exemplo 2: teste de uma amostra para a mediana

Um serviço de entregas afirma que seu tempo mediano de entrega é de 48 horas. Um grupo de consumidores registra 15 entregas: 11 demoraram mais de 48 horas, 3 demoraram menos, e 1 demorou exatamente 48 horas.

Passo 1: descarte o empate. \(n = 14\), \(S^+ = 11\), \(S^- = 3\).

Passo 2: teste unilateral à direita (\(H_1: M > 48\)). Valor-p:

\[p = P(X \geq 11) = \sum_{k=11}^{14} \binom{14}{k} 0{,}5^{14} = 0{,}029\]

Decisão: \(p = 0{,}029 < 0{,}05\), rejeitamos \(H_0\).

Há evidência significativa de que o tempo mediano real de entrega excede 48 horas.

Distribuição binomial sob H0 mostrando o número observado de sinais positivos e a área do valor-p para o exemplo do tempo de entrega

Teste dos sinais vs. teste de Wilcoxon de postos sinalizados

Ambos são alternativas não paramétricas ao teste \(t\) pareado, mas usam quantidades diferentes de informação:

Teste dos sinais Wilcoxon de postos sinalizados
Usa a direção Sim Sim
Usa a magnitude Não Sim (via postos)
Assume diferenças simétricas Não Sim
Poder Menor Maior
Melhor para Dados ordinais, outliers, assimetria forte Diferenças contínuas, aproximadamente simétricas

⚠️ Use Wilcoxon de postos sinalizados quando puder

O teste dos sinais descarta toda a informação sobre magnitude, o que custa poder. Para os mesmos dados, o teste de Wilcoxon de postos sinalizados é quase sempre mais poderoso porque ordena as diferenças absolutas e considera seus tamanhos relativos.

Use o teste dos sinais quando:

  • Os dados são ordinais e as diferenças não têm uma magnitude significativa (por exemplo, preferências ordenadas).
  • As diferenças são tão fortemente assimétricas ou têm outliers tão extremos que até os postos são pouco confiáveis.
  • Você precisa do mínimo absoluto de suposições.

Na maioria das situações com dados pareados contínuos, o teste de Wilcoxon de postos sinalizados é a melhor escolha.

Executando o teste em R

Não há uma função sign.test() dedicada no R base. A abordagem mais fácil usa o teste binomial diretamente:

# Example 2: delivery times
# S+ = 11 successes out of n = 14 non-tied observations
binom.test(x = 11, n = 14, p = 0.5, alternative = "greater")

# For paired data: compute differences first
diffs <- c(3, 1, -2, 4, 2, -1, 3, 1, -2)  # excluding the zero
s_plus <- sum(diffs > 0)
n      <- sum(diffs != 0)
binom.test(s_plus, n, p = 0.5, alternative = "two.sided")

# The BSDA package also provides sign.test()
library(BSDA)
sign.test(diffs, md = 0, alternative = "two.sided")

💡 Aproximação para amostras grandes

Para \(n > 25\), a distribuição binomial sob \(H_0\) é bem aproximada por uma distribuição normal:

\[Z = \frac{S^+ - n/2}{\sqrt{n/4}} \sim N(0,1)\]

Isso é útil para cálculos rápidos manuais. Para valores-p exatos com qualquer \(n\), use a binomial diretamente como mostrado acima.