64 votos

¿Qué implementación de la prueba de permutación en R debe utilizarse en lugar de las pruebas t (emparejadas y no emparejadas)?

Tengo datos de un experimento que he analizado mediante pruebas t. La variable dependiente es de escala de intervalo y los datos son no apareados (es decir, 2 grupos) o apareados (es decir, dentro de los sujetos). Por ejemplo, (dentro de los sujetos):

x1 <- c(99, 99.5, 65, 100, 99, 99.5, 99, 99.5, 99.5, 57, 100, 99.5, 
        99.5, 99, 99, 99.5, 89.5, 99.5, 100, 99.5)
y1 <- c(99, 99.5, 99.5, 0, 50, 100, 99.5, 99.5, 0, 99.5, 99.5, 90, 
        80, 0, 99, 0, 74.5, 0, 100, 49.5)

Sin embargo, los datos no son normales, por lo que un revisor nos pidió que utilizáramos algo distinto a la prueba t. Sin embargo, como se puede ver fácilmente, los datos no sólo no están distribuidos normalmente, sino que las distribuciones no son iguales entre las condiciones: alt text

Por lo tanto, no se pueden utilizar las pruebas no paramétricas habituales, la prueba U de Mann-Whitney (no emparejada) y la prueba de Wilcoxon (emparejada), ya que requieren distribuciones iguales entre las condiciones. Por lo tanto, decidí que lo mejor sería un remuestreo o una prueba de permutación.

Ahora, estoy buscando una implementación en R de un equivalente basado en permutaciones de la prueba t, o cualquier otro consejo sobre qué hacer con los datos.

Sé que hay algunos paquetes de R que pueden hacer esto por mí (por ejemplo, coin, perm, exactRankTest, etc.), pero no sé cuál elegir. Así que, si alguien con experiencia en el uso de estas pruebas puede darme un empujón, sería genial.

ACTUALIZACIÓN: Sería ideal si pudiera proporcionar un ejemplo de cómo informar de los resultados de esta prueba.

54voto

ashwnacharya Puntos 3144

No debería importar mucho, ya que la estadística de la prueba siempre será la diferencia de medias (o algo equivalente). Las pequeñas diferencias pueden provenir de la implementación de los métodos de Monte-Carlo. Pruebe los tres paquetes con sus datos con una prueba unilateral para dos variables independientes:

DV <- c(x1, y1)
IV <- factor(rep(c("A", "B"), c(length(x1), length(y1))))
library(coin)                    # for oneway_test(), pvalue()
pvalue(oneway_test(DV ~ IV, alternative="greater", 
                   distribution=approximate(B=9999)))
[1] 0.00330033

library(perm)                    # for permTS()
permTS(DV ~ IV, alternative="greater", method="exact.mc", 
       control=permControl(nmc=10^4-1))$p.value
[1] 0.003

library(exactRankTests)          # for perm.test()
perm.test(DV ~ IV, paired=FALSE, alternative="greater", exact=TRUE)$p.value
[1] 0.003171822

Para comprobar el valor p exacto con un cálculo manual de todas las permutaciones, restringiré los datos a los 9 primeros valores.

x1 <- x1[1:9]
y1 <- y1[1:9]
DV <- c(x1, y1)
IV <- factor(rep(c("A", "B"), c(length(x1), length(y1))))
pvalue(oneway_test(DV ~ IV, alternative="greater", distribution="exact"))
[1] 0.0945907

permTS(DV ~ IV, alternative="greater", exact=TRUE)$p.value
[1] 0.0945907

# perm.test() gives different result due to rounding of input values
perm.test(DV ~ IV, paired=FALSE, alternative="greater", exact=TRUE)$p.value
[1] 0.1029412

# manual exact permutation test
idx  <- seq(along=DV)                 # indices to permute
idxA <- combn(idx, length(x1))        # all possibilities for different groups

