7 votos

¿Hay una manera de especificar un modelo de tiempo con más de un factor dentro de los sujetos?

Los datos

Supongamos que tenemos un conjunto de datos d con dos factores entre-sujetos (es decir, grupos), group y condition, y dos en el de-factores de tema (es decir, de medidas repetidas de los factores), topic y problem (he subido los datos a pastebin, por lo que todo el mundo debería ser capaz de obtener de ella):

> d <- read.table(url("http://pastebin.com/raw.php?i=4hRFyaRj"), colClasses = c(rep("factor", 6), "numeric"))
> str(d)
'data.frame':   2928 obs. of  6 variables:
  $ code     : Factor w/ 183 levels "A03U","A08C",..: 1 1 1 1 1 1 1 1 1 1 ...
  $ group    : Factor w/ 2 levels "control","experimental": 2 2 2 2 2 2 2 2 2 2 ...
  $ condition: Factor w/ 3 levels "alternatives",..: 3 3 3 3 3 3 3 3 3 3 ...
  $ topic    : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 2 2 2 2 3 3 ...
  $ problem  : Factor w/ 4 levels "AC","DA","MP",..: 3 4 1 2 3 4 1 2 3 4 ...
  $ mean     : num  94.5 94.5 86.5 84.5 80 46.5 73.5 43.5 51 39 ...

Los datos de un experimento conductual en el que los participantes en seis grupos (2 niveles de group veces 3 niveles de condition) ha trabajado en 16 de tareas (para cada uno de los 4 topics 4 diferentes problems). La asignación de los participantes a grupo/condición fue completamente al azar. Presentación de tareas fue al azar, en la medida en que el problema fue bloqueado dentro del tema (es decir, para cada tema todos los problemas donde se presentan de forma secuencial), pero el fin del problema y el tema fue al azar.
Actualización: El factor de identificación del participante (en el que el tema y el problema son anidados) code.

El Problema

Cómo puedo colocar este conjunto de datos utilizando la lme?
(Nota al margen: yo también considerar el uso de lme4, pero yo soy una especie de miedo a no tener los valores de p, si hay algo fácil de digerir como los valores de p, yo también consideraría lme4 una opción).

Hasta ahora me las arreglé para adaptarse a un lme modelo con sólo uno de sujeto factor, pero no dos (ver más abajo).

Lo he intentado

Me puede caber un lme modelo si tengo sólo uno de sujeto factor:

require(nlme)
 m1 <- lme(mean ~ condition*group*problem, random = ~1|code/problem, 
           data = d, subset = topic == "1")

anova(m1)
                        numDF denDF F-value p-value
(Intercept)                 1   531   12101  <.0001
condition                   2   177      31  <.0001
group                       1   177       2  0.2178
problem                     3   531      35  <.0001
condition:group             2   177       1  0.3672
condition:problem           6   531      24  <.0001
group:problem               3   531       1  0.2180
condition:group:problem     6   531       2  0.0281

Este (especialmente el df) muy bien se corresponden con los resultados de un estándar de ANOVA (utilizando ez):

require(ez)
ezANOVA(subset(d, topic == "1"), dv = .(mean), wid = .(code), between = .(condition, group), within = .(problem))$ANOVA

Warning: Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
                   Effect DFn DFd     F                             p p<.05     ges
2               condition   2 177 30.69 0.000000000003611248905859672     * 0.13079
3                   group   1 177  1.53 0.217821969825403999321267179       0.00374
5                 problem   3 531 34.85 0.000000000000000000014254103     * 0.10028
4         condition:group   2 177  1.01 0.367225806638525886782531416       0.00492
6       condition:problem   6 531 24.40 0.000000000000000000000000142     * 0.13503
7           group:problem   3 531  1.48 0.217959293081550348203379031       0.00472
8 condition:group:problem   6 531  2.38 0.028119961573665430004664856     * 0.01499

Tratando de adaptarse a este tipo de datos con dos de sujeto factores en lme falla (ya sea por código o por dfs):

m2 <- lme(mean ~ condition*group*problem*topic, random = ~1|code/(problem*topic), data = d)
# fails: Error in getGroups.data.frame(dataMix, groups) : 
#  Invalid formula for groups

m3 <- lme(mean ~ condition*group*problem*topic, random = ~1|code/problem/topic, data = d)
# the next model takes some time (probably already an indicator, that it is the wrong model)
# and produces wrong denominator df!

# with both factors as ANOVA
m4 <- ezANOVA(d, dv = .(mean), wid = .(code), between = .(condition, group), within = .(problem, topic))

#effects are the same
all(row.names(anova(m3))[-1] == m4$ANOVA$Effect)

#denominator dfs are not:
anova(m3)$denDF[-1] == m4$ANOVA$DFd

# only for effects with topic:
row.names(anova(m3))[-1][!(anova(m3)$denDF[-1] == m4$ANOVA$DFd)]

ACTUALIZACIÓN: Como la precisión o error de anidación es poco claro yo aquí proporcionar el equivalente aov de llamadas (este es el "estándar" de la modelo a través de la aov), lo cual coincide con los resultados de ezANOVA. La crítica término de error es Error(code/(problem*topic)):

m5 <- aov(mean ~ (condition*group*problem*topic) + Error(code/(problem*topic)), d)
summary(m5)

1voto

Anthony Cramp Puntos 126

He encontrado una respuesta a mi pregunta en este hilo: ANOVA de medidas Repetidas con lme en R para los dos-factores de tema (de alguna manera este hilo ya era uno de mis favoritos, me debe haber olvidado de él). La especificación es un poco torpe.

m6 <- lme(mean ~ condition*group*problem*topic, 
   random = list(code=pdBlocked(list(~1, pdIdent(~problem-1), pdIdent(~topic-1)))), data = d)
anova(m6)

Sin embargo, el denominador dfs son todavía mal, como se señaló en el hilo y aparente en las comparaciones entre el ANOVA y lme dfs.

data.frame(effect = rownames(anova(m6)), denDf= anova(m6)$denDF)

m4$ANOVA[,c("Effect", "DFd")]

Mientras que no hay otras ideas, creo que voy a necesitar para hacer el análisis en lme4, para que me duraran necesidad de publicar otra pregunta.

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