gpt4 book ai didi

r - 将新数据传递给 simulate.glmmTMB

转载 作者:行者123 更新时间:2023-12-05 03:02:01 25 4
gpt4 key购买 nike

在上一个问题 (Generate a predicted count distribution from a ZINB model of class glmmTMB) 中,我询问了如何为“glmmTMB”类的零膨胀负二项式模型生成预测计数分布。从那以后,我发现该问题的一个解决方案是函数 simulate.glmmTMB ( https://www.rdocumentation.org/packages/glmmTMB/versions/0.2.3/topics/simulate.glmmTMB )。但是,我想对测试数据进行模拟以验证模型的预测能力,我只看到如何对用于拟合模型的相同数据运行模拟。

在下面的示例中,我如何模拟 newdata 数据框的结果?

library(glmmTMB)
data("bioChemists", package = "pscl")
zinb <- glmmTMB(art ~ fem + mar + kid5 + phd + ment, ziformula = ~ ., data =
bioChemists, family = nbinom2(link = "log"))
sim_1 <- simulate(zinb) #works as expected

#make new dataframe
newdata = unique(bioChemists[,c("fem","mar","kid5","phd","ment")])
sim_2 <- simulate(zinb, newdata = newdata) #ignores newdata

最佳答案

我认为这行得通(可以封装在函数等中):

n <- nrow(newdata)
## construct model matrices for conditional and Z-I
## components (.[-2] drops the LHS of the formula)
X <- model.matrix(formula(zinb)[-2],newdata)
X_zi <- model.matrix(formula(zinb,component="cond")[-2],newdata)
## extract coefficients
beta <- fixef(zinb)$cond
beta_zi <- fixef(zinb)$zi
## draw random values for each component
cond <- rnbinom(n, mu=exp(X %*% beta), size=sigma(zinb))
zi <- rbinom(1, prob=plogis(X_zi %*% beta_zi), size=1)
cond*zi

最后一步有点太聪明了:ifelse(zi==0,0,cond)可能更清楚,或者对于最后三个步骤,您可以使用 rzinbinom emdbook 中的函数包...

总的来说我觉得simulate()方法应该同时允许 newdatanewparams - 它为参数引导、后验模拟等开辟了广泛的可能性。


更紧凑(并且可能更健壮):

cond <- predict(zinb, newdata=newdata, type="conditional")
zi <- predict(zinb, newdata=newdata, type="zprob")
emdbook::rzinbinom(nrow(newdata),
mu=cond, size=sigma(zinb),
zprob=zi)

关于r - 将新数据传递给 simulate.glmmTMB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55230145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com