¿Cómo realizar un ANOVA mixto de 4 por 4 con contrastes entre y dentro de los sujetos usando R?

11

Usuario principiante de R aquí luchando con un ANOVA de medidas repetidas.

Tengo un conjunto de datos que consiste en uno entre el factor de sujetos con 4 niveles (codificado en una sola variable llamada 'grupos') y uno dentro del factor de sujetos con 4 niveles (codificado en cuatro variables separadas 'DV1', 'DV2', 'DV3 ',' DV4 ').

Tengo los siguientes objetivos:

  1. Ejecute un ANOVA de medidas repetidas en general.
  2. Compare grupos utilizando contrastes personalizados (como en un comando LMATRIX en SPSS).
  3. Compare diferentes niveles de DV utilizando contrastes personalizados (como en un comando MMATRIX en SPSS).
  4. Haga una combinación de 2) y 3) simultáneamente, así que estoy comparando solo ciertos grupos en ciertos niveles del factor dentro de los sujetos.
  5. Ejecute un conjunto de contrastes que NO sumen cero.

Sé que puedo hacer esto en SPSS sin mucho problema, pero no puedo tener una idea clara de cómo hacerlo en R. He visto cómo partes de esto podrían funcionar en diferentes paquetes, pero no lo he hecho. visto hasta ahora cómo esto podría funcionar dentro de un procedimiento o un conjunto de procedimientos relacionados en R.

aquadhere
fuente

Respuestas:

18

Un bosquejo de una solución (para otra, ver más abajo):

  1. Los datos deben estar en formato largo (es decir, en valor por fila) en lugar de en formato ancho como en SPSS (es decir, un tema por fila), ver el paquete de remodelación, o ?reshape. Eso incluye que debe haber una variable que indique el identificador del sujeto (es decir, la identificación del sujeto).
  2. Todos los factores (incluido el identificador de sujeto) deben ser de factor de clase (ejecutar stren su marco de datos para verificar esto). Si no haces esto, tus resultados serán incorrectos.
  3. Si desea obtener sumas de cuadrados de tipo III, configure los contrastes predeterminados para efectuar la codificación:
    options(contrasts=c("contr.sum","contr.poly"))
  4. Especifique el modelo deseado con lmedel nlmepaquete (instale y cargue el paquete antes de las manos a través de install.packages("nlme")y library(nlme)) utilizando una estructura de correlación simétrica compundida. Vea la respuesta y especialmente mi comentario a la respuesta aceptada a esta pregunta. En su caso, podría ser algo así (si hubiera proporcionado datos de muestra, lo cual es muy recomendable, habría recibido el código correcto):
    my.anova <- lme(dv ~ group*within, data = your.df, random = ~1|id, correlation = corCompSymm(form = ~1|id))
  5. Use la anovafunción genérica para obtener la tabla anova (ver ?anova.lme):
    anova(my.anova)
    Para obtener sumas de cuadrados de tipo III, use el anovacomando con el argumento typeestablecido en "marginal"(esto solo funciona si los contrastes se establecen en la codificación de efectos, vea el punto 3):
    anova(my.anova, type = "marginal")
  6. El objeto de tipo ajustado lmeahora permite diversas funciones para realizar contrastes. La solución más flexible (pero bastante desagradable) es el Largumento en una llamada a anova.lme(ver de nuevo ?anova.lme).
    Otras soluciones también requieren un lmeobjeto ajustado como argumento:
    también es muy flexible la estimablefunción del paquete gmodels . Este paquete también ofrece la fit.contrastsfunción.
    El paquete multcomp permite contrastes usando el ajuste de error alfa (pero solo puede realizar contrastes usando uno de sus factores), usando la glhtfunción
    Un enfoque nuevo y prometedor es el paquete de contraste , sin embargo, hasta ahora no parece ofrecer todos los contrastes posibles.

Una solución alternativa es utilizar ANOVA estándar mediante la combinación de afexy lsmeanscomo se describe en la afexviñeta .

Henrik
fuente
(+1) Excelente y muy instructiva respuesta. Esperando la publicación del blog ...
chl
?anova.lmeno funciona para mí y lo methods(anova)enumera como una función no visible.
John
@John ¿Cargaste nlmeantes? Si no, corre library(nlme), entonces debería funcionar. Si todavía no funciona, install.packages("nlme")primero.
Henrik
ah ... aparentemente no, solo lme4
John
@ Henrick, puedo ir al paso 5, pero no puedo establecer contrastes que comparen factores específicos entre sujetos en niveles de factores específicos dentro del sujeto. Toda la documentación en línea que he visto tiene que ver con probar diferencias en diferentes niveles de factores entre sujetos. ¿Tienes algún código de ejemplo? Puedo esperar la publicación del blog si la vas a cubrir allí.
aquadhere