如何在modelsummary回归表中同行展示R²与边际R²?
解决方法:自定义统计量合并R²行
要把lm模型的常规R²和glmmTMB的边际R²放在同一行,核心是用modelsummary的自定义统计量功能,让两个模型的对应统计项共用同一个名称,表格就会自动把它们合并到同一行,同时还能保留你之前添加的FE/RE标注行。
下面是完整可运行的代码,包含示例数据、模型拟合、自定义统计量和表格生成:
# 加载所需包 library(modelsummary) library(glmmTMB) library(tidyverse) # 生成示例数据 set.seed(123) dat <- tibble( y = rnorm(100), x1 = rnorm(100), x2 = rnorm(100), group = sample(LETTERS[1:10], 100, replace = TRUE) ) # 拟合模型 lm_model <- lm(y ~ x1 + x2, data = dat) glmm_model <- glmmTMB(y ~ x1 + x2 + (1 | group), data = dat) # 自定义统计量函数:给两个模型的R²指定统一名称 custom_r2 <- function(model) { if (inherits(model, "lm")) { # lm模型取常规R² r2 <- summary(model)$r.squared return(tibble(term = "R²", value = r2)) } else if (inherits(model, "glmmTMB")) { # glmmTMB模型取边际R²(依赖MuMIn包) library(MuMIn) r2_marginal <- r.squaredGLMM(model)[["R2m"]] return(tibble(term = "R²", value = r2_marginal)) } } # 生成表格:整合自定义统计量与FE/RE标注 modelsummary( list("FE" = lm_model, "RE" = glmm_model), # 禁用默认R²统计量,避免重复 gof_omit = "R2", # 添加自定义的统一R²统计项 add_stat = custom_r2, # 保留你的FE/RE标注行 add_rows = tibble( term = c("模型类型", ""), FE = c("固定效应", ""), RE = c("随机效应", "") ), # 调整数值格式 fmt = 3 )
关键细节说明:
custom_r2函数会根据模型类型返回对应R²,且统一用R²作为统计项名称,这是让两行合并的核心。gof_omit = "R2"用来关闭默认的R²统计输出,防止出现重复行。glmmTMB的边际R²需要依赖MuMIn包的r.squaredGLMM函数,运行前确保已安装该包。add_rows部分完全保留了你原来的标注逻辑,清晰区分固定效应和随机效应模型。
生成后的表格会在同一行的R²项中,分别显示lm模型的常规R²和glmmTMB模型的边际R²,同时保留FE/RE的标注行。
内容的提问来源于stack exchange,提问作者YouLocalRUser
相关产品推荐
相关产品推荐

