Я использую модель, используя glmmTMB
, где переменной отклика является размер группы (от 1 до 40). Поскольку размер моей группы не может быть равен 0, я понимаю, что мне следует использовать усеченное распределение Пуассона (или негбина), особенно в том, что размеры небольших групп очень распространены.
Однако, когда я делаю моделирование, прогнозы из усеченного Пуассона недооценивают истинные значения, особенно когда отклик меньше. Кажется, нет никакой разницы между этими двумя при прогнозировании больших значений. Я неправильно делаю прогнозирование (хотя я использую опцию type = "response"
? Как мне справиться с этим?
Спасибо!
Игрушечный пример с подмножеством моих данных и упрощенная модель c. Пуассоновские прогнозы точны, но усеченные - недооценены, особенно для меньших значений.
library(glmmTMB)
library(ggplot2)
library(dplyr)
df <- structure(list(VarF = structure(c(4L, 5L, 5L, 2L, 4L, 4L, 4L, 4L, 3L, 4L, 4L, 5L, 5L, 1L, 4L, 2L, 3L, 4L,
5L, 3L, 5L, 3L, 5L, 4L, 2L, 5L, 4L, 4L, 4L, 3L, 4L, 4L, 5L, 4L, 4L, 4L, 1L, 4L, 3L, 4L), .Label = c("A", "B", "C",
"D", "E"), class = "factor"), N = c(9, 1, 3, 5, 3, 2, 2, 2, 2, 2, 5, 2, 6, 1, 7, 2, 6, 7, 2, 4, 2, 5, 1, 2, 8, 2,
2, 2, 8, 1, 2, 1, 6, 5, 2, 2, 5, 1, 2, 3)), row.names = c(NA, -40L), class = c("tbl_df", "tbl", "data.frame"))
mod <- glmmTMB(N ~ VarF, data = df, family=poisson)
mod1 <- glmmTMB(N ~ VarF, data = df, family=truncated_poisson)
df$Pred <- predict(mod, type = "response")
df$Pred1 <- predict(mod1, type = "response")
df %>%
group_by(VarF) %>%
summarize(Mean = mean(N),
MeanPred = mean(Pred),
MeanPred1 = mean(Pred1)) %>%
ggplot() +
geom_point(aes(x = VarF, y = Mean, colour = "Mean data value")) +
geom_point(aes(x = as.numeric(VarF) - 0.1, y = MeanPred, colour = "Poisson")) +
geom_point(aes(x = as.numeric(VarF) + 0.1, y = MeanPred1, colour = "Truncated Poisson"))