# function to calculate difference in group means given index vector for group A
getDiffM <- function(x) { mean(DV[x]) - mean(DV[!(idx %in% x)]) }
resDM    <- apply(idxA, 2, getDiffM)  # difference in means for all permutations
diffM    <- mean(x1) - mean(y1)       # empirical differencen in group means

# p-value: proportion of group means at least as extreme as observed one
(pVal <- sum(resDM >= diffM) / length(resDM))
[1] 0.0945907

coin y exactRankTests son ambos del mismo autor, pero coin parece ser más general y extensa, también en cuanto a la documentación. exactRankTests ya no se desarrolla activamente. Por lo tanto, yo elegiría coin (también por funciones informativas como support() ), a menos que no le guste tratar con objetos S4.

EDIT: para dos variables dependientes, la sintaxis es

id <- factor(rep(1:length(x1), 2))    # factor for participant
pvalue(oneway_test(DV ~ IV | id, alternative="greater",
                   distribution=approximate(B=9999)))
[1] 0.00810081

0 votos

¡Gracias por su gran respuesta! Dos preguntas más: ¿Significa su segundo ejemplo que la moneda proporciona todas las permutaciones posibles y es una prueba exacta? ¿Hay algún beneficio de no proporcionar una prueba exacta en mi caso?

13 votos

(+1) No es de extrañar que la prueba t (no emparejada) arroje esencialmente el mismo valor p, 0,000349. A pesar de lo que dijo el revisor, la prueba t es aplicable a estos datos. La razón es que el distribuciones de muestreo de las medias son aproximadamente normales, aunque las distribuciones de los datos no lo sean. Además, como se puede ver en los resultados, la prueba t es más conservadora que la prueba de permutación. (Esto significa que un resultado significativo con la prueba t indica que es probable que la prueba de permutación también sea significativa).

2 votos

@Henrik Para determinadas situaciones (prueba elegida y complejidad numérica), coin puede, en efecto, calcular la distribución exacta de las permutaciones (sin recorrer realmente todas las permutaciones, hay algoritmos más elegantes que eso). Dada la elección, la distribución exacta parece preferible, pero la diferencia con una aproximación de Monte-Carlo con un número elevado de réplicas debería ser pequeña.

33voto

jerhinesmith Puntos 5425

Creo que es necesario hacer algunos comentarios.

1) Te animo a que pruebes con múltiples representaciones visuales de tus datos, porque pueden captar cosas que se pierden con (gráficos como) los histogramas, y también te recomiendo encarecidamente que los representes en ejes paralelos. En este caso, no creo que los histogramas hagan un buen trabajo para comunicar las características más destacadas de sus datos. Por ejemplo, eche un vistazo a los boxplots de lado a lado:

boxplot(x1, y1, names = c("x1", "y1"))

alt text

O incluso gráficos de bandas de lado a lado:

stripchart(c(x1,y1) ~ rep(1:2, each = 20), method = "jitter", group.names = c("x1","y1"), xlab = "")

alt text

¡Mira los centros, las extensiones y las formas de estos! Alrededor de tres cuartas partes de los $x1$ datos se sitúan muy por encima de la mediana del $y1$ datos. La difusión de $x1$ es minúsculo, mientras que la propagación de $y1$ es enorme. Ambos $x1$ y $y1$ están muy sesgados a la izquierda, pero de forma diferente. Por ejemplo, $y1$ tiene cinco (!) valores repetidos de cero.

2) No has explicado con mucho detalle de dónde proceden tus datos, ni cómo se han medido, pero esta información es muy importante a la hora de seleccionar un procedimiento estadístico. ¿Son sus dos muestras anteriores independientes? ¿Hay alguna razón para creer que las distribuciones marginales de las dos muestras deberían ser las mismas (excepto por una diferencia de ubicación, por ejemplo)? ¿Cuáles fueron las consideraciones antes al estudio que le llevó a buscar pruebas de una diferencia entre los dos grupos?

