2012-07-05 162 views
2

我得到R中的下面的错误messgae当我尝试从lme4使用来自效果封装allEffects()与glmer创建的GLMM(mpc7j)():allEffects()上GLMM给出错误信息

> mpc7j<- glmer(correct_response ~ pc * Stim.cond + sess:pc + sess:Stim.cond + 
       (1|item.no) + (1|id), data=d7nowl, family=binomial) 

> allEffects(mpc7j) 
Error in eval(expr, envir, enclos) : Object 'sess' not found 

当我在不同模型(“虚拟”)上对同一数据使用allEffects(),而在固定效果中没有包含“sess”的术语时,它工作得很好。

> dummy<- glmer(correct_response ~ pc * Stim.cond + (1|item.no) + (1|id), 
       data=d7nowl, family=binomial) 

我使用STR(mpc7j)来检查我的模型,它看起来像“SESS”就在那里为组对比治疗中的因素。

.. .. ..$ pc  : chr "contr.treatment" 
.. .. ..$ Stim.cond: chr "contr.treatment" 
.. .. ..$ sess  : chr "contr.treatment" 

“SESS”是具有2级水平的因子,并且是指试验时间(重复测量,会话1和会话2)。我测试的一个科目只进行过一次测试,而不是其他科目的两倍。这可能与这个错误有什么关系?

我会很感激任何指针,我在做什么错在这里或我应该寻找一个解决方案。我已经搜索错误信息没有成功。 allEffects()函数的R文档也没有帮助我。请帮助?

编辑:当我尝试使用plotLMER.fnc()从languageR,我得到这个错误:

> plotmpc7j<-plotLMER.fnc(mpc7j) 
log odds are back-transformed to probabilities 
Fehler: Indizierung außerhalb der Grenzen 

最后一行转换为类似“错误:边界外指标”。

+0

我并不十分震惊,这不起作用,但会调查它。 – 2012-07-05 16:14:35

回答

1

即使这是不完整的,我张贴作为一个答案,而不是评论,因为它的长,包含了大量的代码......(我能回去,之后再删除它...

到目前为止,底线是这不是一个glmer/GLMM特有的问题,而是一个包含交互条件(在这种情况下为sess:pcsess:Stim.cond)但没有主效应(sess)的模型的问题(通常是这样的模型很奇怪并且经常但不总是错误的...这可能是为什么它们不能被effects包处理)我会考虑联系包维护者(maintainer("effects"))...

创建一个虚拟的数据与正确的结构设置:

d7nowl <- expand.grid(pc=factor(LETTERS[1:2]), 
         Stim.cond=factor(letters[1:2]), 
         sess=factor(1:2), 
         item.no=factor(1:10),id=factor(1:10)) 
d7nowl$correct_response <- rbinom(nrow(d7nowl),size=1,prob=0.5) 

装上GLMM:

g1 <- glmer(correct_response ~ pc * Stim.cond + sess:pc + sess:Stim.cond + 
      (1|item.no) + (1|id), data=d7nowl, family=binomial) 

## reproduce error 
try(allEffects(g1)) 
## Error in eval(expr, envir, enclos) : object 'sess' not found 

现在尝试用GLM一个类似的模型。

g2 <- glm(correct_response ~ pc * Stim.cond + sess:pc + sess:Stim.cond, 
      data=d7nowl, family=binomial)  
try(allEffects(g2)) ## same error 

allEffects给了我们一个答案(我没有检查,看它是否有道理),如果我们要么sess(如在原来的提问时指出)的主要作用取出与sess的互动。

g3 <- update(g2,.~.+sess) 
try(allEffects(g3)) ## OK 

g4 <- update(g2,.~.-sess:pc-sess:Stim.cond) 
try(allEffects(g4)) ## OK 

如果我尽量简化进一步allEffects仍然打破,但使用不同的错误信息:

g5 <- glm(correct_response ~ pc + sess:pc, data=d7nowl, family=binomial) 
try(allEffects(g5)) 
## Error in mod.matrix[, components] : subscript out of bounds 

了解到底发生了什么错误,需要挖掘到的effects:::analyze.model胆量(内部效用函数)来查看逻辑出错的地方。

+0

感谢您的解释!我玩过它,如果用“*”替换“:”这个术语,它就会起作用。我猜,我认为这还包括一个互动术语......这并不是真的与我原来的问题有关,但为什么模型中使用“:”的术语很奇怪?你知道我在哪里可以读到吗? – kat 2012-07-06 12:25:37

+0

用'*'代替':'相当于在模型中包含主效果('a * b'与'a + b + a:b'同义,即主效果加交互作用)。带有':'项(交互作用)的模型并不奇怪:具有交互*的模型不包含相关的主效应*是奇怪的。一般问题被称为*边缘性原则*:http://www.stats.ox.ac.uk/pub/MASS3/Exegeses.pdf是一个通常引用的参考文献,虽然它有点偏斜。 http://en.wikipedia.org/wiki/Principle_of_marginality上还有更多参考文献...... – 2012-07-09 15:29:18