2011-10-20 21 views
12

Me pregunto cómo encajar el modelo mixto lineal multivariante con lme4. Cupe modelos mixtos lineales univariantes con el siguiente código:Modelo mixto lineal multivariante en lme4

library(lme4) 
lmer.m1 <- lmer(Y1~A*B+(1|Block)+(1|Block:A), data=Data) 
summary(lmer.m1) 
anova(lmer.m1) 

lmer.m2 <- lmer(Y2~A*B+(1|Block)+(1|Block:A), data=Data) 
summary(lmer.m2) 
anova(lmer.m2) 

Me gustaría saber cómo encajar modelo mixto lineal multivariable con lme4. Los datos están a continuación:

Block A B Y1 Y2 
1 1 1 135.8 121.6 
1 1 2 149.4 142.5 
1 1 3 155.4 145.0 
1 2 1 105.9 106.6 
1 2 2 112.9 119.2 
1 2 3 121.6 126.7 
2 1 1 121.9 133.5 
2 1 2 136.5 146.1 
2 1 3 145.8 154.0 
2 2 1 102.1 116.0 
2 2 2 112.0 121.3 
2 2 3 114.6 137.3 
3 1 1 133.4 132.4 
3 1 2 139.1 141.8 
3 1 3 157.3 156.1 
3 2 1 101.2 89.0 
3 2 2 109.8 104.6 
3 2 3 111.0 107.7 
4 1 1 124.9 133.4 
4 1 2 140.3 147.7 
4 1 3 147.1 157.7 
4 2 1 110.5 99.1 
4 2 2 117.7 100.9 
4 2 3 129.5 116.2 

Gracias de antemano por su tiempo y cooperación.

+0

puede ser posible hacer esto por 'fusión' el conjunto de datos (es decir, hacer Y1 e Y2 observaciones separadas con una variable común 'ID') y luego ajustar un modelo con ID como un efecto aleatorio. No tengo tiempo para elaborar ahora. Es posible que desee preguntar esto en la lista r-sig-mixed-models. –

+0

@Ben Bolker: Gracias por su comentario. Estoy esperando por tu respuesta. Gracias – MYaseen208

+2

He puesto más detalles en http://rpubs.com/bbolker/3336 –

Respuesta

11

Esto a veces puede ser falsificada satisfactoriamente en nlme/lme4 simplemente reformatear el datos como

require(reshape) 
Data = melt(data, id.vars=1:3, variable_name='Y') 
Data$Y = factor(gsub('Y(.+)', '\\1', Data$Y)) 
> Data 
    Block A B Y value 
1  1 1 1 1 135.8 
2  1 1 2 1 149.4 
3  1 1 3 1 155.4 
4  1 2 1 1 105.9 
5  1 2 2 1 112.9 
6  1 2 3 1 121.6 
... 

y luego incluyendo la variable nueva Y en su modelo mixto lineal.

Sin embargo, para verdaderos modelos mixtos lineales generalizados multivariados (MGLMM), es probable que necesite el paquete sabreR o similar. También hay un libro completo para acompañar el paquete, Modelos mixtos lineales generalizados multivariados que utilizan R. Si tiene un proxy para una institución suscriptora, es posible que incluso pueda descargarlo gratis desde http://www.crcnetbase.com/isbn/9781439813270. Te recomendaría allí para cualquier otro consejo, ya que este es un tema sustancioso y soy muy novato.

+0

Gracias por su respuesta. Agradecería mucho si proporcionara más pautas para adaptarse a este tipo de modelo con lme4 o nlme. Gracias – MYaseen208

+0

Tiene la sintaxis básica, pero determinar qué modelo específico encajará dependerá completamente de sus datos y la estructura de su experimento. Este probablemente no sea el foro adecuado para eso.Si no está familiarizado con los modelos mixtos, * Modelos de efectos mixtos en S y S-Plus * es el libro que acompaña al paquete 'nlme', y podría ser un buen lugar para comenzar. –

5

lmer y su hermana mayor lme son intrínsecamente "un parámetro que queda de ~". Eche un vistazo a los paquetes de automóviles; que ofrece sin la plataforma off repetida apoyo medición, pero se puede encontrar algunos comentarios sobre el tema mediante la búsqueda en la lista R:

John Fox on car package

+0

Gracias por su respuesta. ¿Puedes proporcionar más detalles? Gracias – MYaseen208

1

@ La respuesta de John anterior debe ser correcta. Agregue una variable ficticia (es decir, la variable de factor Y) al modelo. Aquí tiene 3 subíndices i= 1...N para observaciones, j=1,...,4 para bloques, y h=1,2 para la var. Dependiente. Pero también necesita forzar el término de error de nivel 1 a 0 (o a casi cero), lo cual no estoy seguro de que lme4 lo haga. Ben Bolker podría proporcionar más información. Esto se describe más en Goldstein (2011) Chap 6 y Chap 7 para modelos multivariados latentes.

IE

Y_hij = \ beta_ {01} z_ {1ij} + \ beta_ {02} z_ {2ij} + \ beta X + u_ {1j} z_ {1ij} + u_ {2j} z_ { 2ij}

Así:

require(reshape2) 
Data = melt(data, id.vars=1:3, variable_name='Y') 
Data$Y = factor(gsub('Y(.+)', '\\1', Data$Y)) 

m1 <- lmer(value ~ Y + A*B + (1|Block) + (1|Block*A), data= Data) 
# not sure how to set the level 1 variance to 0, @BenBolker 
# also unclear to me if you're requesting Y*A*B instead of Y + A*B 
Cuestiones relacionadas