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

9

Las pruebas de permutación son pruebas de significación basadas en muestras de permutación extraídas al azar de los datos originales. Las muestras de permutación se extraen sin reemplazo, en contraste con las muestras de bootstrap, que se extraen con reemplazo. Aquí hay 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 de población específicas como la normalidad. Se aplican a una variedad de estadísticas, no solo a estadísticas 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 usan 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 de arranque en lugar del muestreo de permutación.

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

EDITAR

Después de buscar en Google, encontré esta lectura interesante .

George Dontas
fuente

Respuestas:

7

Está bien usar el muestreo de permutación. Realmente depende de una serie de factores. Si sus permutaciones son un número relativamente bajo, entonces su estimación de su intervalo de confianza no es tan buena con las permutaciones. Sus permutaciones están en un área gris y probablemente estén bien.

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

Ya has hecho la mayor parte de esto en tu ejemplo. La diferencia es de 462 artículos de largo. Por lo tanto, necesita los cortes inferiores del 2.5% y del 2.5% superior (aproximadamente 11 elementos en cada extremo).

Usando su código de antes ...

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

De la mano, diría que 462 es un poco bajo, pero encontrará un arranque a 10,000 que sale con puntajes que son poco diferentes (probablemente más cerca de la media).

Pensé que también agregaría un código simple que requiera 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)
Juan
fuente
Gracias. ¿Está bien generar las muestras usando sampley replace=TRUE? ¿Hay alguna razón para usar un paquete como boot?
George Dontas
Por lo general, se realiza con reemplazo, por lo que desea establecerlo en VERDADERO. En cuanto a por qué ... el paquete está optimizado, por lo que debería funcionar más rápido ... nunca lo cronometró. Eso puede ser un problema si configura R grande. Y, como puede ver, el código es agradable y conciso. También tiene muchas características que no obtendrías fácilmente.
John
boot.ci devuelve el intervalo de confianza. ¿Hay alguna función (de arranque) que proporcione el valor p? (como la proporción del número de diferencias al menos tan alto como el observado, sobre el número total de muestras generadas)
George Dontas
ok, encontré una manera de conseguirlo:sum(b$t>=b$t0)/b$R
George Dontas
@ gd047: tenga en cuenta que este es un valor p unilateral que está calculando.
Joris Meys
4

Como una prueba de permutación es una prueba exacta , le da un valor p exacto. Arrancar una prueba de permutación no tiene sentido.

Además de eso, determinar un intervalo de confianza alrededor de una estadística de prueba tampoco tiene sentido, ya que se calcula en función de su muestra y no de una estimación. Usted determina los intervalos de confianza en torno a estimaciones como medias y me gusta, pero no alrededor de estadísticas de prueba.

Las pruebas de permutación no deben usarse en conjuntos de datos que sean tan grandes que ya no pueda calcular todas las permutaciones posibles. Si ese es el caso, utilice un procedimiento de arranque para determinar el límite para la estadística de prueba que utiliza. Pero, de nuevo, esto tiene poco que ver con un intervalo de confianza del 95%.

Un ejemplo: utilizo aquí la estadística T clásica, pero utilizo un enfoque simple de arranque para el cálculo de la distribución empírica de mi estadística. Basado en eso, 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 2 lados solo funciona para distribuciones simétricas. Las distribuciones no simétricas generalmente solo se prueban de un lado.

EDITAR:

OK, entendí mal la pregunta. Si desea calcular un intervalo de confianza en la estimación de la diferencia, puede usar el código mencionado aquí para el arranque dentro de cada muestra. Eso sí, esta es una estimación sesgada: generalmente esto da un IC que es demasiado pequeño. También vea el ejemplo dado allí como una razón por la que tiene que usar un enfoque diferente para el intervalo de confianza y el valor p.

Joris Meys
fuente
1
¿Puede dar una explicación de por qué las pruebas de permutación no deben usarse en conjuntos de datos que no puede calcular todas las permutaciones posibles?
Andy W
@Andy W: Primero defina "prueba de permutación". Para mí, las pruebas de permutación son pruebas exactas, que utilizan todas las permutación posibles. Eso es imposible en conjuntos de datos más grandes. Las "pruebas de permutación aproximadas" son, de hecho, el método simple de Monte Carlo, y deben abordarse de esa manera. Además de eso, el teorema del límite central asegura en la mayoría de los casos que las suposiciones con respecto a la distribución de las estadísticas de prueba se cumplen cuando se utilizan conjuntos de datos grandes. En 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 agregar ningún valor significativo. my2cents
Joris Meys
No dije nada como arrancar una prueba de permutación. Entré en esta pregunta después de leer el último párrafo de [SECCIÓN 14.5 | Resumen], en el pdf vinculado.
George Dontas el
@ gd047 Entonces he leído mal tu pregunta. Pero realmente debe mantener los intervalos de confianza y los valores p estrictamente separados. El intervalo de confianza se estima en función del bootstrapping dentro de cada muestra (aunque está sesgado por definición), la prueba de permutación se realiza por permutaciones en todo el conjunto de datos. Esas son dos cosas completamente diferentes.
Joris Meys
@Kevin: El código estaba bien. Lea el código nuevamente: se x[6:11]refiere al argumento xde la función anónima dentro de la aplicación. Puede ser confuso, pero su edición dio resultados muy incorrectos. Comente sobre lo que cree que debería ser antes de editar el código. Me ahorra una reversión. Para evitar más confusión, cambié eso xai
Joris Meys
0

Del código de Joris Meys en las respuestas, pero con modificaciones para permitir que se aplique en más de una situación:

Intenté editar el otro pero no tuve tiempo de terminar y por alguna razón no puedo comentar (tal vez porque esta 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
Kevin
fuente