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东西的观察并不是真正的问题。它仅说明了为什么在glmmgcv::gam之类的例程中传递字符串family是合法的。

07-24 09:34