联系客服
客服二维码

联系客服获取更多资料

微信号:LingLab1

客服电话:010-82185409

意见反馈
关注我们
关注公众号

关注公众号

linglab语言实验室

回到顶部
R语言元分析专题第五章:森林图

8106 阅读 2020-09-15 10:06:02 上传

以下文章来源于 荷兰心理统计联盟






之前的章节已经采用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

                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()






                    点赞
                    收藏
                    表情
                    图片
                    附件