Discusión
Una prueba de permutación genera todas las permutaciones relevantes de un conjunto de datos, calcula un estadístico de prueba designado para cada permutación y evalúa el estadístico de prueba real en el contexto de la distribución de permutación resultante de las estadísticas. Una forma común de evaluarlo es informar la proporción de estadísticas que son (en cierto sentido) "tan o más extremas" que las estadísticas reales. Esto a menudo se llama un "valor p".
Debido a que el conjunto de datos real es una de esas permutaciones, su estadística necesariamente estará entre las que se encuentran dentro de la distribución de permutación. Por lo tanto, el valor p nunca puede ser cero.
A menos que el conjunto de datos sea muy pequeño (menos de aproximadamente 20-30 números totales, por lo general) o que el estadístico de prueba tenga una forma matemática particularmente agradable, no es factible generar todas las permutaciones. (Un ejemplo donde todas las permutaciones se generan aparece en prueba de permutación en R .) Por lo tanto implementaciones de ordenador de pruebas de permutación típicamente de muestra de la distribución de 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 dicha muestra es solo estimadores de las propiedades de la distribución de permutación. Es muy posible, y a menudo ocurre cuando los efectos son grandes, que el valor p estimado sea cero. No hay nada de malo en eso, pero inmediatamente plantea el problema hasta ahora descuidado de cuánto podría diferir el valor p estimado del correcto. Debido a que la distribución muestral de una proporción (como un valor p estimado) es binomial, esta incertidumbre se puede abordar con un intervalo de confianza binomial .
Arquitectura
Una implementación bien construida seguirá de cerca la discusión en todos los aspectos. Comenzaría con una rutina para calcular la estadística de prueba, como esta 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 este permite al llamante proporcionar la estadística de prueba como argumento. Comparará los primeros m
elementos de una matriz (presuntamente un grupo de referencia) con los elementos restantes (el grupo "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 (se supone que se almacenan en dos matrices) control
y treatment
) y luego buscando estadísticas para muchas permutaciones aleatorias independientes de los mismos:
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 calcule la estimación binomial del valor p y un intervalo de confianza para él. Un método utiliza el binconf
procedimiento incorporado 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 podría obtener un sentido de orden de magnitud de dónde debería estar el resultado. En este ejemplo (de medias de comparación), una prueba t de Student generalmente da un buen resultado de todos modos:
t.test(treatment, control)
Esta arquitectura se ilustra en una situación más compleja, con R
código de trabajo , en Probar si las variables siguen la misma distribución .
Ejemplo
100 0201,5 .
set.seed(17)
control <- rnorm(10)
treatment <- rnorm(20, 1.5)
Después de usar el código anterior para ejecutar una prueba de permutación, tracé la muestra de la distribución de 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 binomial resultó en
PointEst Lower Upper
0 0 0.0003688199
0 00.000373.16e-05
0.000370.000370,050,010.001 ).
Comentarios
knorte k / N( k + 1 ) / ( N+ 1 )norte
10102= 1000.0000051.611,7partes por millón: un poco más pequeño que la prueba t de Student informada. 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.
a.random
b.random
b.random
a.random
coding
lncrna