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

如何基于Hmisc实现多亚组汇总表合并与并列点图绘制

扩展Hmisc::summary.formula实现多亚组双处理组汇总与并列点图

1. 生成整合式多亚组双处理组汇总表格

默认Hmisc::summary.formula仅支持单组或单一拆分变量的汇总输出,要同时展示两个处理组的亚组统计结果,可通过自定义包装函数整合不同处理组的汇总:

实现代码

library(Hmisc)
library(tidyverse)
data(pbc)

# 自定义合并汇总函数
merged_subgroup_summary <- function(data, group_vars, outcome_var, trt_var) {
  # 按处理组拆分数据集
  trt_splits <- split(data, data[[trt_var]])
  
  # 批量生成各处理组的亚组汇总
  trt_summaries <- lapply(trt_splits, function(sub_df) {
    sum_formula <- as.formula(paste(outcome_var, "~", paste(group_vars, collapse = "+")))
    sum_output <- summary.formula(sum_formula, data = sub_df, method = "response")
    
    # 转换为结构化数据框并添加处理组标识
    as.data.frame(sum_output$stats) %>%
      rownames_to_column("subgroup") %>%
      mutate(trt = unique(sub_df[[trt_var]]))
  })
  
  # 合并结果并重塑为宽表,实现同亚组双处理组统计量并列
  bind_rows(trt_summaries) %>%
    pivot_wider(
      names_from = trt,
      values_from = c(N, Mean, SD, Median, `Lower 95%`, `Upper 95%`),
      names_glue = "{.value}_trt{trt}"
    ) %>%
    arrange(subgroup)
}

# 生成整合汇总表
combined_table <- merged_subgroup_summary(
  data = pbc,
  group_vars = c("sex", "stage", "ascites", "spiders"),
  outcome_var = "chol",
  trt_var = "trt"
)

# 查看结果
print(combined_table, row.names = FALSE)

逻辑说明

  • 按处理组拆分数据集,分别调用summary.formula生成亚组统计结果
  • 将每个处理组的汇总转换为数据框,添加处理组标识后合并
  • 通过pivot_wider重塑为宽表,让同一亚组的两个处理组统计量并列展示

2. 基于汇总结果生成并列点图

利用整合后的表格,可直接用ggplot2生成展示双处理组亚组均值及置信区间的并列点图:

实现代码

# 整理绘图数据为长格式
plot_ready_data <- combined_table %>%
  pivot_longer(
    cols = starts_with("Mean_trt"),
    names_to = "treatment",
    values_to = "mean_chol",
    names_prefix = "Mean_trt"
  ) %>%
  mutate(
    treatment = factor(treatment, labels = c("处理组1", "处理组2")),
    lower_ci = get(paste0("Lower 95%_trt", treatment)),
    upper_ci = get(paste0("Upper 95%_trt", treatment))
  )

# 绘制并列点图
ggplot(plot_ready_data, aes(x = subgroup, y = mean_chol, color = treatment)) +
  geom_point(position = position_dodge(width = 0.6), size = 3) +
  geom_errorbar(
    aes(ymin = lower_ci, ymax = upper_ci),
    position = position_dodge(width = 0.6),
    width = 0.2
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(
    x = "亚组类别",
    y = "胆固醇均值(95%置信区间)",
    color = "处理组",
    title = "不同亚组双处理组胆固醇水平对比"
  )

逻辑说明

  • 将宽表转换为长格式,统一处理组标识和对应统计量
  • 使用position_dodge实现点和误差棒的并列展示,避免重叠
  • 调整x轴标签角度提升可读性,添加清晰的图表标注

贴近原生调用的扩展包装函数

如果需要更贴近summary.formula的原生调用方式,可封装专用函数:

summary.formula_trt <- function(formula, data, trt_var, ...) {
  # 提取公式中的结果变量和分组变量
  term_obj <- terms(formula)
  outcome_var <- as.character(term_obj[[2]])
  group_vars <- attr(term_obj, "term.labels")
  
  # 调用合并汇总函数
  merged_subgroup_summary(data, group_vars, outcome_var, trt_var)
}

# 调用示例
extended_summary <- summary.formula_trt(
  chol ~ sex + stage + ascites + spiders,
  data = pbc,
  trt_var = "trt"
)

内容的提问来源于stack exchange,提问作者Ahir Bhairav Orai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:30:55