lme4混合模型错误

时间:2011-10-25 16:59:49

标签: r mixed anova

以下型号有什么问题:

 # 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

2 个答案:

答案 0 :(得分:7)

问题恰恰在于fmvg存储为数字,而不是因子,因此lmer会尝试将fm:vg解释为序列运算符(请参阅{ {1}})而不是交互操作符(请参阅?seq)。你可以:

  • ?interactionfm转换为数据框中的因素(vg)[从您的设置中不清楚您是否需要mbb <- transform(mbb,vg=factor(vg),fm=factor(fm))和{{1成为因素或连续预测因素......这种区别非常重要,当然......如果你想要它们作为连续预测因子,那么将它们视为分组目的的因素有点奇怪...... / em>]
  • 将动作明确地写为vg
  • 即时转化为因素(fm
  • 使用Jim M.的解决方案

    认为这些都会奏效,但我必须承认我没有测试过它们。

答案 1 :(得分:3)

将交互建模为随机效应的一种可能解决方案是将交互项添加为mbb数据框中的附加列。

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

然后模型变为

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