3) La prueba t no es apropiada para estos datos porque las distribuciones marginales son marcadamente no normales, con valores extremos en ambas muestras. Si lo desea, podría apelar al CLT (debido a su muestra de tamaño moderado) para utilizar una $z$ -(que sería similar a una prueba z para muestras grandes), pero dada la asimetría (en ambas variables) de sus datos no juzgaría muy convincente tal recurso. Claro, de todos modos se puede utilizar para calcular un $p$ -valor, pero ¿qué hace eso por ti? Si los supuestos no se cumplen, entonces un $p$ -El valor es sólo una estadística; no dice lo que usted (presumiblemente) quiere saber: si hay evidencia de que las dos muestras provienen de distribuciones diferentes.

4) Una prueba de permutación tampoco sería apropiada para estos datos. La única y a menudo olvidada suposición para las pruebas de permutación es que las dos muestras son intercambiable bajo la hipótesis nula. Eso significaría que tienen distribuciones marginales idénticas (bajo la nula). Pero estás en problemas, porque los gráficos sugieren que las distribuciones difieren tanto en ubicación como en escala (y también en forma). Por lo tanto, no se puede probar (válidamente) una diferencia en la ubicación porque las escalas son diferentes, y no se puede probar (válidamente) una diferencia en la escala porque las ubicaciones son diferentes. Uy. De nuevo, puedes hacer la prueba de todos modos y obtener un $p$ -valor, pero ¿y qué? ¿Qué has conseguido realmente?

5) En mi opinión, estos datos son un ejemplo perfecto (?) de que una imagen bien elegida vale más que 1000 pruebas de hipótesis. No necesitamos la estadística para distinguir entre un lápiz y un granero. La afirmación adecuada, en mi opinión, para estos datos sería "Estos datos muestran marcadas diferencias con respecto a la ubicación, la escala y la forma." Podrías seguir con estadísticas descriptivas (robustas) para cada una de ellas para cuantificar las diferencias, y explicar qué significan las diferencias en el contexto de tu estudio original.

6) Su revisor probablemente (y lamentablemente) va a insistir en algún tipo de $p$ -como condición previa a la publicación. Suspiro. Si fuera yo, dadas las diferencias con respecto a todo Probablemente utilizaría una prueba no paramétrica de Kolmogorov-Smirnov para escupir un $p$ -valor que demuestre que las distribuciones son diferentes, y luego proceder con las estadísticas descriptivas como arriba. Tendrías que añadir algo de ruido a las dos muestras para eliminar los empates. (Y, por supuesto, todo esto supone que tus muestras son independientes, lo cual no has declarado explícitamente).

Esta respuesta es mucho más larga de lo que pretendía en un principio. Lo siento.

0 votos

Tengo curiosidad por saber si consideras que lo siguiente es un enfoque cuasi-visualizado apropiado: estimaciones bootstrap para los momentos de los dos grupos (medias, varianzas y momentos superiores si lo deseas) y luego trazar estas estimaciones y sus intervalos de confianza, buscando el grado de superposición entre los grupos en cada momento. Esto le permite hablar de las diferencias potenciales a través de la variedad de características de la distribución. Si los datos están emparejados, calcule las puntuaciones de diferencia y haga un bootstrap de los momentos de esta distribución única. ¿Qué te parece?

2 votos

(+1) Buen análisis. Tienes toda la razón en que los resultados son obvios y no hace falta insistir con un valor p. Puede que seas un poco extremista en tu afirmación de (3), porque la prueba t no requiere datos distribuidos normalmente. Si te preocupa, existen ajustes para la asimetría (por ejemplo, la variante de Chen): podrías ver si el valor p de la prueba ajustada cambia la respuesta. Si no es así, es probable que esté bien. En esta situación particular, con estos datos (muy sesgados), la prueba t funciona bien.

