使用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
相关产品推荐
相关产品推荐

