5

以下模型有什么问题:

 # 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
4

2 回答 2

7

问题正是存储为数字,fmvg不是因子,因此lmer试图解释fm:vg为序列运算符(请参阅?seq)而不是交互运算符(请参阅?interaction)。你可以:

  • 转换数据框内fm因子那么将它们视为分组的因素有点奇怪...... ]vgmbb <- transform(mbb,vg=factor(vg),fm=factor(fm))vgfm

  • interaction(fm,vg)即时明确地编写交互

  • 即时转换为因子 ( (yr+vg+gen|factor(fm):factor(vg)))

  • 使用 Jim M. 的解决方案

    认为这些都会起作用,尽管我不得不承认我没有测试过它们。

于 2011-10-25T18:14:37.600 回答
3

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

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

然后模型变为

lmer(trait1 ~ (yr + vg + gen)^3 + (yr + vg + gen|fmvg), data= mbb)
于 2011-10-25T17:56:57.013 回答