森林图的核心功能是同时展示单个研究结果和合并分析结果,并直观反映效应量是否具有统计学意义:当横线与无效线相交时,表示该研究无统计学显著差异;当横线完全位于无效线右侧或左侧时,分别表示因素为危险因素或保护因素。
森林图是Meta分析的一种图形表示法,直观地显示了Meta分析中所有研究之间的关联,并展示了所有结果的集合效应估计值和异质性。它之所以叫森林图是因为图形看起来像一个"线条森林"。
森林图的具体构成要素:每项研究用一条横线表示,表示该研究的效应量及其95%置信区间;横线中央的方块代表该研究的点估计值,方块大小反映研究的权重;菱形代表所有研究合并的效应量及可信区间;中间的竖线代表无效应线(通常为X=1或0)。
Meta分析森林图(Forest Plot)是用于系统评价和Meta分析的核心可视化工具,它通过整合多个独立研究的效应量及其置信区间,直观展示研究结果的异质性、整体效应及统计学显著性。
基本概念:
森林图以一条垂直的无效线(通常为X=1或0)为基准,用平行线段表示每个纳入研究的效应量(如OR、RR、HR、SMD等)及其95%置信区间(CI),并用菱形符号展示合并效应量及CI。
核心价值:
1.异质性评估:通过I²统计量(0~100%)量化研究间差异程度(如I²>50%提示显著异质性)。
2.效应量整合:合并结果反映干预措施的整体效果(如菱形位于无效线左侧表示保护因素)。
3.决策支持:快速识别显著结果(如CI不跨无效线)及争议性结论(如CI跨度大)。
森林图是Meta分析的“语言”,将复杂统计结果转化为直观图形,服务于科研决策与政策制定。其核心价值在于:
1⃣ 透明性:展示所有纳入研究及异质性来源;
2⃣ 综合性:合并效应量提供整体证据强度;
3⃣ 可操作性:指导模型选择(固定/随机效应)及临床/生态政策应用。
在比如我们有一个收集好的meta分析的数据库:
#环境整理
rm(list=ls()) #移除所有变量数据
install.packages("") #安装包
if (!require("")) install.packages("")
library() #加载包
plot() #快速绘制简单图
# 加载必要包
library(meta)
library(readxl)
library(ggplot2)
# 读取Excel数据
data <- read_excel("C:/Users/L/Desktop/meta森林图.xlsx") # 修改为实际路径
data
# 计算效应量及置信区间(使用随机效应模型)
result <- metaprop(event = m,
n = N,
data = data,
studlab = paste(author, time),
method = "Inverse",
sm = "PLOGIT",
comb.random = TRUE,
comb.fixed = FALSE)
# 绘制森林图
forest(result,
leftcols = c("studlab", "event", "n", "effect", "ci"),
leftlabs = c("Study", "Events", "Total", "Proportion", "95% CI"),
rightcols = FALSE,
xlab = "Proportion with 95% CI",
col.square = "blue",
col.diamond = "red",
print.tau2 = TRUE,
print.I2 = TRUE,
digits = 3)
# 保存为PDF
dev.copy(pdf, "C:/Users/L/Desktop/forest_plot01.pdf", width = 10, height = 12, family = "GB1")
dev.off()
# 计算效应量及置信区间(使用固定效应模型)
result3 <- metaprop(event = m,
n = N,
data = data,
studlab = paste(author, time),
method = "Inverse",
sm = "PLOGIT",
comb.random = FALSE,
comb.fixed = TRUE)
# 绘制森林图
forest(result3,
leftcols = c("studlab", "event", "n", "effect", "ci"),
leftlabs = c("Study", "Events", "Total", "Proportion", "95% CI"),
rightcols = FALSE,
xlab = "Proportion with 95% CI",
col.square = "blue",
col.diamond = "red",
print.tau2 = TRUE,
print.I2 = TRUE,
digits = 3)
# 计算效应量及置信区间(使用随机+固定效应模型)
result2 <- metaprop(event = m,
n = N,
data = data,
studlab = paste(author, time),
method = "Inverse",
sm = "PLOGIT",
comb.random = TRUE,
comb.fixed = TRUE)
# 绘制森林图
forest(result2,
leftcols = c("studlab", "event", "n", "effect", "ci"),
leftlabs = c("Study", "Events", "Total", "Proportion", "95% CI"),
rightcols = FALSE,
xlab = "Proportion with 95% CI",
col.square = "blue",
col.diamond = "red",
print.tau2 = TRUE,
print.I2 = TRUE,
digits = 3)
#----美化方案1:基础美化(基于meta包优化)----
library(meta)
library(ggplot2)
library(gridExtra) # 增强布局控制
# 读取数据
data <- read_excel("C:/Users/L/Desktop/meta森林图.xlsx")
# 计算效应量(随机效应模型)
result <- metaprop(event = m, n = N,
data = data,
studlab = paste(author, time),
method = "Inverse",
sm = "PLOGIT",
comb.random = TRUE,
comb.fixed = FALSE)
# 高颜值森林图参数设置
forest(result,
layout = "RevMan5", # 采用Cochrane协作网标准布局
col.diamond = "#4E79A7", # 钻石色改为深蓝
col.square = "#F28E2B", # 方块色改为橙色
col.line = "#333333", # 坐标轴深灰色
col.study = "black", # 研究标签黑色
fontsize = 10,
xlab = "事件发生率 (95% CI)",
xlim = c(0, 1), # 固定X轴范围
leftcols = c("studlab", "event", "n", "effect", "ci"),
leftlabs = c("研究", "事件数", "样本量", "发生率", "95% CI"),
rightcols = FALSE,
print.tau2 = TRUE,
print.I2 = TRUE,
digits = 3,
plotwidth = "8cm") # 优化图形宽度比例
#----美化方案2:交互式图表----
#交互式森林图能增强数据探索体验,特别是当研究数量较多时。
#plotly 支持悬停信息、缩放等交互功能,比静态图更利于结果展示。
library(meta)
library(plotly)
library(dplyr)
# 从result对象直接提取数据(避免依赖forest_res)
plot_data <- data.frame(
studlab = result$studlab,
TE = result$TE,
lower = result$lower,
upper = result$upper,
n = result$n # 确保原始数据包含样本量列
) %>%
mutate(
# 计算发生率(适用于PLOGIT转换)
proportion = exp(TE) / (1 + exp(TE)),
# 生成悬停文本
hover_text = paste(
"研究:", studlab, "<br>",
"发生率:", round(proportion, 3), "<br>",
"95% CI: [", round(lower, 3), ",", round(upper, 3), "]<br>",
"样本量:", n
)
)
# 单独提取合并效应量
combined_effect <- data.frame(
TE = result$TE.random,
lower = result$lower.random,
upper = result$upper.random,
studlab = "合并效应"
)
plot_ly() %>%
# 添加置信区间线段(修复坐标缺失错误)
add_segments(
data = plot_data,
x = ~lower, xend = ~upper,
y = ~studlab, yend = ~studlab,
color = I("#499894"),
line = list(width = 1.5),
showlegend = FALSE
) %>%
# 添加效应量点
add_markers(
data = plot_data,
x = ~TE, y = ~studlab,
size = ~sqrt(n), # 点大小关联样本量
color = I("#4E79A7"),
marker = list(opacity = 0.8, sizemode = "diameter"),
hoverinfo = "text",
text = ~hover_text
) %>%
# 添加合并效应钻石
add_trace(
data = combined_effect,
x = ~TE, y = ~studlab,
type = 'scatter',
mode = 'markers',
marker = list(
symbol = "diamond",
size = 20,
color = "#F28E2B",
line = list(width = 1, color = "black")
),
name = "合并效应",
hoverinfo = "text",
text = ~paste(
"合并效应量:", round(TE, 3), "<br>",
"95% CI: [", round(lower, 3), ",", round(upper, 3), "]"
)
) %>%
# 添加异质性标注
add_annotations(
text = paste("异质性检验: I² =", round(100*result$I2,1), "%, τ² =", round(result$tau2,3)),
xref = "paper", yref = "paper",
x = 0.95, y = 0.02,
showarrow = FALSE,
font = list(size = 12)
) %>%
# 设置布局
layout(
title = list(text = "交互式Meta分析森林图", font = list(size = 18)),
xaxis = list(
title = "效应量 (logit尺度)",
gridcolor = "#eee",
zerolinecolor = "#aaa"
),
yaxis = list(
title = "",
categoryorder = "total ascending", # 按效应量排序
tickfont = list(size = 11)
),
hoverlabel = list(bgcolor = "white", font = list(size = 12)),
margin = list(l = 150, r = 50) # 左侧留足研究名空间
)
!!!可加我粉丝群!!!
医学统计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文返修,医学统计,机器学习,生存分析,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!
往期推荐:样本含量估计(样本量计算与功效分析)
往期推荐:SPSS、R语言、Python等临床数据分析专题
往期推荐:科研图表绘制专题
往期推荐:重复测量数据分析专题
往期推荐:生信分析、基因测序数据、实验室数据专题
往期推荐:生存分析及机器学习
往期推荐:二分类因变量机器学习及相关评价可视化
技术分享|如何综合评价临床预测模型?手把手教你学会9种机器学习模型×5种模型评价曲线的综合评价方法(附Python批处理代码)
一文读懂十模型lasso、贝叶斯、KNN、Logistic、决策树、随机森林、SVM、神经网络、XGBoost、lightGBM
一文读懂十模型lasso、贝叶斯、KNN、Logistic、决策树、随机森林、SVM、神经网络、XGBoost、lightGBM
【Python机器学习】十分钟读懂Logistic、决策树、随机森林、SVM、神经网络、XGBoost、lightGBM七种模型
【R语言机器学习】十分钟读懂Logistic回归、决策树、随机森林、SVM、神经网络、XGBoost、lightGBM七种模型
往期推荐:时间序列分析
往期推荐:地统计分析-GIS、地图、相关、聚类、回归
往期推荐:科研自动化探究
往期推荐:趣味阅读
把冰箱门
打开
把大象
放进去
把冰箱门
关上
了解数据构成和预期分析结果,根据工作量议价
R语言、SPSS、Python、ArcGis、GraphPad等... ...
根据分析结果整理三线表,简单结果解释文本,出图优化与组合排版
结果报告交付后,根据客户优化建议进行方法结果调整

