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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 01:30:05