从拟合的 glmmTMB 模型模拟 negbin 数据 - family negbin1

Simulate negbin data from a fitted glmmTMB model - family negbin1

我使用 family = nbinom1 安装了一个 glmmTMB 模型。现在我想根据预测值和分散度对数据进行模拟。但是,从帮助文件来看,go-to rnbinom 函数似乎使用了 family=nbinom2 参数化,其中方差等于 mu + mu^2/size.

1) 谁能帮我弄清楚如何模拟 family=nbinom1 数据(其中方差等于 mu + mu*size)?

2) 另外,我提取/使用色散值作为大小是否正确?

非常感谢!

当前代码(未提供数据,因为无关紧要),使用 stats:::rnbinom 函数,尽管方差定义不匹配:

library(glmmTMB)

mod <- glmmTMB(y ~ x + (1 | ID), data = df, family = nbinom1)
preds <- predict(mod, type = "response")
size <- sigma(mod)
sim <- rnbinom(nrow(df), mu = preds, size = size)

我们可以尝试模拟nbinom1,所以如果方差为mu + mu*k:

set.seed(111)
k = 2
x = runif(100,min=1,max=3)
y = rnbinom(100,mu=exp(2*x),size=exp(2*x)/k)
ID = sample(1:2,100,replace=TRUE)
df = data.frame(x,y,ID)
mod <- glmmTMB(y ~ x + (1 | ID), data = df, family = nbinom1)

sigma(mod)
[1] 1.750076

在上面,对于每个均值 mu,我指定了一个 mu / k 的大小,以便它给出 mu*k 的预期方差。这表明只要你正确地参数化了rnbinom,你就得到了rnbinom1。

现在有了这个模型,如果我们需要模拟数据,只需使用与上面相同的参数化:

preds <- predict(mod, type = "response")
size <- sigma(mod)
sim <- rnbinom(nrow(df), mu = preds, size = preds/size)

plot(sim,df$y)

这里有各种各样的问题,包括:

  • sigma(mod)给出残差的估计标准差;它不是方差,而是方差的平方根,因此您可能需要对其进行平方。
  • 负二项分布的参数化超出了 R 的版本,但在 R 的版本中,如果均值为 mean(dat) 且方差为 var(dat),则您可以估计 size mean(dat)^2/(var(dat)-mean(dat))prob 的概率 mean(dat)/var(dat)
  • rnbinom() 将容忍 size 为非整数或无限,尽管这是理论上的废话;它不会容忍 size 为负数,如果 var(dat) 小于 mean(dat) 就会发生这种情况。它还会出现平均值为负或 size 为零的问题。

所以也许你可以考虑调整你的模拟线以适应

sizes <- ifelse(sigma(mod) ^ 2 > preds, preds ^ 2 / (sigma(mod) ^ 2 - preds), Inf)
sim <- ifelse(preds > 0, rnbinom(nrow(df), mu = preds, size = sizes), 0) 

那么当 sigma(mod) 小于或等于 preds

时,您可能仍然会出错