R 言語は、forestploter パッケージを使用して単一グループおよび二重グループの森林マップを描画します (2) (超詳細なメモ付き)

フォレスト プロットは論文で非常に一般的で、主に多因子分析における変数と結果変数の比率効果を表すために使用され、グラフィカルな方法で直感的に描画できます。以前、「R言語で多因子回帰分析の森林マップをさくっと描く(1)」という記事で森林マップの描き方を紹介しましたが、比較的単純な描画であまり綺麗ではなく、比較的複雑な森林地図を描くことが可能です。本日は、forestplot パッケージをベースに、さらに機能を強化したものに相当し、制作方法が比較的シンプルで、グラフィックスの細かな制御が強化され、単一グループおよび複数グループのフォレストを実現する、forestploter パッケージを紹介します。地図を描くことができます。
ここに画像の説明を挿入
まず、R パッケージとデータをインポートします

library(grid)
library(forestploter)
dt<-read.csv("E:/r/test/forest2.csv",sep=',',header=TRUE)

ここに画像の説明を挿入
こちらは森林地図データです(公式アカウント返信:森林地図データ2、データが入手できます) 面倒な方はこちらからダウンロードできます: https://download.csdn.net/download/dege857/86945654 ?spm=1001.2014 .3001.5501
最初のいくつかの変数について説明します。 サブグループ: グループ化、つまりグループとサブグループ。 治療: 治療グループ内の症例数。 プラセボ: プラセボの使用、つまり治療グループ内の症例数。コントロールグループ。Est: OR または HR の効果値、low: 信頼区間の下限とみなせる効果値の最低値、hi: 信頼区間の下限とみなせる効果値の最高値。信頼区間の上限。
まずは基本的な森林地図を描きましょう。次のいくつかのデータは当面は必要ありません。まずデータを単純化しましょう。

dt <- dt[,1:6]
View(dt)

ここに画像の説明を挿入
データは合理化されたデータ (上図) になりました。まずデータ形式を整理しましょう。最初にスペースを 1 つインデントします。

dt$Subgroup <- ifelse(is.na(dt$Placebo), 
                      dt$Subgroup,
                      paste0("   ", dt$Subgroup))

ここに画像の説明を挿入
次に、治療群と対照群のNA(欠落)箇所を空間化します。

dt$Treatment <- ifelse(is.na(dt$Treatment), "", dt$Treatment)
dt$Placebo <- ifelse(is.na(dt$Placebo), "", dt$Placebo)

ここに画像の説明を挿入
描画時の正方形のサイズを表す変数 se を生成します。

dt$se <- (log(dt$hi) - log(dt$est))/1.96

描画間隔を生成します。これは後の描画に使用されます。

dt$` ` <- paste(rep(" ", 20), collapse = " ")

HR と信頼区間を生成する

dt$`HR (95% CI)` <- ifelse(is.na(dt$se), "",
                           sprintf("%.2f (%.2f to %.2f)",
                                   dt$est, dt$low, dt$hi))#sprintF返回字符和可变量组合

最後に描画データを取得し
ここに画像の説明を挿入
、データを整理して描画することができます。

p <- forest(dt[,c(1:3, 8:9)],
            est = dt$est,       #效应值
            lower = dt$low,     #可信区间下限
            upper = dt$hi,      #可信区间上限
            sizes = dt$se,     #黑框的大小
            ci_column = 4,   #在那一列画森林图,要选空的那一列
            ref_line = 1,
            arrow_lab = c("Placebo Better", "Treatment Better"),
            xlim = c(0, 4),
            ticks_at = c(0.5, 1, 2, 3),
            footnote = "This is the demo data. Please feel free to change\nanything you want.")
p

ここに画像の説明を挿入
一部の森林マップには P 値があるのですが、P 値がない場合はどうすればよいですか、P 値を追加できるのではないかと尋ねる人もいるかもしれません。

dt$p <- paste(rep("<0.05", 22))

再描画

p <- forest(dt[,c(1:3, 8:10)],
            est = dt$est,       #效应值
            lower = dt$low,     #可信区间下限
            upper = dt$hi,      #可信区间上限
            sizes = dt$se,     #黑框的大小
            ci_column = 4,   #在那一列画森林图,要选空的那一列
            ref_line = 1,
            arrow_lab = c("Placebo Better", "Treatment Better"),
            xlim = c(0, 4),
            ticks_at = c(0.5, 1, 2, 3),
            footnote = "This is the demo data. Please feel free to change\nanything you want.")
p

このようにしてP値が出てきます
ここに画像の説明を挿入
グラフ生成後、グラフの詳細も調整します 最後1行目に総件数を入れて集計に変更し、その内容を変更します全体に名前を付けます。

dt_tmp <- rbind(dt[-1, ], dt[1, ])
dt_tmp[nrow(dt_tmp), 1] <- "Overall"

ここに画像の説明を挿入
Forest_theme関数は森の絵の詳細を調整することができ、あらかじめ決められた森スタイルモジュールをforest_theme関数に設定して、直接描画することができます。

