2011-10-25 95 views
5

有什么不对以下模型: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 
+0

它似乎不喜欢你的随机效应的交互位。将'gen | fm:vg'更改为'gen | fm'并运行。还不确定这是什么意思。 –

回答

7

的问题恰恰是fmvg被存储为数字,而不是作为因素,所以lmer试图解释fm:vg作为序列操作符(参见?seq)而不是交互操作符(请参阅?interaction)。您可以:

  • 转换fmvg数据帧(mbb <- transform(mbb,vg=factor(vg),fm=factor(fm))它不是从你的设置是否要vgfm是因素或连续预测明确的范围内的因素......这样的区分是非常重要的是,当然......如果你希望他们为连续预测,那么它是一个有点怪异将它们视为因素分组的目的...]
  • 写的相互作用明确为interaction(fm,vg)上飞
  • 随时转换为因素((yr+vg+gen|factor(fm):factor(vg))
  • 使用吉姆·M.的解决方案

    认为这些将全部的工作,虽然我不得不承认,我没有测试过。

3

一个可能的解决方案作为随机效应是添加到交互模型互动术语作为mbb数据框中的附加列。

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

然后,该模型变得

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