Discusión
Una prueba de permutación genera todos permutaciones relevantes de un conjunto de datos, calcula una estadística de prueba designada para cada una de esas permutaciones y evalúa la estadística de prueba real en el contexto de la distribución de la permutación de las estadísticas. Una forma común de evaluarlo es informar la proporción de estadísticas que son (en cierto sentido) "tan extremas o más extremas" que las estadísticas reales. Esto se denomina a menudo un "valor p".
Dado que el conjunto de datos real es una de esas permutaciones, su estadística estará necesariamente entre las que se encuentran dentro de la distribución de las permutaciones. Por lo tanto, el valor p nunca puede ser cero.
A menos que el conjunto de datos sea muy pequeño (menos de unos 20-30 números totales, típicamente) o que la estadística de prueba tenga una forma matemática particularmente agradable, no es factible generar todas las permutaciones. (Un ejemplo en el que se generan todas las permutaciones aparece en Prueba de permutación en R .) Por lo tanto implementaciones informáticas de pruebas de permutación típicamente muestra de la distribución de la permutación. Lo hacen generando algunas permutaciones aleatorias independientes y esperan que los resultados sean una muestra representativa de todas las permutaciones.
Por lo tanto, cualquier número (como un "valor p") derivado de tal muestra es sólo estimadores de las propiedades de la distribución de la permutación. Es muy posible y a menudo ocurre cuando los efectos son grandes que el estimado El valor p es cero. No hay nada de malo en ello, pero inmediatamente plantea la cuestión hasta ahora descuidada de ¿cuánto podría diferir el valor p estimado del correcto? Dado que la distribución de la muestra de una proporción (como un valor p estimado) es Binomial, esta incertidumbre puede abordarse con una Intervalo de confianza del binomio .
Arquitectura
Una aplicación bien construida seguirá de cerca el debate en todos los aspectos. Comenzaría con una rutina para calcular la estadística de la prueba, como ésta para comparar las medias de dos grupos:
diff.means <- function(control, treatment) mean(treatment) - mean(control)
Escriba otra rutina para generar una permutación aleatoria del conjunto de datos y aplique la estadística de prueba. La interfaz de esta permite al que llama suministrar la estadística de prueba como argumento. Comparará el primer m
elementos de un conjunto (que se presume que es un grupo de referencia) a los elementos restantes (el grupo de "tratamiento").
f <- function(..., sample, m, statistic) {
s <- sample(sample)
statistic(s[1:m], s[-(1:m)])
}
La prueba de permutación se lleva a cabo primero encontrando la estadística de los datos reales (que aquí se supone que se almacenan en dos matrices control
y treatment
) y luego encontrar estadísticas de muchas permutaciones aleatorias independientes de las mismas:
z <- stat(control, treatment) # Test statistic for the observed data
sim<- sapply(1:1e4, f, sample=c(control,treatment), m=length(control), statistic=diff.means)
Ahora calcula la estimación binomial del valor p y un intervalo de confianza para él. Un método utiliza el sistema incorporado binconf
procedimiento en el HMisc
paquete:
require(Hmisc) # Exports `binconf`
k <- sum(abs(sim) >= abs(z)) # Two-tailed test
zapsmall(binconf(k, length(sim), method='exact')) # 95% CI by default
No es una mala idea comparar el resultado con otra prueba, incluso si se sabe que no es del todo aplicable: al menos se podría obtener un sentido de orden de magnitud de dónde debería estar el resultado. En este ejemplo (de comparación de medias), una prueba t de Student suele dar un buen resultado de todos modos:
t.test(treatment, control)
Esta arquitectura se ilustra en una situación más compleja, con el trabajo R
código, en Comprobar si las variables siguen la misma distribución .
Ejemplo
Como prueba, generé $10$ valores "de control" normalmente distribuidos de una distribución con media $0$ y $20$ valores de "tratamiento" normalmente distribuidos a partir de una distribución con media $1.5$ .
set.seed(17)
control <- rnorm(10)
treatment <- rnorm(20, 1.5)
Después de utilizar el código precedente para realizar una prueba de permutación, grafiqué la muestra de la distribución de la permutación junto con una línea roja vertical para marcar la estadística real:
h <- hist(c(z, sim), plot=FALSE)
hist(sim, breaks=h$breaks)
abline(v = stat(control, treatment), col="Red")
El cálculo del límite de confianza del binomio dio como resultado
PointEst Lower Upper
0 0 0.0003688199
En otras palabras, el estimado El valor p fue exactamente cero con un intervalo de confianza (por defecto 95%) de $0$ a $0.00037$ . El test t de Student informa de un valor p de 3.16e-05
que es consistente con esto. Esto apoya nuestra comprensión más matizada de que un valor p estimado de cero en este caso corresponde a un valor p muy pequeño que podemos considerar legítimamente como inferior a $0.00037$ . Esa información, aunque incierta, suele bastar para llegar a una conclusión definitiva sobre la prueba de hipótesis (porque $0.00037$ está muy por debajo de los umbrales comunes de $0.05$ , $0.01$ o $0.001$ ).
Comentarios
Cuando $k$ de $N$ en la muestra de la distribución de la permutación se consideran "extremos", entonces ambos $k/N$ y $(k+1)/(N+1)$ son estimaciones razonables del verdadero valor p. (Otras estimaciones también son razonables.) Normalmente hay pocas razones para preferir una a la otra. Si conducen a decisiones diferentes, eso significa $N$ es demasiado pequeño. Tome una muestra más grande de la distribución de la permutación en lugar de confundir la forma en que se estima el valor p.
Si se necesita una mayor precisión en la estimación, sólo hay que ejecutar la prueba de permutación por más tiempo. Debido a que los anchos de los intervalos de confianza normalmente se escalan de forma inversamente proporcional a la La raíz cuadrada del tamaño de la muestra, para mejorar el intervalo de confianza por un factor de $10$ Corrí $10^2=100$ veces más permutaciones. Esta vez el valor p estimado fue $0.000005$ (cinco de los resultados de la permutación estaban al menos tan lejos de cero como la estadística real) con un intervalo de confianza de $1.6$ a través de $11.7$ partes por millón: un poco más pequeño que el test de Student t reportado. Aunque los datos se generaron con generadores de números aleatorios normales, lo que justificaría el uso de la prueba t de Student, los resultados de la prueba de permutación difieren de los resultados de la prueba t de Student porque las distribuciones dentro de cada grupo de observaciones no son perfectamente normales.