【问题标题】:Is there a difference between gamma hurdle (two-part) models and zero-inflated gamma models?伽马障碍(两部分)模型和零膨胀伽马模型之间有区别吗?
【发布时间】:2021-04-21 00:24:23
【问题描述】:

我正在尝试建模的半连续数据(许多精确的零和连续的正结果)。我从 Zuur 和 Ieno 的 Beginner's Guide to Zero-Inflated Models in R 中很大程度上了解了质量为零的建模数据,该指南区分了零膨胀伽马模型和他们所谓的“零改变” 伽马模型,他们将其描述为障碍模型,它结合了零点的二项式分量和正连续结果的伽马分量。我一直在探索glmmTMB 包中ziGamma 选项的使用,并将得到的系数与我按照Zuur 书中(第128-129 页)中的说明构建的障碍模型进行比较,但它们并不重合。我很难理解为什么不这样做,因为我知道伽马分布不能取零值,所以我想每个零膨胀伽马模型在技术上都是一个障碍模型。谁能为我照亮这个?在代码下方查看更多关于模型的 cmets。

library(tidyverse)
library(boot)
library(glmmTMB)
library(parameters)

### DATA

id <- rep(1:75000)
age <- sample(18:88, 75000, replace = TRUE)
gender <- sample(0:1, 75000, replace = TRUE)
cost <- c(rep(0, 30000), rgamma(n = 37500, shape = 5000, rate = 1), 
          sample(1:1000000, 7500, replace = TRUE))
disease <- sample(0:1, 75000, replace = TRUE)
time <- sample(30:3287, 75000, replace = TRUE)

df <- data.frame(cbind(id, disease, age, gender, cost, time))

# create binary variable for non-zero costs

df <- df %>% mutate(cost_binary = ifelse(cost > 0, 1, 0))

### HURDLE MODEL (MY VERSION)

# gamma component

hurdle_gamma <- glm(cost ~ disease + gender + age + offset(log(time)), 
                    data = subset(df, cost > 0),
                    family = Gamma(link = "log"))

model_parameters(hurdle_gamma, exponentiate = T)

# binomial component

hurdle_binomial <-  glm(cost_binary ~ disease + gender + age + time, 
                        data = df, family = "binomial")

model_parameters(hurdle_binomial, exponentiate = T)

# predicted probability of use

df$prob_use <- predict(hurdle_binomial, type = "response")

# predicted mean cost for people with any cost

df_bin <- subset(df, cost_binary == 1)

df_bin$cost_gamma <- predict(hurdle_gamma, type = "response")

# combine data frames

df2 <- left_join(df, select(df_bin, c(id, cost_gamma)), by = "id")

# replace NA with 0

df2$cost_gamma <- ifelse(is.na(df2$cost_gamma), 0, df2$cost_gamma)

# calculate predicted cost for everyone

df2 <- df2 %>% mutate(cost_pred = prob_use * cost_gamma)

# mean predicted cost

mean(df2$cost_pred)

### glmmTMB with ziGamma

zigamma_model <- glmmTMB(cost ~ disease + gender + age + offset(log(time)),
                         family = ziGamma(link = "log"),
                         ziformula = ~ disease + gender + age + time,
                         data = df)

model_parameters(zigamma_model, exponentiate = T)

df <- df %>% predict(zigamma_model, new data = df, type = "response") # doesn't work
# "no applicable method for "predict" applied to an object of class "data.frame"

我的障碍模型的 gamma 分量的系数和 zigamma 模型的固定效应分量相同,但 SE 不同,这在我的实际数据中对我感兴趣的预测变量的重要性有重大影响。零膨胀模型的系数不同,而且我还注意到二项式组件中的 z 值是我的二项式模型中的负逆。我认为这与我的二项式模型建模存在概率(1 是成功)和 glmmTMB 大概建模不存在概率(0 是成功)有关?

总之,谁能指出我在 glmmTMB ziGamma 模型上做错了什么?

