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

求助:用ggplot2绘制仅含亚组效应量的Meta分析亚组图

解决方案

要实现仅展示pH亚组汇总结果的ggplot2森林图,核心是从已完成的meta分析对象中提取亚组的合并效应量及置信区间,再用ggplot2的几何图层可视化。

完整代码

library(ggplot2)
library(meta)

# --- 原始数据与Meta分析代码(保留不变)---
study <- c("Study 1","Study 2","Study 3","Study 4","Study 5",
           "Study 6","Study 7","Study 8","Study 9","Study 10",
           "Study 11","Study 12","Study 13","Study 14","Study 15")
nT <- c(155,31,75,18,8,57,34,110,60,20,11,32,36,97,80)
meanT <- c(55,27,64,66,14,19,52,21,30,45,32,80,40,25,70)
sdT <- c(47,7,17,20,8,7,45,16,27,11,6,22,31,4,32)
nC <- c(156,32,71,18,13,52,33,183,52,22,14,32,44,93,81)
meanC <- c(75,29,119,137,18,18,41,31,23,16,44,65,22,11,90)
sdC <- c(64,4,29,48,11,4,34,27,20,5,21,37,8,2,55)
pH <- c("high","low","high","low","low","high","low","high",
        "high","low","low","low","low","high","high")
dt <- data.frame(study,nT,meanT,sdT,nC,meanC,sdC,pH)

dt$pH <- factor(dt$pH, levels = c("low", "high"))
m1 <- metacont(nT, meanT, sdT,
               nC, meanC, sdC,
               fixed = FALSE,
               random = TRUE,
               subgroup = pH,
               data = dt)

# --- 提取亚组汇总数据并绘图 ---
# 从Meta分析对象中提取亚组随机效应结果
subgroup_summary <- data.frame(
  pH_level = c("Low pH", "High pH"),  # 自定义显示标签
  mean_diff = m1$TE.random.by,        # 合并均数差(效应量)
  ci_lower = m1$lower.random.by,      # 95%置信区间下限
  ci_upper = m1$upper.random.by,      # 95%置信区间上限
  weight = m1$w.random.by             # 亚组权重(用于调整点大小)
)

# 用ggplot2绘制亚组森林图
ggplot(subgroup_summary, aes(x = pH_level, y = mean_diff)) +
  # 添加效应量为0的参考线(判断统计学显著性)
  geom_hline(yintercept = 0, linetype = "dashed", color = "gray", linewidth = 0.8) +
  # 绘制点(效应量)和误差线(置信区间),点大小与权重挂钩
  geom_pointrange(aes(ymin = ci_lower, ymax = ci_upper, size = weight), 
                  color = "#2E86AB", fatten = 1.5) +
  # 在点上方显示效应量和95%CI的文本
  geom_text(aes(label = sprintf("%.2f\n(%.2f, %.2f)", mean_diff, ci_lower, ci_upper)),
            vjust = -2, size = 4, color = "#2E86AB") +
  # 自定义标签和标题
  labs(
    title = "Meta-Analysis Subgroup Results by pH Level",
    y = "Mean Difference (Treatment vs Control)",
    x = "pH Subgroup",
    size = "Subgroup Weight"
  ) +
  # 调整主题样式,提升可读性
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    axis.title = element_text(size = 12),
    axis.text = element_text(size = 10)
  ) +
  # 限制权重图例的大小范围(可选)
  scale_size_continuous(range = c(2, 4))

关键说明

  1. 数据提取逻辑:直接从m1对象中获取亚组的随机效应核心指标,无需额外计算:

    • TE.random.by:亚组合并均数差
    • lower.random.by/upper.random.by:95%置信区间上下限
    • w.random.by:亚组在合并分析中的权重
  2. 可视化细节:

    • 虚线参考线对应效应量为0的位置,若置信区间不与该线相交,则亚组结果具有统计学显著性
    • 点的大小与亚组权重成正比,直观体现亚组对合并结果的贡献
    • 文本标签直接展示效应量和置信区间,无需额外查看数值表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:37:13