【问题标题】:Simulate negbin data from a fitted glmmTMB model - family negbin1从拟合的 glmmTMB 模型模拟 negbin 数据 - 系列 negbin1
【发布时间】:2020-05-10 20:53:03
【问题描述】:

我使用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公式轻松计算出方差,计算大小,然后将其传递回rnbinom。 size 可以是一个向量,只要 mu
  • sigma(mod) 没问题。
  • 没错,好点。如果你把答案写出来,我会接受的。
  • 如果您只想从观察到的预测变量/拟合模型中进行模拟,则可以使用 simulate() 方法来拟合对象(也可以对您提出的任何模拟进行交叉检查)

标签: r glmmtmb


【解决方案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)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 实际上根据?sigma.glmmTMB "nbinom1 返回一个过度离散参数(通常表示为 alpha,如 Hardin and Hilbe (2007)):使得方差等于 mu(1+alpha)。
    • @BenBolker - 你可能是对的:我看过基本的?sigma
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多