簡體   English   中英

使用截斷計數從 glmmTMB 進行預測

[英]Predicting from glmmTMB with truncated counts

我正在運行具有各種截斷計數分布( truncated_poissontruncated_compoistruncated_nbinom1truncated_nbinom2 )的 glmmTMB model。 當我根據 model 進行預測時,這些值似乎低於預期,好像預測沒有考慮截斷。 我哪里錯了? 提供了一個玩具示例,顯示預測值低於觀察到的平均值。

任何意見,將不勝感激。 如果建議可以擴展到其他截斷計數分布(見上文),並且它顯示了如何在這些情況下正確地獲得估計值周圍的 95% 置信帶,則加分。

library(dplyr)
library( extraDistr)
library(glmmTMB)

set.seed(1)
df <- data.frame(Group = rep(c("a", "b"), each = 20), N = rtpois(40, 1, a = 0), ran = "a") %>%
        mutate(N = ifelse(N == 0, 1, N))
m <- glmmTMB(N ~ Group + (1|ran), data = df, family = "truncated_poisson")

df %>% group_by(Group) %>% summarize(mean(N))
predict(m, newdata = data.frame(Group = c("a", "b"), ran = NA), type = "response")

我認為主要問題可能是您使用的是稍舊版本的glmmTMB (< 1.1.5,修復了錯誤,請參見egeg https://github.com/glmmTMB/glmmTMB/issues/860 )。

樣本數據

略微簡化(我們不需要為此示例包含隨機效果),並添加截斷的 nbinom2。

library(dplyr)
library(extraDistr)
library(glmmTMB)

set.seed(1)
df <- data.frame(Group = rep(c("a", "b"), each = 20),
                 Np = rtpois(40, 1, a = 0))

## clunky trunc nbinom generator
tnb <- rep(0, 40)
z <- (tnb==0)
while(any(z)) {
    tnb[z] <- rnbinom(sum(z), mu = 1, size = 1)
    z <- (tnb==0)
}
df$Nnb <- tnb
## summarize
df %>% group_by(Group) %>% summarize(across(starts_with("N"), mean))
##   Group    Np   Nnb
## 1 a      1.75  1.8 
## 2 b      1.45  2.35

適合模特

m1 <- glmmTMB(Np ~ Group, data = df, family = "truncated_poisson")
m2 <- update(m1, Nnb ~ ., family = truncated_nbinom2)

使用se.fit = TRUE進行預測將為您提供預測的標准誤差,您可以從中計算置信區間(假設正態性/Wald 間隔/等等......)...

pfun <- function(m, level = 0.95) {
    pp <- predict(m, newdata = data.frame(Group = c("a", "b")),
            type = "response",
            se.fit = TRUE)
    list(est = unname(pp$fit), 
         lwr = unname(pp$fit + qnorm((1-level)/2)*pp$se.fit),
         upr = unname(pp$fit + qnorm((1+level)/2)*pp$se.fit))

}
pfun(m1)
pfun(m2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM