2016-09-27 114 views
4
library(lme4) 

dummy <- as.data.frame(cbind(speed = rpois(100, 10), pop = rep(1:4, each = 25), season = rep(1:2, each = 50), id = seq(1, 100, by = 1))) 
dummy2 <- as.data.frame(cbind(speed = c(rnbinom(50, 10, 0.6), rnbinom(50, 10, 0.1)), pop = rep(1:4, each = 25), season = rep(1:2, each = 50), id = seq(1, 100, by = 1))) 

poisson <- glmer(speed~pop*season + (1|id), 
      data=dummy, family="poisson") 
neg.bin <- glmer.nb(speed ~ pop*season + (1|id), 
       data=dummy2, control=glmerControl(optimizer="bobyqa")) 

的順序當我之前一個負二項分佈運行腳本創建泊松模型使用lme4封裝模式,我運行neg.bin模型時出現以下錯誤:

Error in family$family : $ operator not defined for this S4 class 

但是,如果我跑以相反的順序模型,我不知道該錯誤消息。

library(lme4) 
dummy <- as.data.frame(cbind(speed = rpois(100, 10), pop = rep(1:4, each = 25), season = rep(1:2, each = 50), id = seq(1, 100, by = 1))) 
dummy2 <- as.data.frame(cbind(speed = c(rnbinom(50, 10, 0.6), rnbinom(50, 10, 0.1)), pop = rep(1:4, each = 25), season = rep(1:2, each = 50), id = seq(1, 100, by = 1))) 
neg.bin <- glmer.nb(speed ~ pop*season + (1|id), 
       data=dummy2, control=glmerControl(optimizer="bobyqa")) 
poisson <- glmer(speed~pop*season + (1|id), 
      data=dummy, family="poisson") 

的neg.bin典範確實有收斂警告,但相同的模式與我的這匯聚成細實際模型發生。如何運行泊松模型首先影響neg.bin模型?

回答

2

因爲您屏蔽了R功能poisson。下面將正常工作(除非有收斂預警neg.bin):

library(lme4) 
set.seed(0) 
dummy <- as.data.frame(cbind(speed = rpois(100, 10), pop = rep(1:4, each = 25), season = rep(1:2, each = 50), id = seq(1, 100, by = 1))) 
dummy2 <- as.data.frame(cbind(speed = c(rnbinom(50, 10, 0.6), rnbinom(50, 10, 0.1)), pop = rep(1:4, each = 25), season = rep(1:2, each = 50), id = seq(1, 100, by = 1))) 

## use a different name for your model, say `poisson_fit` 
poisson_fit <- glmer(speed~pop*season + (1|id), 
     data=dummy, family="poisson") 

negbin_fit <- glmer.nb(speed ~ pop*season + (1|id), 
      data=dummy2, control=glmerControl(optimizer="bobyqa")) 

這裏是問題。其中的glmer.nb最先的幾行有一行:

mc$family <- quote(poisson) 

所以,如果你掩蓋poisson,從stats包正確的功能poisson無法找到。

Ben剛剛修復了這個問題,通過更換這:

mc$family <- quote(stats::poisson) 

我對family = "poisson"match.fun東西原來的觀察是不是真正的問題在這裏。這隻能解釋爲什麼在例如glmmgcv::gam的例程中,傳遞一串family是合法的。

+0

不錯。我想我可以在開發版本中解決這個問題。 –

+0

固定在開發版本。 –

+0

你爲什麼對不起?這是一個很好的答案。如果其他人回答lme4問題,我很高興,它爲我省去了麻煩。是的,你是對的。我想你對使用'family =「poisson」'的評論是不正確/切題的。問題在於'glmer.nb' *內部*使用'poisson',而不是''poisson''(或習慣於) –