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

