11 votos

¿Cómo se crea un intervalo de confianza para el parámetro de una prueba de permutación?

Las pruebas de permutación son pruebas de significación basadas en remuestreos de permutación extraídos al azar de los datos originales. Las remuestras de permutación se extraen sin reemplazo, a diferencia de las muestras bootstrap, que se extraen con reemplazo. En este caso un ejemplo que hice en R de una prueba de permutación simple. (Sus comentarios son bienvenidos)

Las pruebas de permutación tienen grandes ventajas. No requieren formas específicas de la población, como la normalidad. Se aplican a una gran variedad de estadísticas, no sólo a las que tienen una distribución simple bajo la hipótesis nula. Pueden dar valores p muy precisos, independientemente de la forma y el tamaño de la población (si se utilizan suficientes permutaciones).

También he leído que a menudo es útil dar un intervalo de confianza junto con una prueba, que se crea utilizando el remuestreo bootstrap en lugar del remuestreo de permutación.

¿Podría explicar (o simplemente dar el código R) cómo se construye un intervalo de confianza (es decir, para la diferencia entre las medias de las dos muestras en el ejemplo anterior)?

EDITAR

Después de buscar en Google he encontrado esta interesante lectura .

9voto

Está bien utilizar el remuestreo por permutación. En realidad, depende de varios factores. Si sus permutaciones son un número relativamente bajo, entonces la estimación de su intervalo de confianza no es tan grande con las permutaciones. Sus permutaciones están en una zona gris y probablemente estén bien.

La única diferencia con tu código anterior es que generarías tus muestras al azar en lugar de con permutaciones. Y, generarías más de ellas, digamos 1000 por ejemplo. Obtenga las puntuaciones de diferencia para sus 1000 réplicas de su experimento. Tome los puntos de corte para el medio 950 (95%). Ese es tu intervalo de confianza. Cae directamente del bootstrap.

Ya has hecho la mayor parte de esto en tu ejemplo. dif.treat tiene 462 elementos. Por lo tanto, necesita los cortes inferior del 2,5% y superior del 2,5% (unos 11 elementos en cada extremo).

Usando tu código de antes...

y <- sort(dif.treat)
ci.lo <- y[11]
ci.hi <- y[462-11]

A priori, diría que 462 es un poco bajo, pero verás que con un bootstrap a 10.000 se obtienen puntuaciones un poco diferentes (probablemente más cercanas a la media).

Pensé en añadir también un código sencillo que requiere la biblioteca de arranque (basado en su código anterior).

diff <- function(x,i) mean(x[i[6:11]]) - mean(x[i[1:5]])
b <- boot(total, diff, R = 1000)
boot.ci(b)

0 votos

Gracias. ¿Está bien generar las muestras usando sample y replace=TRUE ? ¿Hay alguna razón para utilizar un paquete como boot ?

0 votos

Normalmente se hace con el reemplazo, por lo que se debe establecer en TRUE. En cuanto a por qué... el paquete está optimizado por lo que debería correr más rápido.... nunca lo ha cronometrado. Eso puede ser un problema si se establece R grande. Y, como puedes ver, el código es agradable y conciso. También tiene un montón de características que no conseguirías fácilmente rodando por tu cuenta.

0 votos

Boot.ci devuelve el intervalo de confianza. ¿Existe alguna función (de arranque) que dé el valor p.? (como el cociente del número de diferencias al menos tan altas como la observada, sobre el número total de muestras generadas)

7voto

J Wynia Puntos 4679

Como una prueba de permutación es un exacto que le da un valor p exacto. Hacer una prueba de permutación por bootstrap no tiene sentido.

Además, determinar un intervalo de confianza en torno a una estadística de prueba tampoco tiene sentido, ya que se calcula en función de la muestra y no de una estimación. Los intervalos de confianza se determinan en torno a estimaciones como las medias y similares, pero no en torno a los estadísticos de prueba.

Las pruebas de permutación no deben utilizarse en conjuntos de datos tan grandes que no se puedan calcular todas las permutaciones posibles. Si ese es el caso, utilice un procedimiento bootstrap para determinar el punto de corte de la estadística de prueba que utilice. Pero, de nuevo, esto tiene poco que ver con un intervalo de confianza del 95%.

Un ejemplo: aquí utilizo el clásico estadístico T, pero utilizo un enfoque simple de bootstrapping para el cálculo de la distribución empírica de mi estadístico. A partir de ahí, calculo un valor p empírico:

x <- c(11.4,25.3,29.9,16.5,21.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)

t.sample <- t.test(x,y)$statistic
t.dist <- apply(
      replicate(1000,sample(c(x,y),11,replace=F)),2,
      function(i){t.test(i[1:5],i[6:11])$statistic})

# two sided testing
center <- mean(t.dist)
t.sample <-abs(t.sample-center)
t.dist <- abs(t.dist - center)
p.value <- sum( t.sample < t.dist ) / length(t.dist)
p.value

Tenga en cuenta que esta prueba de dos caras sólo funciona para distribuciones simétricas. Las distribuciones no simétricas normalmente sólo se prueban por un lado.

EDITAR :

Vale, he entendido mal la pregunta. Si quieres calcular un intervalo de confianza sobre la estimación de la diferencia, puedes utilizar el código mencionado aquí para el bootstrap dentro de cada muestra. Eso sí, se trata de una estimación sesgada: generalmente da un IC demasiado pequeño. Véase también el ejemplo que se da como razón por la que hay que utilizar un enfoque diferente para el intervalo de confianza y el valor p.

1 votos

¿Puede explicar por qué no se deben utilizar pruebas de permutación en conjuntos de datos en los que no se pueden calcular todas las permutaciones posibles?

0 votos

@Andy W : Primero defina "prueba de permutación". Para mí, las pruebas de permutación son pruebas exactas, que utilizan todas las permutaciones posibles. Eso es imposible en conjuntos de datos más grandes. Las "pruebas de permutación aproximadas" son, de hecho, el método de Monte Carlo más sencillo que existe, y deberían abordarse de esa manera. Además, el teorema del límite central garantiza en la mayoría de los casos que se cumplen los supuestos relativos a la distribución de los estadísticos de la prueba cuando se utilizan conjuntos de datos grandes. En las pruebas complejas, el uso de pruebas de permutación en grandes conjuntos de datos hace que los tiempos de cálculo sean insoportablemente largos sin añadir ningún valor significativo. my2cents

0 votos

Yo no he dicho nada de hacer un bootstrapping de una prueba de permutación. Llegué a esta pregunta después de leer el último párrafo de [SECCIÓN 14.5 | Resumen], en el pdf enlazado.

0voto

MichaelS Puntos 180

A partir del código de Joris Meys en las Respuestas, pero con una modificación para permitir que se aplique en más t que una sola situación:

Intenté editar el otro pero no me dio tiempo a terminar y por alguna razón no puedo comentar (quizás porque es una pregunta vieja).

x <- c(11.4,25.3,29.9,16.5,21.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)

t.sample <- t.test(x,y)$statistic

t.dist <- apply(
          replicate(1000,sample(c(x,y),length(c(x,y)),replace=F)), 2,
          function(i){t.test(i[1:length(x)],i[length(x)+1:length(c(x,y))])$statistic})

# two sided testing
center <- mean(t.dist)
t.sample <-abs(t.sample-center)
t.dist <- abs(t.dist - center)
p.value <- sum( t.sample < t.dist ) / length(t.dist)
p.value

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