tm <- forest_theme(base_size = 10,  #文本的大小
                   # Confidence interval point shape, line type/color/width
                   ci_pch = 15,   #可信区间点的形状
                   ci_col = "#762a83",    #CI的颜色
                   ci_fill = "blue",     #ci颜色填充
                   ci_alpha = 0.8,        #ci透明度
                   ci_lty = 1,            #CI的线型
                   ci_lwd = 1.5,          #CI的线宽
                   ci_Theight = 0.2, # Set an T end at the end of CI  ci的高度,默认是NULL
                   # Reference line width/type/color   参考线默认的参数,中间的竖的虚线
                   refline_lwd = 1,       #中间的竖的虚线
                   refline_lty = "dashed",
                   refline_col = "grey20",
                   # Vertical line width/type/color  垂直线宽/类型/颜色   可以添加一条额外的垂直线,如果没有就不显示
                   vertline_lwd = 1,              #可以添加一条额外的垂直线,如果没有就不显示
                   vertline_lty = "dashed",
                   vertline_col = "grey20",
                   # Change summary color for filling and borders   更改填充和边框的摘要颜色
                   summary_fill = "yellow",       #汇总部分大菱形的颜色
                   summary_col = "#4575b4",
                   # Footnote font size/face/color  脚注字体大小/字体/颜色
                   footnote_cex = 0.6,
                   footnote_fontface = "italic",
                   footnote_col = "red")

モジュールをセットアップした後、直接描画できます

pt <- forest(dt_tmp[,c(1:3, 8:9)],
             est = dt_tmp$est,
             lower = dt_tmp$low, 
             upper = dt_tmp$hi,
             sizes = dt_tmp$se,
             is_summary = c(rep(FALSE, nrow(dt_tmp)-1), TRUE),
             ci_column = 4,
             ref_line = 1,
             arrow_lab = c("Placebo Better", "Treatment Better"),
             xlim = c(0, 4),
             ticks_at = c(0.5, 1, 2, 3),
             footnote = "This is the demo data. Please feel free to change\nanything you want.",
             theme = tm)

plot(pt)

ここに画像の説明を挿入
画像の詳細を変更することもできます。たとえば、3 行目を赤にしたいなどです。

g <- edit_plot(p, row = 3, gp = gpar(col = "red", fontface = "italic"))
g

ここに画像の説明を挿入
行 3、6、10、および 11 のブロックとストリップの色を緑色に変更します。

g <- edit_plot(g,
               row = c(3, 6, 11, 13),
               col = 4,
               which = "ci",
               gp = gpar(col = "green"))
g

ここに画像の説明を挿入
2、5、10、13、17、20行目のテキストを太字にします

g <- edit_plot(g,
               row = c(2, 5, 10, 13, 17, 20),
               gp = gpar(fontface = "bold"))
g

ここに画像の説明を挿入
5行目の背景を緑色に変更します

g <- edit_plot(g, row = 5, which = "background",
               gp = gpar(fill = "darkolivegreen1"))
g

ここに画像の説明を挿入
上部にテキストを挿入する

g <- insert_text(g,
                 text = "Treatment group",
                 col = 2:3,
                 part = "header",
                 gp = gpar(fontface = "bold"))
g

ここに画像の説明を挿入
タイトルの下に下線を追加します

g <- add_underline(g, part = "header")
g

ここに画像の説明を挿入
10行目の位置にテキストを挿入します

g <- insert_text(g,
                 text = "This is a long text. Age and gender summarised above.\nBMI is next",
                 row = 10,
                 just = "left",
                 gp = gpar(cex = 0.6, col = "green", fontface = "italic"))

g

ここに画像の説明を挿入
マルチグループ森林マップの描画方法を紹介します。ペアグループ森林マップの描画には、複数のグループのデータが必要です。データを再インポートしてみましょう

dt<-read.csv("E:/r/test/forest2.csv",sep=',',header=TRUE)

見栄えを良くするためにインデントを設定します。この手順は前と同じです。

dt$Subgroup <- ifelse(is.na(dt$Placebo), 
                      dt$Subgroup,
                      paste0("   ", dt$Subgroup))#######如果变量没有缺失,就缩进一格,也就是前进一格

二重グループ変数なので 2 n を設定する必要があります。この手順は基本的に前と同じです。

dt$n1 <- ifelse(is.na(dt$Treatment), "", dt$Treatment)###将缺失的部分变为空格
dt$n2 <- ifelse(is.na(dt$Placebo), "", dt$Placebo)

2 つの森林地図を描きたいので、絵を描くために 2 つの空きスペースを追加する必要があります。

dt$`CVD outcome` <- paste(rep(" ", 20), collapse = " ")
dt$`COPD outcome` <- paste(rep(" ", 20), collapse = " ")

フォレスト マップのいくつかの基本パラメータを設定します。この手順は前と同じです。

tm <- forest_theme(base_size = 10,
                   refline_lty = "solid",   #参考线类型
                   ci_pch = c(15, 18),
                   ci_col = c("#377eb8", "#4daf4a"),
                   footnote_col = "blue",
                   legend_name = "Group",   #设置标题名字
                   legend_value = c("Trt 1", "Trt 2"),   #设置分组名字
                   vertline_lty = c("dashed", "dotted"),
                   vertline_col = c("#d6604d", "#bababa"))

最後に描画します。ここで言いたいのは、ci_column = c(3, 5) は列 3 と 5 の描画を指し、est_gp1 と est_gp2 はグループ、est_gp3 と est_gp4 はグループなどです。

p <- forest(dt[,c(1, 19, 21, 20, 22)],
            est = list(dt$est_gp1,
                       dt$est_gp2,
                       dt$est_gp3,
                       dt$est_gp4),
            lower = list(dt$low_gp1,
                         dt$low_gp2,
                         dt$low_gp3,
                         dt$low_gp4), 
            upper = list(dt$hi_gp1,
                         dt$hi_gp2,
                         dt$hi_gp3,
                         dt$hi_gp4),
            ci_column = c(3, 5),
            ref_line = 1,
            vert_line = c(0.5, 2),
            nudge_y = 0.2,
            theme = tm)

p

ここに画像の説明を挿入
最後に、2 つのグループの森林マップも描画され、1 つのグループのように調整することもできます。これは私が書いた中で最も詳細なものになるはずですが、15 ページかかりました。

おすすめ

転載: blog.csdn.net/dege857/article/details/127859291