¿Una no-paramétrica de medidas repetidas Anova multidireccional en R?

16

La siguiente pregunta es uno de esos santos griales para mí desde hace un tiempo, espero que alguien pueda ofrecer un buen consejo.

Deseo realizar una anova multiway de medidas repetidas no paramétricas utilizando R.

He estado haciendo algunas búsquedas y lecturas en línea durante algún tiempo, y hasta ahora pude encontrar soluciones solo para algunos de los casos: prueba de Friedman para medidas repetidas no paramétricas unidireccionales anova, regresión ordinal con la función Anova de {car} para funciones multiparamétricas no paramétricas anova, y así sucesivamente. Las soluciones parciales NO son lo que estoy buscando en este hilo de preguntas. He resumido mis hallazgos hasta ahora en una publicación que publiqué hace algún tiempo (titulada: ANOVA de medidas repetidas con R (funciones y tutoriales) , en caso de que ayude a alguien)


Si lo que leo en línea es cierto, esta tarea podría lograrse utilizando un modelo mixto de regresión ordinal (también conocido como: Modelo de probabilidades proporcionales).

Encontré dos paquetes que parecen relevantes, pero no pude encontrar ninguna viñeta sobre el tema:

Al ser nuevo en el tema, esperaba algunas instrucciones de la gente de aquí.

¿Hay tutoriales / lecturas sugeridas sobre el tema? Aún mejor, ¿alguien puede sugerir un código de ejemplo simple sobre cómo ejecutar y analizar esto en R (por ejemplo: "medidas repetidas no paramétricas de múltiples vías anova")?

Tal Galili
fuente
Tal, ¿puedo preguntar si encontraste una solución para esto? Tengo el mismo problema, y ​​las respuestas a continuación pueden ser útiles para ayudar a encontrar una respuesta, pero en realidad no proporcionan una respuesta definitiva. Tengo 9 DV ordinales y 2 puntos de tiempo, y estoy buscando la misma prueba que desea realizar.
Torvon
1
Hola torvon Nunca he encontrado una solución. Supongo que las pruebas de permutación serán la ruta más segura, pero nunca tuve tiempo para sentarme y hacer que funcione. Si lo haces, vuelve a publicar tu respuesta. Saludos, T
Tal Galili
Gracias por tu pronta respuesta. Tendré que resolver esto y te lo haré saber.
Torvon

Respuestas:

8

El paquete ez , del cual soy el autor, tiene una función llamada ezPerm () que calcula una prueba de permutación, pero probablemente no hace las interacciones correctamente (la documentación admite tanto). La última versión tiene una función llamada ezBoot (), que le permite realizar un remuestreo de arranque que tiene en cuenta las medidas repetidas (mediante el remuestreo de sujetos, luego dentro de los sujetos), ya sea utilizando medios celulares tradicionales como el estadístico de predicción o utilizando modelos de efectos mixtos para hacer predicciones para cada celda en el diseño. Todavía no estoy seguro de cuán "no paramétricos" son los CI de arranque de las predicciones del modelo de efectos mixtos; mi intuición es que podrían considerarse razonablemente no paramétricos, pero mi confianza en esta área es baja dado que todavía estoy aprendiendo sobre modelos de efectos mixtos.

Mike Lawrence
fuente
Hola mike. Gracias por la respuesta y por su paquete, ¡es realmente genial!
Tal Galili el
@ Mike, su paquete parece ser el único que funciona para diseños mixtos de múltiples factores. La aovpalternativa, del lmpermpaquete huérfano , produce grandes variaciones para los valores p, vea esto . Tengo algunas preguntas: ¿Dónde puedo encontrar referencias bibliográficas para la implementación de ezPerm? ¿Cómo puedo interpretar que la función probablemente no hace las interacciones correctamente ? ¿Qué podría ser una prueba post-hoc en este caso? ¡Gracias!
toto_tico
@ Mike, ¿tendría ezPerm( data = DATA, dv = DV, wid = WID, within = interaction(A,B), perms = 1e3)sentido verificar si la interacción es significativa?
toto_tico
5

En caso de duda, bootstrap! Realmente, no conozco un procedimiento fijo para manejar tal escenario.

Bootstrapping es una forma generalmente aplicable de generar algunos parámetros de error a partir de los datos disponibles. En lugar de confiar en los supuestos paramétricos típicos, los procedimientos de arranque aprovechan las características de la muestra para generar una distribución empírica con la que se pueden comparar sus estimaciones de muestra.

Google Scholar es oro ... se ha hecho antes ... al menos una vez.

Lunneborg, Clifford E .; Tousignant, James P .; 1985 "Bootstrap de Efron con aplicación al diseño de medidas repetidas". Investigación conductual multivariante; Abr85, vol. 20 Edición 2, p161, 18p

Brett
fuente
1
Gracias por el liderazgo Brett! Me pregunto si alguien tendrá que implementarlo ahora en R (supongo que no).
Tal Galili
1
Correcto. R tiene muchas rutinas para ayudar con bootstrap y otros métodos de aleatorización, pero no sé si encontrará algo específico para este problema.
Brett
Muy bonita primera oración. Espero que no tenga derechos de autor, porque planeo usarlo: D
gui11aume
0

Hay un "truco" mencionado en algunos foros y listas de correo. También lo encontré mencionado en el libro de Joop Hox "Análisis multinivel" (segunda edición, 2010), págs. 189.

La idea es: reformatee sus datos largos en un conjunto de datos largo y largo en el que cree un nuevo DV que incluya todas sus respuestas de DV, y use una variable de índice que contenga información sobre la naturaleza de los DV para predecir este resultado.

Supongamos que tiene 9 síntomas de depresión (ordinal), 2 puntos de medición y 300 sujetos. Entonces, si bien tiene 300 filas en su conjunto de datos normal, y en su conjunto de datos largo tendrá 600 filas, este nuevo conjunto de datos tendrá 9 (síntomas) x 2 (tiempo) x 300 (sujetos) filas.

Los nuevos "síntomas" de la variable DV ahora contienen la gravedad de los síntomas de los participantes con 9 síntomas, las variables "índice" contienen la información sobre la naturaleza del síntoma (1 a 9), y luego están las dos variables "tiempo" y " ID de usuario ".

Ahora puede usar el ordinalpaquete para ejecutar esto.

data<-read.csv("data_long_long.csv", head=T)

data$symptoms <- factor(data$symptoms)
data$time <- factor(data$time)
data$index <-factor(data$index)

m1<-clmm2(symptoms ~ index+time, random=UserID, data = data, Hess=TRUE, nAGQ=10)

En mi caso específico, me interesaba saber si había una interacción significativa entre el índice y el tiempo, por lo que ejecuté un modelo adicional y los comparé:

m2<-clmm2(symptoms ~ index+time, random=UserID, data = data, Hess=TRUE, nAGQ=10)
anova(m1,m2)

CLMM2 usa un modelo de intercepción aleatoria (que yo sepa, el paquete ordinalno tiene pendientes aleatorias), si no lo hace para un modelo de intercepción aleatoria, puede ejecutar los modelos usando CLM, por ejemplo:

m3<-clm(symptoms ~ index+time, data = data)
Torvon
fuente
1
no son m1 y m2 exactamente iguales, tal vez quisiste decir clmm2(symptoms ~ index*time, random=UserID, data = data, Hess=TRUE, nAGQ=10) anova(m1,m2). ¿Sabes por casualidad cómo expresar esto con la nueva función clmm? No estoy seguro de la notación.
toto_tico