2011-10-25 23 views
5

¿Qué pasa con el siguiente modelo:lme4 error de modelo mixto

# simulated data yr = 2; vg = 4, fm = 5, gen = 5 
    mbb <- data.frame(trait1 = rnorm(200, 15, 4),yr = c(rep (1:2, each = 100)), 
    vg = c(rep(rep(1:4, each =25), 2)), fm = rep(rep(1:5, each = 5), 8), 
    gen = sample(c(1:5), 200, replace = T)) 
    require(lme4) 
    lmer(trait1 ~ (yr + vg + gen)^3 + (yr + vg + gen|fm:vg), data= mbb)# full model 

estoy consiguiendo error siguiente:

Error in validObject(.Object) : 
    invalid class "mer" object: Slot Zt must by dims['q'] by dims['n']*dims['s'] 
In addition: Warning messages: 
1: In fm:vg : numerical expression has 200 elements: only the first used 
2: In fm:vg : numerical expression has 200 elements: only the first used 
+0

Parece que no le gusta el bit de interacción de su efecto aleatorio. Cambia 'gen | fm: vg' a' gen | fm' y se ejecuta. Todavía no estoy seguro del significado de esto. –

Respuesta

7

El problema es precisamente que fm y vg se almacenan como numérico, no como factores, y así lmer trata de interpretar fm:vg como operador de secuencia (ver ?seq) en lugar de un operador de interacción (ver ?interaction). Puede:

  • convertido vgfm y de factores dentro de la trama de datos (mbb <- transform(mbb,vg=factor(vg),fm=factor(fm))) [no está claro a partir de la configuración si quiere vg y fm a ser factores o predictores continuos ... esa distinción sería muy importante, por supuesto ... si los quieres como predictores continuos, entonces es un poco raro que tratarlos como factores a los efectos de la agrupación ...]
  • escribir la interacción explícitamente como interaction(fm,vg) sobre la marcha
  • convertir a factores sobre la marcha ((yr+vg+gen|factor(fm):factor(vg)))
  • utilización solución de Jim M.

    I que éstos todo funcionará, aunque tengo que admitir que no las he probado.

3

Una posible solución para modelar la interacción como un efecto aleatorio es añadir la término de interacción como una columna adicional en el marco de datos mbb.

mbb$fmvg <- with(mbb, interaction(fm,vg, sep=":")) 

El modelo se convierte entonces en

lmer(trait1 ~ (yr + vg + gen)^3 + (yr + vg + gen|fmvg), data= mbb) 
Cuestiones relacionadas