【问题讨论】:

  • 您可以通过改写为解决问题而不是请求包来重新打开这个问题(如果需要)。我认为你的问题应该是主题,但共识是它不是(见meta question and answers
  • 我已根据您的建议对其进行了编辑,希望足以重新打开它。
  • 明天会解决这个问题。我认为您对符号反转完全正确(glmmTMB 预测的是零而不是非零值的概率)。你能说一下你想做出什么样的预测(见glmmTMB::predict.glmmTMB)?
  • 感谢您链接到的讨论。我不认为我的问题是不恰当的,因为我不是 R 世界中最精明的导航员,并且知道那里有很多我不知道其他人很容易做到的事情——比如你对 glmmTMB 包的指导。我在整个互联网上搜索了有关 gamma 跨栏模型的资源,但几乎一无所获,在这里发帖让我得到了你的建议。我努力思考我的问题,并且觉得 Stack Overflow 经常在没有太多反馈的情况下突然关闭问题的触发手指发痒。
  • 是的,他们是。编辑删除了 Zuur's,我将其包括在内只是为了增强(我的)信心,我已经正确地完成了跨栏模型,至少在他们的灯光下。回复:预测,我想做的是预测我原始数据中每个人的成本(pi * mu)。我阅读了 glmmTMB::predict 概述,但不确定我做错了什么

标签: r glm gamma-distribution glmmtmb


【解决方案1】:

glmmTMB 包可以做到这一点:

glmmTMB(formula, family=ziGamma(link="log"), ziformula=~1, data= ...)

应该这样做。也许VGAM 中也有一些东西?


回答有关系数和标准误的问题:

  • 二项式系数的符号变化正是您所怀疑的(估计 0 [glmmTMB] 的概率与非零概率 [your/Zuur's code] 之间的差异)
  • 模型二项式部分的标准误差接近但不相同:使用broom.mixed::tidy
round(1-abs(tidy(hurdle_g,component="zi")$statistic)/
      abs(tidy(hurdle_binomial)$statistic),3)
## [1] 0.057 0.001 0.000 0.000 0.295

6% 的截距,高达 30% 的年龄效应 ...

  • 条件 (cost&gt;0) 组件的标准误差几乎是两倍,这让我很困惑;如果我们简单地在 glmmTMB 与 glm 中实现 Gamma/log-link,它就成立了。很难知道如何检查哪个是正确的/这个案例的黄金标准应该是什么。在这种情况下,我可能不信任 Wald p 值,而是尝试使用似然比检验来获取 p 值(通过 drop1)。

在这种情况下,模型严重错误指定(即成本是均匀分布的,与 Gamma 完全不同);我想知道这是否会让事情变得更难/更糟?

【讨论】:

  • 谢谢,@Ben Bolker!我已经将 VGAM 用于非障碍零截断负二项式模型,但除非我错过了最近的一些东西,否则它不适合伽马障碍模型。除了cran.r-project.org/web/packages/glmmTMB/vignettes/glmmTMB.pdf 之外,还有关于将 glmmTMB 与 zigamma 一起使用的更详细的指导吗?我不是 100% 遵循拟合障碍模型的示例,而不是具有伽马分布的零膨胀模型。
  • 也许您可以澄清一下:据我所知,“具有伽马分布的零膨胀模型”与障碍模型相同。 (您可以对照glmmTMB 结果检查您的障碍代码的结果...)
  • 我通常听说过障碍模型被描述为“两部分”或“零改变”。对我来说,“零膨胀”是指不考虑来自两个不同过程的零和连续或计数结果的模型。
  • 当我将我的跨栏模型与带有 ziGamma 的 glmmTMB 进行比较时,我感兴趣的预测因子的系数在 glmmTMB 的固定效应模型和我的跨栏模型的伽马分量中是相同的,但标准误差在我的跨栏模型中是两倍大(足以改变系数的统计显着性)。 glmmTMB 零膨胀模型的系数和我的障碍模型的二项式部分非常不同:一个给出的指数系数 1。我不明白如何解析这个来确定使用哪个模型。
  • 也许是术语问题。从技术上讲,由于 Gamma 分布没有产生零结果的概率(不仅 Prob(0)=0,它适用于任何连续分布,而且如果形状参数 > 1 (如果形状
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
  • 2018-12-20
  • 2011-09-28
  • 2019-01-31
  • 2013-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多