Jacques Wainer
27/3/20
Se você repetir 20 vezes um teste que dá uma resposta errada com probabilidade 1/20, você terá em média 1 resposta errada! (isso é apenas uma aproximação - ver abaixo)
O programa abaixo roda 20 vezes o t-test para duas amostras de 30 dados vindo da mesma gaussiana (media = 0 desvio padrão = 1)
set.seed(1234)
for (i in 1:20){
tt=t.test(rnorm(30),rnorm(30))
print(paste(i,":",round(tt$p.value,3)))
}
Veja a entrada 12! Veja também que não há nada errado em usar o teste t nestes casos.
Formalmente: a probabilidade que a repetição 20 vezes de um teste que erra 5% não de errado nenhuma vez é \(0.95^{20} = 0.36\). Ou seja a probabilidade que pelo menos uma vez das 20 o teste de errado é \(1-0.36 = 0.64\)
set.seed(1234)
a=matrix(rnorm(300),ncol=20)
b=matrix(rnorm(400),ncol=20)
for (i in 1:20){
teste=t.test(a[,i],b[,i])
print(paste(i,":", round(teste$p.value,3)))
}
set.seed(4321)
a=rnorm(30)
b=rnorm(30)
t.test(a,b)$p.value
t.test(a[1:10],b[1:15])$p.value
t.test(a[10:30],b[15:30])$p.value
t.test(a[seq(1,30,2)],b[seq(1,30,2)])$p.value
Vários experimentos com diferentes conjuntos de dados (da mesma “fonte”) - isso é um problema se voce gera dados para o seu experimento
por exemplo: “Vamos trocar o nome dessa variável do programa e gerar novos dados” - repita isso 20 vezes e provavelmente uma das rodadas vai dar estatisticamente significativa
Usar um teste errado (mais forte) para os seus dados normalmente da resultados nas duas direções: de vez em quando voce obtem um p-valor mais baixo que devia e publica algo que não é “verdade”
Mas de vez em quando voce obtem um p-valor mais alto que devia, e deixa de publicar algo que " é verdade" .
set.seed(1234)
a = runif(15)
b = rnorm(7,0.5)
t.test(a,b)
wilcox.test(a,b)
p-valor \(<0.05\) não é um mandamento divino - resultados úteis não foram publicados pois p-valor=0.06
p-valor é uma função da “tamanho da diferença” entre os dois conjuntos e do número de dados:
p-valor muito baixo não significa que os dois conjuntos são muito diferentes. Para n → ∞, p-valor vai para 0 ou 1.
p-valor alto não significa que os conjuntos são iguais, pode significar que você tem poucos dados. Em alguns casos voce quer mostrar que seu programa é tão rápido quanto um programa pago, mas o seu é livre. Ou que seu programa acerta tanto quanto um programa conhecido, mas o seu é mais rápido. Não da para usar p-valor para mostrar que 2 conjuntos são iguais (nesse sentido).
Variações do problema de múltiplos testes geram falsos positivos: afirmações que um fenômeno existe quando ele de fato não existe.
De vez em quando isso é chamado de p-hacking mas o problema existe mesmo quando o pesquisador não tem más intenções
Blog de um pesquisador que gerou um artigo “fake” que chocolate ajuda a emagrecer
Blog sobre problemas da Ciência