Я думаю, что это работает (может быть инкапсулировано в функцию и т. Д.):
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()
методы должны разрешать как newdata
, так и newparams
- открываетсябольшой спектр возможностей для параметрической начальной загрузки, апостериорного моделирования и т. д. и т. д.
Более компактно (и, вероятно, более надежно):
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)