Как вычислить доверительные интервалы для прогнозов GLMM с нулевым раздувом при применении смещения - PullRequest
0 голосов
/ 04 февраля 2019

Я построил серию glmm с использованием пакета glmmTMB R, каждый из которых имеет фиксированные (категориальные и непрерывные) эффекты, случайный эффект, смещение, а некоторые из них имеют один член с нулевой инфляцией.

Я использую эти модели для выведения логических выводов с целью составления карт.В рамках этого процесса я хотел бы создать соответствующие карты неопределенности для прогнозов, для этого необходимо рассчитать доверительные интервалы для прогнозируемых значений.Единственный метод, который я могу найти, не учитывает смещение при вычислении линейного предиктора (по сравнению с Предикатом.glmmTMB, который делает) и связанных значений CI.Я хотел бы сообщить ответ в разумном масштабе, относительно того, в котором он измерен, то есть смещение.

Насколько я понимаю, нельзя просто умножить прогнозируемое значение и доверительные интервалы, как только они достигнутмасштаб ответа.Мой вопрос заключается в том, как можно включить смещение в ручной расчет предиктора и оценку КИ?

Я попытался прочитать различные документы по glmmTMB и нашел хорошо выложенный пример метода в приложении.из этой бумаги .Однако в примере, приведенном в статье, используется модель без смещения.

Кроме того, я обнаружил очень аналогичный вопрос и перешел по ссылкам, предоставленным там, на другие источники информации.Эта строка информации в конечном итоге привела меня к первоначальной статье, описанной выше, не отвечая на мой вопрос.

## From the example in the appendix of Brooks et al (2017): 
library("glmmTMB")
library(MASS)
data("Salamanders")

## Build Model
zinbm3 = glmmTMB(count~spp * mined +(1|site),
                 zi=~spp * mined, 
                 Salamanders, 
                 family=nbinom2)

## Create new dataset for predictions
newdata0 = unique(Salamanders[,c("mined","spp")])

## Make Predictions
X.cond = model.matrix(lme4::nobars(formula(zinbm3)[-2]), newdata0) 
#### The line above is where the offset is dropped.
beta.cond = fixef(zinbm3)$cond
pred.cond = X.cond %*% beta.cond 

ziformula = zinbm3$modelInfo$allForm$ziformula
X.zi = model.matrix(lme4::nobars(ziformula), newdata0)
beta.zi = fixef(zinbm3)$zi
pred.zi = X.zi %*% beta.zi

pred.ucount = exp(pred.cond)*(1-plogis(pred.zi))

## Simulate and estimate 95% confidence intervals
set.seed(101)
pred.condpar.psim = mvrnorm(1000,mu=beta.cond,Sigma=vcov(zinbm3)$cond)
pred.cond.psim = X.cond %*% t(pred.condpar.psim)
pred.zipar.psim = mvrnorm(1000,mu=beta.zi,Sigma=vcov(zinbm3)$zi)
pred.zi.psim = X.zi %*% t(pred.zipar.psim)
pred.ucount.psim = exp(pred.cond.psim)*(1-plogis(pred.zi.psim))
ci.ucount = t(apply(pred.ucount.psim,1,quantile,c(0.025,0.975)))
ci.ucount = data.frame(ci.ucount)

## Combine predicted value and CI values at response scale
pred.ucount = data.frame(newdata0, pred.ucount, ci.ucount)

В какой момент в этом ручном расчете прогнозируемого отклика и доверительных интервалов можно было бы учесть смещение, какделается в Foregt.glmmTMB?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...