0 votos

(+1) ¡Buena captura! Y muy buenos comentarios.

7voto

Anthony Cramp Puntos 126

Como esta pregunta ha vuelto a surgir, puedo añadir otra respuesta inspirada en una reciente entrada del blog vía R-Bloggers de Robert Kabacoff, el autor de Quick-R y R en acción utilizando el lmPerm paquete.

Sin embargo, este método produce resultados muy contrastados (y muy inestables) con el producido por el coin en la respuesta de @caracakl (el valor p del análisis intra-sujeto es 0.008 ). El análisis toma la preparación de datos de la respuesta de @caracal también:

x1 <- c(99, 99.5, 65, 100, 99, 99.5, 99, 99.5, 99.5, 57, 100, 99.5, 
        99.5, 99, 99, 99.5, 89.5, 99.5, 100, 99.5)
y1 <- c(99, 99.5, 99.5, 0, 50, 100, 99.5, 99.5, 0, 99.5, 99.5, 90, 
        80, 0, 99, 0, 74.5, 0, 100, 49.5)

DV <- c(x1, y1)
IV <- factor(rep(c("A", "B"), c(length(x1), length(y1))))
id <- factor(rep(1:length(x1), 2)) 

library(lmPerm)

summary(aovp( DV ~ IV + Error(id)))

produce:

> summary(aovp( DV ~ IV + Error(id)))
[1] "Settings:  unique SS "

Error: id
Component 1 :
          Df R Sum Sq R Mean Sq
Residuals 19    15946       839

Error: Within
Component 1 :
          Df R Sum Sq R Mean Sq Iter Pr(Prob)  
IV         1     7924      7924 1004    0.091 .
Residuals 19    21124      1112                
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Si se ejecuta esto varias veces, los valores p saltan entre ~.05 y ~.1.

Aunque se trata de una respuesta a la pregunta, permítame plantear una pregunta al final (puedo trasladar esto a una nueva pregunta si lo desea):
¿Alguna idea de por qué este análisis es tan inestable y produce unos valores p tan divergentes a los del análisis de la moneda? ¿He hecho algo mal?

2 votos

Tal vez sea mejor plantear esto como una pregunta separada, si realmente es una pregunta que quieres que se responda, en lugar de otra posible solución que quieres enumerar con el resto. Me he dado cuenta de que usted especifica un estrato de error, pero @caracal no lo hace; esa sería mi primera conjetura sobre la diferencia entre este resultado y el suyo. Además, al simular, los valores suelen saltar; para la reproducibilidad, se especifica la semilla, por ejemplo set.seed(1) para una mayor precisión en la estimación del MC, se aumenta el número de iteraciones; no estoy seguro de que ninguna de ellas sea la respuesta "correcta" a tu pregunta, pero probablemente sean relevantes.

2 votos

Una vez más, sugiero que se comparen los resultados del MC con los cálculos manuales utilizando la prueba de permutación completa (re-aleatorización). Véase el código para su ejemplo para comparar oneway_anova() (siempre cerca del resultado correcto) y aovp() (normalmente muy lejos del resultado correcto). No sé por qué aovp() da resultados muy variados, pero al menos para este caso aquí son inverosímiles. @gung la última llamada a oneway_test(DV ~ IV | id, ...) en mi respuesta original especificaba los estratos de error para el caso dependiente (sintaxis diferente a la utilizada por aov() ).

0 votos

@caracal, tienes razón. No miré el último bloque de código después de la edición. Estaba mirando el bloque de código superior un descuido por mi parte.

7voto

Andrew Taylor Puntos 31

Mis comentarios no se refieren a la aplicación de la prueba de permutación, sino a las cuestiones más generales que plantean estos datos y el debate al respecto, en particular el post de G. Jay Kerns.

