No soy un experto, así que perdóname si parte de la terminología es un poco torpe. Estaremos encantados de proporcionar más información cuando sea necesario.
Tengo dos vectores de 50 valores numéricos emparejados en R. Quiero realizar una prueba de aleatorización o permutación de dos colas para determinar si sus diferencias se deben al azar o no.
Una prueba de permutación (también llamada prueba de aleatorización, prueba de aleatorización o prueba exacta) es un tipo de prueba de significación estadística en la que la distribución del estadístico de prueba bajo la hipótesis nula se obtiene calculando todos los valores posibles del estadístico de prueba bajo reordenamientos de las etiquetas en los puntos de datos observados.
Quiero hacer este tipo de prueba porque creo que las distribuciones de los valores en los vectores violan los supuestos de otras pruebas como la prueba t (por ejemplo, muchos de los valores numéricos en el vector son 0).
La permtest
función en la biblioteca BHH2 , casi hace lo que quiero, pero funciona en todas las permutaciones , lo que tomará demasiado tiempo. En cambio, quiero estimar el valor p, muestreando un gran número de posibles permutaciones. Eché un vistazo al paquete de monedas , pero nada allí parece hacer una prueba de permutación con muestreo de vectores numéricos emparejados.
Algunas búsquedas en Google me llevaron a este correo electrónico , lo que sugiere que la razón por la que no puedo encontrar un paquete para hacerlo es porque es una línea en R. Lamentablemente, no tengo suficiente experiencia con R para poder producir ese paquete. -transatlántico.
¿Existe algún paquete o método que realice una prueba de permutación emparejada de dos colas utilizando solo una muestra del espacio de permutación?
Si no, ¿alguien podría compartir un poco de código R para hacerlo?
fuente
coin
(entre varios otros) hace pruebas de aleatorización. Por ejemplo, vea la respuesta a esta pregunta (lea todo) . Si entiendo bien, los ejemplos cubren casos aproximados y exactos y cubren muestras independientes y dependientes.oneway_test(y ~ x | pairs, distribution=approximate(B=9999))
conlibrary(coin)
.Respuestas:
Aunque en los comentarios apunté al uso del
coin
paquete, creo que vale la pena ilustrar que una prueba de permutación / aleatorización es realmente bastante simple, así que lo he hecho.Aquí escribo un código R para hacer una prueba de aleatorización para una prueba de ubicación de una muestra. La prueba voltea aleatoriamente los signos en las diferencias y calcula la media; esto es equivalente a asignar aleatoriamente cada par de valores a los grupos x e y. El siguiente código podría hacerse significativamente más corto (podría hacerlo en dos líneas con bastante facilidad, o incluso en una si no le importara un código más lento).
Este código tarda unos segundos en mi máquina:
Eso es todo.
Tenga en cuenta que
rbinom(length(d),1,.5)*2-1)
da un signo aleatorio-1
o1
... es decir, aleatorio, por lo que cuando multiplicamos por cualquier conjunto de signosd
, es equivalente a asignar aleatoriamente+
o-
signos a las diferencias absolutas. [No importa con qué distribución de signosd
comience, ahorad
tendrá signos aleatorios.]Aquí, lo comparo con una prueba t en algunos datos inventados:
Cuando la prueba t es válida, generalmente proporciona un valor p muy similar a la prueba de permutación completamente enumerada, y un valor p simulado como el anterior (cuando el número de simulaciones es suficientemente grande) convergerá a ese segundo valor p.
Al número de repeticiones utilizadas anteriormente, un valor p de permutación real (es decir, de la enumeración completa) de 0.05 se estimará dentro de 0.001 (es decir, dará un valor p de aleatorización entre 0.049 y 0.051) aproximadamente el 85% del tiempo y dentro de 0.002 más del 99.5% del tiempo.
fuente
d
, porque así es como funciona una prueba de permutación de la diferencia de medias para datos emparejados. Ver nuevos comentarios adicionales después de ese fragmento de código.Aquí hay un código para realizar una prueba de permutación. Tengo datos allí, por ejemplo. x es la diferencia entre los dos vectores.
fuente