R语言元分析专题第五章:森林图
*
之前的章节已经采用meta中的metagen,metacont或metabin函数创建了元分析输出(请参阅第4.1章,第4.2章和第4.3章),另一种在元分析文章中常报告的数据呈现方式是森林图。
5.1 生成森林图
我们使用刚新建的元分析输出数据(e.g., m, m.raw)以及meta::forest()函数来生成森林图。采用4.2.3章当中的m.hksj.raw输出数据来创建森林图。
forest(m.hksj.raw)
从上图可以看到该函数的森林图是由菱形(即总体效应和置信区间)和预测区间组成。一般而言,只要直接输入forest(data)就可以出森林图。我们还可以采用meta::forest其他的参数来调整森林图。
类型 | 参数 | 描述 |
普通 | sortvar | 排序变量。如,您可以使用“TE”按效果大小对森林图进行排序,或使用“Author”按作者姓名来排序 |
普通 | studlab | 该函数表明输出哪个变量作为该研究的标签。标准输出是“Author” |
普通 | comb.fixed | 是否绘制固定效应评估。(TRUE/FALSE) |
普通 | comb.random | 是否绘制随机效应评估。(TRUE/FALSE) |
普通 | overall | 是否绘制overall summaries。如果仅绘制组别(group)的summaries,则此参数对于元分析中的子组别(subgroup)非常有用 |
普通 | text.fixed | 图中标记合并的固定效应估计值的字符串。必须放入“”中。如,“Overall effect” |
普通 | text.random | 图中标记随机效应估计值的字符串。必须放入“”(e.g. “Overall effect”) |
普通 | col.fixed | 线条颜色(合并的固定效应估计值)。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
普通 | col.random | 线条颜色(随机固定效应估计值)。例如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
普通 | prediction | 是否输出预测区间 |
普通 | text.predict | 图中标记预测区间的字符串。如,“Prediction Interval” |
普通 | subgroup | 在森林图中,是否显示子组结果。如果不在组别水平上绘制summaries,则此参数可以用在子组别(subgroup)中。(TRUE/FALSE) |
普通 | print.subgroup. labels | 是否输出子组别(subgroup)标签。(TRUE/FALSE) |
普通 | study.results | 是否在图中显示单个研究结果(仅绘制子组别结果)。(TRUE/FALSE) |
普通 | xlab | 在“”里输入x轴底部的标签 |
普通 | smlab | 在“”里输入summary measure的标签 |
普通 | xlim | 该图的x范围(最小,最大)或字符 “s” 来生成对称的森林图。当结果偏离零或需要描述异常值时,尤其相关。如,从0到1.5的效应,xlim = c(0,1.5) |
普通 | ref | 森林图中以线条形式绘制的参考值。可以用来比较与常见阈值或先前分析的结果的效应。如,ref = 0.5 |
普通 | leftcols | 元分析中在图的左侧输出的变量,这些变量必须是你的输出中的一部分,使用name_of_your_output $查看所显示的变量。如 leftcols = c(“ TE”, “ seTE”) |
普通 | rightcols | 与leftcols类似,变量输出在图的右侧 |
普通 | leftlabs | 左侧列的名称。总是提供所有的标签。如, leftlabs=c(“Author”, “Effect size”, “Standard error”) |
普通 | rightlabs | 与leftlabs相同,右侧列的名称 |
普通 | print.I² | 是否输出I²统计值 |
普通 | print.I².ci | 是否输出I²统计的置信区间 |
普通 | squaresize | 增加或减小森林图中正方形大小的数字。如,squaresize = 1.2 |
颜色 | col.study | 个体研究结果和置信限的颜色。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
颜色 | col.inside | 如果置信限完全在方块内,个体研究结果和置信限的颜色。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
颜色 | col.square | 元分析中,反映研究权重的方块填充颜色。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
颜色 | col.square.lines | 元分析中,反映研究权重的方块的线条的颜色。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
颜色 | col.diamond | 设置固定效应和随机效应模型的结果的菱形的填充颜色。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
颜色 | col.diamond.fixed | 设置固定效应模型的结果的菱形的填充颜色。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
颜色 | col.diamond.random | 设置随机效应模型的结果的菱形的填充颜色。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
颜色 | col.diamond.lines | 设置固定效应和随机效应模型的结果的菱形外线的颜色。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
颜色 | col.diamond.lines. fixed | 设置固定效应模型结果的菱形外线的颜色。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
颜色 | col.diamond.lines. random | 设置随机效应模型结果的菱形外线的颜色。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
颜色 | col.inside.fixed | 如果置信限完全位于在方块内,固定效应元分析结果颜色。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
颜色 | col.inside.random | 如果置信区间完全位于在方块内,随机效应元分析结果的颜色。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
颜色 | col.predict | 预测区间的背景色。例如,“红色”,“蓝色””或十六进制颜色编号(“#2e8aff”) |
颜色 | col.predict.lines | 预测区间外线的颜色。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
颜色 | col.label.right | 零效应右侧的标签颜色。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
颜色 | col.label.left | 零效应左侧的标签颜色。如,“红色”,“蓝色”或十六进制颜色编号(“#2e8aff”) |
位数 | digits | 处理效应的最小有效位数 |
位数 | digits.se | 标准误的最小有效位数 |
位数 | digits.zval | 总体效应检验的z或t统计量的最小有效位数 |
位数 | digits.tau2 | 项目间变异的最小有效位数 |
位数 | digits.pval | 总处理效应p值的最小有效位数 |
位数 | digits.pval.Q | 异质性检验p值的最小有效位数 |
位数 | digits.Q | 异质性统计量Q的最小有效位数 |
位数 | digits.I² | 卡方检验的最小有效位数 |
位数 | digits.weight | 权重的最小有效位数 |
位数 | digits.mean | 平均数的最小有效位数 |
位数 | digits.sd | 标准差的最小有效位数 |
在界面中可以输入?meta :: forest来查看更多信息。
我们可以试一下改变森林图里的一些参数:
forest(m.hksj.raw,
sortvar=TE,
xlim = c(-1.5,0.5),
rightlabs = c("g","95% CI","weight"),
leftlabs = c("Author", "N","Mean","SD","N","Mean","SD"),
lab.e = "Intervention",
pooled.totals = FALSE,
smlab = "",
text.random = "Overall effect",
print.tau2 = FALSE,
col.diamond = "blue",
col.diamond.lines = "black",
col.predict = "black",
print.I2.ci = TRUE,
digits.sd = 2
)
forest(m.hksj.raw, #原始数据
sortvar=TE, #排序变量=TE,TE为告诉R使用TE这一列来提取每个研究的效应大小
xlim = c(-1.5,0.5), # 森林图的x轴的最大值和最小值,来产出一个对称的森林图。当结果偏离0值很大的时候,或者想要描述极端值的时候,这是相关的。
rightlabs = c("g","95% CI","weight"), # 右侧列是如何命名的,包括哪些标签
leftlabs = c("Author", "N","Mean","SD","N","Mean","SD"), #左侧列是如何命名的,包括哪些标签
lab.e = "Intervention", # 干预组或实验组的标签
pooled.totals = FALSE, # 不显示合并的总体效应量
smlab = " ", # summary measure的标签
text.random = "Overall effect", # 用来标记随机效应量合并值的字符
print.tau2 = FALSE, # 不输出tau²,研究间的变异
col.diamond = "blue", # 菱形填充颜色为“蓝色”
col.diamond.lines = "black", #菱形四条边长颜色为“黑色”
col.predict = "black", # 预测区间的颜色为“黑色”
print.I2.ci = TRUE, # 输出I²和置信区间
digits.sd = 2 # 标准差保留小数点后两位有效数字
)
对于特殊的布局类型,请转到第5.2章。
5.2 布局类型
meta :: forest函数还预先安装了两个我们可以使用的布局方式。可以使用layout参数来使用这些布局。
•“ RevMan5”布局。此布局用于Cochrane评论,并由Review Manager 5生成。
•“ JAMA”布局。该布局方式是根据JAMA美国医学协会杂志(Journal of the American Medical Association as output)的指南作为输出的格式,具体可以参考杂志官网:https://jamanetwork.com/journals/jama/pages/instructions-for-authors
RevMan布局使用代码如下所示:
forest(m.hksj.raw,
layout = "RevMan5",
digits.sd = 2) # 标准差的最小位数取2
JAMA布局使用代码如下所示:
forest(m.hksj.raw,
layout = "JAMA",
text.predict = "95% PI",
col.predict = "black",
colgap.forest.left = unit(15,"mm"))
JAMA布局使用代码如下(注释):
forest(m.hksj.raw, # 原始数据
layout = "JAMA", # 使用的布局模式
text.predict = "95% PI", # 在绘图中用于标记预测区间的字符串
col.predict = "black", # 预测区间的颜色
colgap.forest.left = unit(15,"mm") # colgap.forest.left参数指的
# 是forest plot左侧列与forest plot之间的空白的地方的字符串或者间隙是
# 多少(相应的还有colgap.forest.righ 参数),unit是指定对应数值的单位
# 的字符向量,可以用来设置距离,后面“mm”指单位毫米,也可以修改为其他
# 单位,具体可见使用手册。本句的意思是指左侧列和forest plot之间的
# 距离设定为15毫米。
5.3 保存森林图
接下来,假设你要保存森林图的JAMA版本,那么就要把绘制森林图所要用的代码放在导出格式的代码和结束语句dev.off( )之间。
下面提供三种不同格式的导出绘图代码:
1 |
pdf(file='forestplot.pdf')
forest.jama <- forest(m.hksj.raw,
layout = "JAMA",
text.predict = "95% PI",
col.predict = "black",
colgap.forest.left = unit(15,"mm"))
dev.off()
2 | PNG |
png(file='forestplot.png')
forest.jama <- forest(m.hksj.raw,
layout = "JAMA",
text.predict = "95% PI",
col.predict = "black",
colgap.forest.left = unit(15,"mm"))
dev.off()
3 | Scalable Vector Graphic(矢量图) |
svg(file='forestplot.svg')
forest.jama <- forest(m.hksj.raw,
layout = "JAMA",
text.predict = "95% PI",
col.predict = "black",
colgap.forest.left = unit(15,"mm"))
dev.off()
作者录屏反复多次,半夜还在赶……感谢免费分享。
笔记整理:罗小惠 刘芳芳
笔记校对:张美美
录屏:张美美
排版:杨伟文
往期精选:
问卷数据的因果关系推断 —工具变量模型在SPSS, R及Mplus中的实现
R元分析专题介绍:本活动是由荷兰心理统计联盟组织的第三次线上同辈互助学习活动,小组成员每周学习一章,并整理笔记录屏内容共享,从R基础到元分析效应量计算,作图,元分析高阶,如多水平meta, MetaSEM, network Meta-Analysis 。学习资料为《Doing Meta-Analsis in R 》这本书。笔记为小组成员整理(付费与否全由小组成员决定)
欢迎关注我们
一个专注于管理学及心理学学术研究的平台