如何用R的sjPlot包tab_model将多单变量模型合并为单列表格?
解决单变量模型表格合并与LaTeX导出问题
方案一:使用modelsummary包(推荐,简洁高效)
modelsummary专门针对多模型表格输出做了优化,支持直接将多个模型按行合并(单变量模型对应一行),无需手动整理数据。
1. 批量构建单变量GEE模型
先把18个预测变量整理成列表,用循环批量生成模型:
library(geepack) library(modelsummary) # 替换为你的18个预测变量名称 predictors <- c("var1", "var2", "var3", ..., "var18") # 批量生成GEE模型 gee_models <- lapply(predictors, function(var) { formula <- as.formula(paste("hospitalization ~", var)) geeglm(formula, id = record_id, data = dades, family = binomial, corstr = "ar1") }) # 给模型命名(对应预测变量,方便表格识别) names(gee_models) <- predictors
2. 生成合并格式的表格
通过shape="rbind"参数将所有模型结果合并到同一组列中,还可直接设置统计量、列名,以及转换为优势比(二项式模型常用):
modelsummary(gee_models, shape = "rbind", # 按行合并模型 coef_omit = "(Intercept)",# 隐藏截距项 statistic = c("conf.int", "p.value"), # 显示置信区间和P值 col_labels = c("OR值", "95%置信区间", "P值"), # 自定义中文列名 exponentiate = TRUE # 将对数优势比转换为OR值 )
3. 导出为LaTeX格式
直接通过output参数指定输出文件即可:
modelsummary(gee_models, shape = "rbind", coef_omit = "(Intercept)", statistic = c("conf.int", "p.value"), col_labels = c("OR值", "95%置信区间", "P值"), exponentiate = TRUE, output = "gee_single_var_table.tex" # 输出LaTeX文件 )
方案二:使用sjPlot原生函数实现
如果坚持用sjPlot,可以先提取每个模型的统计数据,再手动合并后生成表格:
1. 批量提取模型结果
library(sjPlot) library(dplyr) # 批量提取每个GEE模型的结果 gee_results <- lapply(seq_along(gee_models), function(i) { get_model_data(gee_models[[i]], show.intercept = FALSE) %>% mutate(Predictor = names(gee_models)[i]) # 添加预测变量名 }) %>% bind_rows()
2. 整理数据格式
合并后调整列顺序、重命名,并将置信区间合并为一列:
gee_results_clean <- gee_results %>% select(Predictor, estimate, conf.low, conf.high, p.value) %>% rename(`OR值` = estimate, `95% CI下限` = conf.low, `95% CI上限` = conf.high, `P值` = p.value) %>% mutate(`95%置信区间` = paste0("(", round(`95% CI下限`, 3), ", ", round(`95% CI上限`, 3), ")")) %>% select(Predictor, `OR值`, `95%置信区间`, `P值`)
3. 生成表格并导出LaTeX
用tab_df函数生成表格,指定file参数导出:
tab_df(gee_results_clean, file = "gee_single_var_table.tex")
内容的提问来源于stack exchange,提问作者Mia Colomar Riutort
相关产品推荐
相关产品推荐

