見出し画像

Foresterで快適なforestplotを作ろうじゃないか

こんにちわ、初めての投稿です。
これから少しずつ自分で調べたRの話や、自分の本業のTalkでもできればと思います。
本記事はR初心者が書いておりますのでどうか温かい目で見ていただければ嬉しいです。

<Forestplotの作成で困ったことはないですか?>

本noteの目的:forestplotを作る。

論文のFigureを作成しているときや、論文を読んでいる時にこのような図を見たことはないでしょうか?
今回はForestableというライブラリを紹介いたします。
Github Link : Forester (By Dr.Randall Boyes) (まだR-CRANには未収載のようです。)

*使い始めたときは名前がforestableだった気がしますが、急にforesterに変わった?


スクリーンショット 2021-01-12 22.07.50

参照:R forestable

スクリーンショット 2021-01-12 22.10.01

参照リンク

ggplot2(R)同様、この類は作り始めてしまうと凝ってしまうものですよね。例えば、
1. ここは大文字にしたいのに...  
2. Referenceをおいてそれに対するHazard ratioを起きたいんだけど...
みたいな。さらには
3. Fontも変えたいとか
4.小数点も2桁で表示したいわ...とか。

詳細は明かせませんが、現在行っている研究でもForestplotの作成で非常に難渋していました。最初はggforestを用いたりしたんですが、訳あってFitしなかったので代替となるものを探していました。

試したライブラリは
*ggforest
*forestplot
だけなんですが、細かい修正がしにくいなぁと感じておりました。
上記の2つとは違って、今回紹介する"forester"はエクセルやデータフレームから作成するようです。

<早速使用してみる>
Excel data:
https://github.com/rdboyes/forester/blob/master/inst/extdata/example_figure_data.xlsx
からダウンロード

#Install package and load library

install.packages("devtools")
library(devtools)
devtools::install_github("rdboyes/forester")
library(forester)

github公式にも記載があるのですが、R-CRANには収載されていないためdevtoolsというライブラリを用いてgithubからパッケージをインストールする必要があります。その際に古いverのものをinstallしてあると最新のものに置き換えるように勧告されるようでした。
(その際は指定されたものを新しくinstall.package("XXX")で置き換えていました。)

github 公式リンクに沿って説明していきますね。
リンクには記載がないことも説明してあります。

まずエクセルデータから読み込むのでエクセルデータがどんな感じで入っているかは確認しておきましょう。

スクリーンショット 2021-01-12 22.43.47

#エクセルは上記リンクから手に入れる (example_figure_data.xlsxという名前で保存しておく。csvならread.csv使用)

table <-readxl::read_excel("example_figure_data.xlsx"))

# これは上記図でいうところのHypertension No/Yesとかのところのインテンド作成
table$Subgroup <- ifelse(is.na(table$Placebo), 
                        table$Subgroup,
                        paste0("   ", table$Subgroup))

                    
# remove indent of the first row
table$Subgroup[1] <- "All Patients"

# use forester to create the table with forest plot
forester(left_side_data = table[,1:3],
          estimate = table$Estimate,
          ci_low = table$`CI low`,
          ci_high = table$`CI high`,
          display = FALSE,
          xlim = c(-100, 25),
          file_path = here::here("forester_plot.png"))

このコードだけで下記のFigureが作成できるわけです.

警告メッセージではないようですが、下記メッセージが出ます。
無視しましょう。

#> Scale for 'x' is already present. Adding another scale for 'x', which will
#> replace the existing scale.
#> Scale for 'x' is already present. Adding another scale for 'x', which will
#> replace the existing scale.
#> Warning: Removed 8 rows containing missing values (geom_point).
#> Warning: Removed 8 rows containing missing values (geom_errorbarh).


スクリーンショット 2021-01-12 22.07.50

上記コードが基本になるわけですが、引数の説明は下記の画像を参照してください。そんなに難しくないはずです。

スクリーンショット 2021-01-12 23.07.26

まずざっと確認したところで、引数を確認してみます。Link

forester <- function(left_side_data,
                   estimate,
                   ci_low,
                   ci_high,
                   right_side_data = NULL,
                   estimate_precision = 1,
                   ggplot_width = 30,
                   null_line_at = 0,
                   file_path = here::here("forester_plot.png"),
                   dpi = 600,
                   display = TRUE,
                   blank_na = TRUE,
                   font_family = "mono",
                   estimate_col_name = "Estimate",
                   stripe_colour = "#eff3f2",
                   x_scale_linear = TRUE,
                   xlim = NULL,
                   xbreaks = NULL,
                   nudge_y = NULL,
                   arrows = FALSE,
                   arrow_labels = c("Lower", "Higher"),
                   add_plot = NULL,
                   add_plot_width = 0.3 ......

自分が色々と使った引数だけ説明しますね。

スクリーンショット 2021-01-12 23.17.37

ざっとこんな感じでしょうか。

ggforestでは下記画像のようにReferenceが出ると思いますが、forestplotではメタ解析を基準に考えられているからか、Referenceが出ないようでした。(出し方知っていたら教えてください)

スクリーンショット 2021-01-12 23.18.40

こんなReferenceを出したい場合は、元のエクセルにReference 1 と打って上記のコードを打てば良いと思います。

ざっと、説明は以上です!

是非皆さん使用してみてください。

ところでファイルはpngで保存していますが、jpgでも良いと思いますし、wmf(windows meta file)形式で保存しても良いと思います。 (Windowsのみ)
私は細かい微調整がしたいので、wmfファイルで保存して、パワーポイントで読み込んでグループ化の解除をして編集することにしました。
(先述のReferenceを作成する場合は、必須になります)

長い記事でしたが、ここまで読んでいただいてありがとうございます。

人生初のBlog的なものがRの記事になるとは思いませんでしたがすんなり欠けたのはこのnoteの素晴らしいプラットフォームのおかげですね。
参考になった方は是非いいね!でもしてくださると嬉しいです。

Yuki Sahashi

この記事が気に入ったらサポートをしてみませんか?