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模型?
最佳答案
因为您已经屏蔽了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
,则无法从poisson
包中找到正确的函数stats
。Ben刚刚解决了此问题,方法是将其替换为:
mc$family <- quote(stats::poisson)
我最初对
family = "poisson"
和match.fun
东西的观察并不是真正的问题。它仅说明了为什么在glm
和mgcv::gam
之类的例程中传递字符串family
是合法的。