Actualización de mayo de 2017 : Resulta que gran parte de lo que he escrito aquí es un poco injusto . Algunas actualizaciones se realizan a lo largo de la publicación.
Estoy de acuerdo con lo que ya ha dicho Ben Bolker (gracias por el agradecimiento afex::mixed()
), pero permítanme agregar algunas ideas más generales y específicas sobre este tema.
Concéntrese en los efectos fijos versus aleatorios y cómo informar los resultados.
Para el tipo de investigación experimental que se representa en el conjunto de datos de ejemplo de Jonathan Baron, la pregunta importante es si un factor manipulado tiene o no un efecto general. Por ejemplo, ¿encontramos un efecto principal general o interacción de Task
? Un punto importante es que en esos conjuntos de datos generalmente todos los factores están bajo control experimental completo y asignados aleatoriamente. En consecuencia, el foco de interés suele estar en los efectos fijos.
En contraste, los componentes de efectos aleatorios pueden verse como parámetros "molestos" que capturan la variación sistemática (es decir, las diferencias entre individuos en el tamaño del efecto) que no son necesariamente importantes para la pregunta principal. Desde este punto de vista, la sugerencia de utilizar la estructura máxima de efectos aleatorios como lo recomiendan Barr et al. Sigue algo natural. Es fácil imaginar que una manipulación experimental no afecta a todas las personas exactamente de la misma manera y queremos controlar esto. Por otro lado, el número de factores o niveles generalmente no es demasiado grande, por lo que el peligro de sobreajuste parece relativamente pequeño.
En consecuencia, seguiría la sugerencia de Barr et al. y especificar una estructura máxima de efectos aleatorios e informar las pruebas de los efectos fijos como mis resultados principales. Para probar los efectos fijos, también sugeriría usarlo, afex::mixed()
ya que informa las pruebas de efectos o factores (en lugar de la prueba de parámetros) y calcula esas pruebas de una manera bastante sensata (por ejemplo, usa la misma estructura de efectos aleatorios para todos los modelos en los que se elimina el efecto único, utiliza contrastes de suma a cero, ofrece diferentes métodos para calcular los valores p , ...).
¿Qué pasa con los datos de ejemplo?
El problema con los datos de ejemplo que proporcionó es que para este conjunto de datos, la estructura de efectos aleatorios máximos conduce a un modelo sobresaturado ya que solo hay un punto de datos por celda del diseño:
> with(df, table(Valence, Subject, Task))
, , Task = Cued
Subject
Valence Faye Jason Jim Ron Victor
Neg 1 1 1 1 1
Neu 1 1 1 1 1
Pos 1 1 1 1 1
, , Task = Free
Subject
Valence Faye Jason Jim Ron Victor
Neg 1 1 1 1 1
Neu 1 1 1 1 1
Pos 1 1 1 1 1
En consecuencia, se lmer
ahoga en la estructura máxima de efectos aleatorios:
> lmer(Recall~Task*Valence + (Valence*Task|Subject), df)
Error: number of observations (=30) <= number of random effects (=30) for term
(Valence * Task | Subject); the random-effects parameters and the residual variance
(or scale parameter) are probably unidentifiable
Lamentablemente, que yo sepa, no hay una forma acordada para tratar este problema. Pero déjame esbozar y discutir algunos:
Una primera solución podría ser eliminar la pendiente aleatoria más alta y probar los efectos para este modelo:
require(afex)
mixed(Recall~Task*Valence + (Valence+Task|Subject), df)
Effect F ndf ddf F.scaling p.value
1 Task 6.56 1 4.00 1.00 .06
2 Valence 0.80 2 3.00 0.75 .53
3 Task:Valence 0.42 2 8.00 1.00 .67
Sin embargo, esta solución es un poco ad-hoc y no está demasiado motivada.
Actualización de mayo de 2017: este es el enfoque que estoy respaldando actualmente. Consulte esta publicación de blog y el borrador del capítulo del que soy coautor , sección "Estructuras de efectos aleatorios para diseños ANOVA tradicionales".
Una solución alternativa (y que podría verse como defendida por la discusión de Barr et al.) Podría ser eliminar siempre las pendientes aleatorias para obtener el menor efecto. Sin embargo, esto tiene dos problemas: (1) ¿Qué estructura de efectos aleatorios utilizamos para averiguar cuál es el efecto más pequeño y (2) R es reacio a eliminar un efecto de orden inferior, como un efecto principal, si los efectos de orden superior, como un La interacción de este efecto está presente (ver aquí ). Como consecuencia, uno necesitaría configurar esta estructura de efectos aleatorios a mano y pasar la matriz del modelo así construida a la llamada anterior.
Una tercera solución podría ser utilizar una parametrización alternativa de la parte de efectos aleatorios, es decir, una que corresponda al modelo RM-ANOVA para estos datos. Desafortunadamente (?), lmer
No permite "variaciones negativas", por lo que esta parametrización no se corresponde exactamente con el ANOVA-RM para todos los conjuntos de datos , consulte la discusión aquí y en otros lugares (por ejemplo, aquí y aquí ). El "lmer-ANOVA" para estos datos sería:
> mixed(Recall~Task*Valence + (1|Subject) + (1|Task:Subject) + (1|Valence:Subject), df)
Effect F ndf ddf F.scaling p.value
1 Task 7.35 1 4.00 1.00 .05
2 Valence 1.46 2 8.00 1.00 .29
3 Task:Valence 0.29 2 8.00 1.00 .76
Dados todos estos problemas, simplemente no los usaría lmer
para ajustar conjuntos de datos para los que solo hay un punto de datos por celda del diseño a menos que esté disponible una solución más acordada para el problema de la estructura de efectos aleatorios máximos.
En cambio, yo también podría usar el clásico ANOVA. Usar uno de los envoltorios para car::Anova()
en afex
los resultados sería:
> aov4(Recall~Task*Valence + (Valence*Task|Subject), df)
Effect df MSE F ges p
1 Valence 1.44, 5.75 4.67 1.46 .02 .29
2 Task 1, 4 4.08 7.35 + .07 .05
3 Valence:Task 1.63, 6.52 2.96 0.29 .003 .71
Tenga en cuenta que afex
ahora también permite devolver el modelo con el aov
que se puede pasar lsmeans
para las pruebas post-hoc (pero para la prueba de efectos, los que informan car::Anova
son aún más razonables):
> require(lsmeans)
> m <- aov4(Recall~Task*Valence + (Valence*Task|Subject), df, return = "aov")
> lsmeans(m, ~Task+Valence)
Task Valence lsmean SE df lower.CL upper.CL
Cued Neg 11.8 1.852026 5.52 7.17157 16.42843
Free Neg 10.2 1.852026 5.52 5.57157 14.82843
Cued Neu 13.0 1.852026 5.52 8.37157 17.62843
Free Neu 11.2 1.852026 5.52 6.57157 15.82843
Cued Pos 13.6 1.852026 5.52 8.97157 18.22843
Free Pos 11.0 1.852026 5.52 6.37157 15.62843
Confidence level used: 0.95