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

如何用modelsummary包并排展示含/不含优势比的逻辑回归结果?

解决方法:将逻辑回归系数与优势比并排展示

方法一:手动整理系数表后合并输出

先分别提取两种格式的系数结果,合并为统一的数据框,再用modelsummary生成并排表格:

library(modelsummary)
library(dplyr)

# 拟合逻辑回归模型
log_model <- glm(vs ~ am, family = binomial(link = 'logit'), data = mtcars)

# 获取非指数化(原始系数)和指数化(优势比)的系数表
tidy_raw <- tidy(log_model, exponentiate = FALSE) %>% mutate(model = "原始系数")
tidy_or <- tidy(log_model, exponentiate = TRUE) %>% mutate(model = "优势比")

# 合并两个系数表
combined_data <- bind_rows(tidy_raw, tidy_or) %>%
  select(model, term, estimate, std.error, statistic, p.value)

# 生成并排展示的表格
modelsummary(combined_data, 
             shape = term ~ model,  # 设置表格结构为行=变量,列=模型/格式
             fmt = "%.3f",  # 数值保留三位小数
             title = "逻辑回归结果:原始系数 vs 优势比")

方法二:自定义tidy函数实现模型级指数化控制

给模型添加属性标记,通过自定义tidy_custom函数,让不同模型应用不同的指数化规则:

library(modelsummary)

# 拟合基础模型
log_model <- glm(vs ~ am, family = binomial(link = 'logit'), data = mtcars)

# 复制模型并添加"需要指数化"的属性
log_model_or <- log_model
attr(log_model_or, "exponentiate") <- TRUE

# 针对glm模型定义自定义tidy处理函数
tidy_custom.glm <- function(x, ...) {
  # 读取模型的指数化属性,默认不指数化
  need_exp <- attr(x, "exponentiate", default = FALSE)
  # 根据属性返回对应格式的系数表
  return(broom::tidy(x, exponentiate = need_exp, ...))
}

# 直接传入模型列表生成并排表格
modelsummary(list("原始系数" = log_model, "优势比" = log_model_or),
             fmt = "%.3f",
             title = "逻辑回归结果:原始系数 vs 优势比")

两种方法都能生成HTML格式的并排表格,方法一适合快速实现,方法二更适合需要批量处理多个模型的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:33:20