3

glmmTMB使用family = nbinom1. 现在我想根据预测值和离散度对数据进行模拟。但是,从帮助文件中,看起来 go-tornbinom函数使用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)
4

2 回答 2

1

我们可以尝试模拟 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)

在此处输入图像描述

于 2020-05-10T23:07:30.567 回答
1

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

  • sigma(mod)给出残差的估计标准差;它不是方差,而是方差的平方根,因此您可能需要对其进行平方。
  • 除了 R 的版本之外,还有许多负二项式分布的参数化,但在 R 的版本中,如果均值是mean(dat)方差,那么var(dat)您可以估计sizemean(dat)^2/(var(dat)-mean(dat))概率probmean(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

于 2020-05-10T23:07:40.117 回答