Valor de p para el término de interacción en modelos de efectos mixtos que utilizan lme4

10

Estoy analizando algunos datos de comportamiento utilizando lme4en R, sobre todo después de excelentes tutoriales de Bodo invierno , pero no entiendo si yo estoy manejando adecuadamente las interacciones. Peor aún, nadie más involucrado en esta investigación utiliza modelos mixtos, por lo que estoy un poco a la deriva cuando se trata de asegurarme de que las cosas estén bien.

En lugar de simplemente pedir un grito de ayuda, pensé que debería hacer mi mejor esfuerzo para interpretar el problema, y ​​luego pedir sus correcciones colectivas. Algunos otros apartados son:

  • Mientras escribía, encontré esta pregunta , que muestra que nlmemás directamente dan valores p para términos de interacción, pero creo que todavía es válido preguntar con relación a lme4.
  • Livius'La respuesta a esta pregunta proporcionó enlaces a muchas lecturas adicionales, que trataré de completar en los próximos días, por lo que comentaré con cualquier progreso que traiga.

En mis datos, tengo una variable dependiente dv, una conditionmanipulación (0 = control, 1 = condición experimental, que debería resultar en una mayor dv), y también un requisito previo, etiquetado appropriate: los ensayos codificados 1para esto deberían mostrar el efecto, pero los ensayos codificados 0podrían no, porque falta un factor crucial.

También he incluido dos intercepciones aleatorias, para subjecty para target, que reflejan dvvalores correlacionados dentro de cada sujeto, y dentro de cada uno de los 14 problemas resueltos (cada participante resolvió un control y una versión experimental de cada problema).

library(lme4)
data = read.csv("data.csv")

null_model        = lmer(dv ~ (1 | subject) + (1 | target), data = data)
mainfx_model      = lmer(dv ~ condition + appropriate + (1 | subject) + (1 | target),
                         data = data)
interaction_model = lmer(dv ~ condition + appropriate + condition*appropriate +
                              (1 | subject) + (1 | target), data = data)
summary(interaction_model)

Salida:

## Linear mixed model fit by REML ['lmerMod']
## ...excluded for brevity....
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  subject  (Intercept) 0.006594 0.0812  
##  target   (Intercept) 0.000557 0.0236  
##  Residual             0.210172 0.4584  
## Number of obs: 690, groups: subject, 38; target, 14
## 
## Fixed effects:
##                                Estimate Std. Error t value
## (Intercept)                    0.2518     0.0501    5.03
## conditioncontrol               0.0579     0.0588    0.98
## appropriate                   -0.0358     0.0595   -0.60
## conditioncontrol:appropriate  -0.1553     0.0740   -2.10
## 
## Correlation of Fixed Effects:
## ...excluded for brevity.

ANOVA luego muestra interaction_modelun ajuste significativamente mejor que mainfx_model, del cual concluyo que hay una interacción significativa presente (p = .035).

anova(mainfx_model, interaction_model)

Salida:

## ...excluded for brevity....
##                   Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)  
## mainfx_model       6 913 940   -450      901                          
## interaction_model  7 910 942   -448      896  4.44      1      0.035 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

A partir de ahí, aíslo un subconjunto de los datos para los appropriateque se cumple el requisito (es decir, appropriate = 1), y para que se ajuste a un modelo nulo, y un modelo que incluya conditioncomo efecto, compare los dos modelos usando ANOVA nuevamente, y he aquí que conditionEs un predictor significativo.

good_data = data[data$appropriate == 1, ]
good_null_model   = lmer(dv ~ (1 | subject) + (1 | target), data = good_data)
good_mainfx_model = lmer(dv ~ condition + (1 | subject) + (1 | target), data = good_data)

anova(good_null_model, good_mainfx_model)

Salida:

