You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用gtsummary::tbl_regression提取零膨胀GLMM随机效应遇重复行问题

解决gtsummary提取glmmTMB零膨胀模型随机效应重复的问题

方案1:自定义tidy函数,指定提取单一模型部分的随机效应

glmmTMB的零膨胀模型包含条件(cond)和零膨胀(zi)两个子模型,tbl_regression默认会同时提取两个子模型的随机效应,导致重复行。通过自定义tidy函数,指定component参数可以只提取目标部分的结果:

提取条件部分(cond)的随机效应

library(gtsummary)
library(glmmTMB)
library(broom.mixed)

# 拟合模型
data(Salamanders)
zinbm2 <- glmmTMB(count~spp + mined +(1|site), 
                  zi=~spp + mined + (1|site), 
                  data=Salamanders, 
                  family=nbinom2)

# 自定义tidy函数,仅提取条件部分随机效应
tidy_cond_ranef <- function(x, ...) {
  broom.mixed::tidy(x, effects = "ran_vals", component = "cond", ...)
}

# 生成汇总表格
tbl_cond_ranef <- tbl_regression(
  zinbm2,
  tidy_fun = tidy_cond_ranef,
  include = `(1|site)`, # 仅显示随机效应
  show_single_row = `(1|site)` # 随机效应单行展示
)

tbl_cond_ranef

提取零膨胀部分(zi)的随机效应

只需将自定义函数中的component参数改为"zi":

tidy_zi_ranef <- function(x, ...) {
  broom.mixed::tidy(x, effects = "ran_vals", component = "zi", ...)
}

tbl_zi_ranef <- tbl_regression(
  zinbm2,
  tidy_fun = tidy_zi_ranef,
  include = `(1|site)`,
  show_single_row = `(1|site)`
)

tbl_zi_ranef

方案2:过滤已生成表格中的重复行

如果已经生成了包含重复行的表格,可通过modify_table_body函数,利用component列(broom.mixed输出自带)过滤掉不需要的子模型结果:

# 生成默认包含重复行的表格
tbl_default <- tbl_regression(zinbm2)

# 过滤保留条件部分的行
tbl_cond_filtered <- tbl_default %>%
  modify_table_body(
    filter,
    component == "cond" # 改为component == "zi"可保留零膨胀部分
  )

tbl_cond_filtered

补充说明

  • 若需要同时展示固定效应和目标部分的随机效应,只需调整include参数,例如include = c(spp, mined, (1|site))
  • component列是broom.mixed对glmmTMB模型输出的专属标识,可用来精准区分两个子模型的结果

内容的提问来源于stack exchange,提问作者J_Ramalho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:25:22