En realidad, las dos distribuciones me parecen bastante similares, EXCEPTO el grupo de 0 en Y1, que es muy diferente de las demás observaciones de esa muestra (la siguiente más pequeña es de unos 50 en la escala 0-100), así como todas las de X1. Yo investigaría primero si hay algo diferente en esas observaciones.

En segundo lugar, suponiendo que esos 0s pertenezcan al análisis, decir que la prueba de permutación no es válida porque las distribuciones parecen ser diferentes es una pregunta. Si la nula fuera cierta (las distribuciones son idénticas), ¿podrías (con una probabilidad razonable) obtener distribuciones que parezcan tan diferentes como estas dos? Responder a eso es el objetivo de la prueba, ¿no? Tal vez en este caso algunos consideren que la respuesta es obvia sin hacer la prueba, pero con estas distribuciones tan pequeñas y peculiares, no creo que yo lo haga.

1 votos

Parece que esto debería ser uno o más comentarios, no una respuesta. Si haces clic en el pequeño botón gris de "añadir comentario", puedes colocar tus ideas en la conversación debajo de la pregunta o de una respuesta concreta, que es donde deben estar. Usted hace puntos sustanciales aquí, pero no está claro que este no sea el lugar apropiado para ellos.

1 votos

@gung Hace falta un poco de reputación para poder publicar un comentario ;-).

4 votos

Este es un buen punto sobre la aplicabilidad de la prueba de permutación. En cuanto a la obviedad de la diferencia entre los grupos, quizá sea una cuestión de experiencia :-). Por intuición, ya que es evidente que la diferencia clave está en los valores pequeños, podríamos preguntar sobre las posibilidades de que los siete más pequeños de un conjunto de 40 valores caigan en un subconjunto aleatorio de 20. Aproximadamente, cada uno tiene una probabilidad de 1/2 de estar en el subconjunto o en su complemento, por lo que los siete estarán en el mismo grupo con probabilidades en torno a $2(1/2)^7 \approx .01$ . Esta aritmética mental proporciona una rápida orientación inicial.

2voto

Matt Mitchell Puntos 17005

¿Son estas puntuaciones proporciones? Si es así, ciertamente no deberías utilizar una prueba paramétrica gaussiana, y aunque podrías seguir adelante con un enfoque no paramétrico como una prueba de permutación o un bootstrap de las medias, sugeriría que obtendrías más poder estadístico empleando un enfoque paramétrico no gaussiano adecuado. Específicamente, cada vez que pueda calcular una medida de proporción dentro de una unidad de interés (por ejemplo, un participante en un experimento), puede y probablemente debería utilizar un modelo de efectos mixtos que especifique las observaciones con un error distribuido binomialmente. Véase Dixon 2004 .

0 votos

Las puntuaciones no son proporciones, sino estimaciones de los participantes en una escala de 0 a 100 (los datos presentados son medias de estimaciones en varios ítems con esa escala).

0 votos

En ese caso, la vía tradicional parece ser la no paramétrica. Dicho esto, me he preguntado si estos datos de la escala podrían inferirse útilmente para derivar de un proceso binomial y, por tanto, analizarse como tal. Es decir, usted dice que cada puntuación es la media de varios ítems, y digamos que cada ítem es una escala de 10 puntos, en cuyo caso representaría una respuesta de, digamos, "8" como una serie de ensayos, 8 de los cuales tienen el valor 1 y dos el valor 0, todos etiquetados con la misma etiqueta en una variable "ítem". Con estos datos expandidos/binomializados, podría entonces calcular el modelo de efectos mixtos binomial.

0 votos

Siguiendo con mi comentario anterior, debo señalar que en los datos ampliados/binomiales, se podría modelar la variable "ítem" como un efecto fijo o aleatorio. Creo que me inclinaría por modelarla como un efecto fijo porque, presumiblemente, podría estar interesado no sólo en contabilizar sino también en evaluar las diferencias del ítem y cualquier posible interacción entre el ítem y otras variables predictoras.

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