## Data: good_data
## models:
## good_null_model: dv ~ (1 | subject) + (1 | target)
## good_mainfx_model: dv ~ condition + (1 | subject) + (1 | target)
##                   Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)  
## good_null_model    4 491 507   -241      483                          
## good_mainfx_model  5 487 507   -238      477  5.55      1      0.018 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Eoin
fuente
Consulte esta pregunta para obtener más información sobre los valores p en lme4: stats.stackexchange.com/questions/118416/…
Tim
El uso de lmerTest :: anova () le dará las tablas anova con valores p para cada término. Eso le permitiría examinar directamente la interacción, en lugar de comparar modelos generales. Vea esta respuesta a la pregunta @Tim vinculada a: stats.stackexchange.com/a/118436/35304
Kayle Sawyer

Respuestas:

3

No veo mucho que decir aquí. Creo que has hecho un buen trabajo.

Hay varias formas en que las personas han discutido para probar los efectos y obtener valores p para modelos complicados de efectos mixtos. Hay una buena descripción general aquí . Lo mejor es utilizar métodos computacionalmente intensivos (bootstrapping o métodos bayesianos), pero esto es más avanzado para la mayoría de las personas. El segundo mejor (y el mejor método conveniente) es usar una prueba de razón de probabilidad. Eso es lo que está haciendo anova()(técnicamente ? Anova.merMod () ). Es importante utilizar solo una prueba de razón de verosimilitud de los modelos que se ajustaron con la máxima verosimilitud total , en lugar de la máxima verosimilitud restringida(REML) Por otro lado, para su modelo final y para la interpretación, desea usar REML. Esto es confuso para muchas personas. En su salida, vemos que ajusta sus modelos con REML (esto se debe a que la opción está configurada TRUEde forma predeterminada en lmer(). Eso significaría que su prueba no es válida, sin embargo, debido a que es un error tan común, anova.merMod()contiene un refitargumento que al el valor predeterminado está establecido en TRUEy no lo ha cambiado, por lo que la previsión de los desarrolladores de paquetes lo ha guardado allí.

Con respecto a su estrategia para desempaquetar la interacción, lo que hizo está bien. Solo tenga en cuenta que la interacción utiliza todos los datos para su prueba. Es posible tener una interacción significativa, pero ninguna de las pruebas estratificadas es significativa, lo que confunde a algunas personas. (Sin embargo, no parece haberte sucedido).

gung - Restablece a Monica
fuente
0

Yo también soy un novato y sigo los consejos de Zuur et al. Lo uso lmedel nlmepaquete en lugar de lme4cuando necesito agregar una estructura de error jerárquico a un modelo lineal. Mi respuesta podría estar muy lejos.

Dos comentarios:

(1) No estoy seguro de que tenga sentido probar conditionen el subconjunto appropriate==1solo cuando . Si desea obtener valores p para los efectos principales, puede usar Anovael paquete 'car':

require(car)
Anova(M,type="III")# type III Sum of Squares. M was fitted using method=REML

Si desea resolver la interacción, puede ejecutar comparaciones emparejadas directamente (?) O hacer lo que hizo pero en ambos subconjuntos (es decir, también con el subconjunto donde appropriate==0).

(2) Es posible que desee seleccionar su estructura de error primero en lugar de asumir que (1 | subject) + (1 | target)es la mejor estructura de error. Por lo que escribió, deduzco que conditiones un factor dentro del sujeto, mientras que es un factor appropriateentre sujetos o entre objetivos. Es posible que desee agregar pendientes para factores dentro del sujeto y / o dentro del objetivo, por ejemplo: dv ~ condition + appropriate + (1+condition | subject) + (1 | target)agrega una pendiente aleatoria para el factor dentro del sujeto condition. No se necesitan pendientes para factores entre sujetos / objetivos.

Salud

usuario42174
fuente
Gracias. Sin Anovaembargo, ¿no pretenderá que las correlaciones entre sujetos y objetivos no están ahí? La razón por la que repito el análisis solo con datos appropriate==1es que algunos de los materiales utilizados resultaron problemáticos en una prueba posterior, por lo tanto, "inapropiados". Finalmente, no he usado pendientes aleatorias por la simple razón de que el modelo se ajusta mejor sin ellas.
Eoin