Передача новых данных в simulate.glmmTMB - PullRequest
2 голосов
/ 19 марта 2019

В предыдущем вопросе ( Создание прогнозируемого распределения количества из ZINB-модели класса 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

1 Ответ

2 голосов
/ 19 марта 2019

Я думаю, что это работает (может быть инкапсулировано в функцию и т. Д.):

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...