Ошибка смешанной модели lme4

Что не так со следующей моделью:

 # 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 

Я получаю следующую ошибку:

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

person jon    schedule 25.10.2011    source источник
comment
Кажется, ему не нравится бит взаимодействия вашего случайного эффекта. Измените gen|fm:vg на gen|fm, и он запустится. Еще не уверен в значении этого.   -  person Richie Cotton    schedule 25.10.2011


Ответы (2)


Проблема как раз в том, что fm и vg хранятся как числовые, а не как факторы, и поэтому lmer пытается интерпретировать fm:vg как оператор последовательности (см. ?seq), а не оператор взаимодействия (см. ?interaction). Ты сможешь:

  • преобразовать fm и vg в факторы во фрейме данных (mbb <- transform(mbb,vg=factor(vg),fm=factor(fm))) [из ваших настроек не ясно, хотите ли вы, чтобы vg и fm были факторами или непрерывными предикторами ... это различие, конечно, было бы очень важным ... если вы хотите, чтобы они были непрерывными предикторами, то было бы немного странно рассматривать их как факторы для целей группировки ...]

  • явно напишите взаимодействие как interaction(fm,vg) на лету

  • конвертировать в множители на лету ((yr+vg+gen|factor(fm):factor(vg)))

  • использовать решение Джима М.

    Я думаю, что все они будут работать, хотя должен признать, что я их не тестировал.

person Ben Bolker    schedule 25.10.2011

Одним из возможных решений для моделирования взаимодействия как случайного эффекта является добавление члена взаимодействия в качестве дополнительного столбца во фрейме данных mbb.

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

Затем модель становится

lmer(trait1 ~ (yr + vg + gen)^3 + (yr + vg + gen|fmvg), data= mbb)
person Community    schedule 25.10.2011