p-curvas

Primero, una simulación:

n <- 100
delta <- 0.2
n.iter <- 10000

p_valores <- function(n, delta){
  tmp <- replicate(n.iter, {
    x <- rnorm(n)
    y <- rnorm(n, mean = delta)
    t.test(x, y)$p.value
  })

  res <- tmp[tmp < 0.05]

  hist(res, freq = FALSE, xlab = "p value", ylab = "", col = "gray", main = "histograma de p-valores publicables")

  res
}

null_effect_p_values <- p_valores(n, 0)
some_effect_p_values <- p_valores(n, delta)

Lo que simula son n.iter experimentos en los que se comparan n valores N(0,1) con otros n valores N(delta, 1) y se extrae el correspondiente p-valor. Luego se grafican los publicables (<0.05).

Cuando diff es 0, sucede:

  • No hay diferencia entre x e y, i.e., no hay efecto real.
  • Los p-valores tienen una distribución uniforme en [0,1] y, por tanto, también en [0, 0.05].

Así que la p-curva tiene una forma característica, aproximadamente como

Si, por el contrario, existe un efecto (delta = 0.2), la p-curva de los p-valores publicables tiene un sesgo observable:

Las p-curvas son útiles cuando partes interesadas comienzan a publicar artículos y artículos sobre un tema determinado donde, con excesiva frecuencia, no hay nada que rascar (delta = 0). La forma de la p-curva construida con los p-valores de la literatura sobre el asunto puede ayudar a identificar esos campos nulos y denunciar a los charlatanes.

Más y más.