16 votos

Valores P iguales a 0 en la prueba de permutación

Tengo dos conjuntos de datos y me gustaría saber si son significativamente diferentes o no (esto viene de " ¿Dos grupos son significativamente diferentes? Prueba para usar ").

Decidí usar una prueba de permutación, haciendo lo siguiente en R:

permutation.test <- function(coding, lncrna) {
    coding <- coding[,1] # dataset1
    lncrna <- lncrna[,1] # dataset2

    ### Under null hyphotesis, both datasets would be the same. So:
    d <- c(coding, lncrna)

    # Observed difference
    diff.observed = mean(coding) - mean(lncrna)
    number_of_permutations = 5000
    diff.random = NULL

    for (i in 1:number_of_permutations) {
        # Sample from the combined dataset
        a.random = sample (d, length(coding), TRUE)
        b.random = sample (d, length(lncrna), TRUE)
        # Null (permuated) difference
        diff.random[i] = mean(b.random) - mean(a.random)
    }

    # P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
    pvalue = sum(abs(diff.random) >= abs(diff.observed)) / number_of_permutations
    pvalue
}

Sin embargo, los valores p no deberían ser 0 según este documento: http://www.statsci.org/smyth/pubs/permp.pdf

¿Qué me recomienda hacer? Es esta forma de calcular el valor p:

pvalue = sum(abs(diff.random) >= abs(diff.observed)) / number_of_permutations

una buena manera? ¿O es mejor hacer lo siguiente?

pvalue = sum(abs(diff.random) >= abs(diff.observed)) + 1 / number_of_permutations + 1

18voto

jldugger Puntos 7490

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")

Figure

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.

14voto

Dado que los valores p estimados se utilizan para decidir si se rechaza la hipótesis nula, es importante considerar cómo la elección del estimador afecta a la probabilidad de un falso rechazo. El citado trabajo de Smyth & Phipson's señala que el estimador no sesgado ( $\frac{B}{M}$ ) no controla correctamente la tasa de errores de tipo I. En cambio, ( $\frac{B+1}{M+1}$ ) es un estimador válido (pero conservador) del valor p - no conduce a un exceso de rechazo de lo nulo.

(B es el número de permutaciones aleatorias en las que se obtiene una estadística mayor o igual que la observada y M es el número total de permutaciones aleatorias muestreadas).

Smyth & Phipson también demuestran que la invalidez de ( $\frac{B}{M}$ ) se vuelve crítico en los entornos de comparaciones múltiples, en los que se derivan estimaciones muy pequeñas del valor p y luego se corrigen por multiplicación con un factor. Una estimación de un valor p cero bajo el nulo es especialmente desastrosa en estos entornos, ya que se mantiene cero independientemente de las correcciones aplicadas.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X