2012-07-05 159 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