みなさん,Rmarkdownは使っていますか?
Rmarkdownを使えば,コードとその結果,コメントを一つのファイルにまとめることができます*1.
私が考えるRmarkdownの良いところは,次の3つです.
- データ解析の再現性を保てる
- データ解析結果を共有する人に合わせて,出力する情報量を調整できる
- 出力が綺麗
データ解析の再現性を保てる
SPSSやJMPといったポチポチ押しながら解析を進めるソフトは,確かに楽で,敷居が低いというメリットはあります.
ただ,1ヶ月前の解析結果の再現を求められた時にそれを再現するのは非常に怪しいと思います.もちろん,実行した解析が簡単であれば再現は簡単かもしれませんが,そういった不確定要素はできるだけ排除したいです.
このような背景から,データ解析はRやSAS*2といったプログラムコードを使う方が良いと考えます. ここまでであれば, 「別にRmarkdownを使う必要はないじゃん!」となりますが,そうではありません.
単純にRやSASを使ってしまうと,解析結果は別に出力されてしまいます.どのコードがどの結果に対応しているのかは,つきあわせながら確認する必要もあり,ミスも生じます.また,解析していて気づいたこともコメントアウトという形でしか残すことができません.
Rmarkdownでは,コードとその結果を一つのファイルに同時に出力することができます.コメントについても単純な文だけではなく,markdown記法を使うことで階層や構造(大項目→中項目→小項目)を意識した文章を書くことが可能です*3.
データ解析結果を共有する人に合わせて,出力する情報量を調整できる
研究をしているといろいろな人とデータ解析結果を共有する必要がでてきます.コードや解析アルゴリズムを理解できる,あるいは理解しようとしている人に対してはコードと結果をセットにした方が良いと思います.
一方で,コードには興味がなく解析結果にのみ興味のある人*4にとっては,コードを出力するのは冗長かもしれません.
Rmarkdownでは,このような調整も関数一つで対応可能です.
出力が綺麗
出力が綺麗.出力が綺麗なんです.
ある方のデモです. www.stat.umn.edu
まとめ
Rmarkdown自体は日本でも5年ほど前から浸透しつつあると感じています.ただし医療データを扱う領域ではあまり認識されていないように感じます. もっと一般的に使われるようになれば良いですね.
お気に入り設定
RmarkdownでHTML出力する際には,コードファイルの最初にYAMLという設定が必要です. ここでタイトルや目次等の設定をしていきます.
--- title: "Statistical Analysis Report" author: "Shuntaro Sato" date: "`r format(Sys.time(), '%Y/%m/%d')`" # 自動で出力した日付を出力してくれる. output: html_document: theme: spacelab # 文書のテーマ.名前がかっこいい.他にもある. toc: true # 目次をいれるか? toc_depth: 3 # 階層をどこまでもたせるか? ここでは3階層. number_section: true # 階層のタイトルをナンバリングさせるか. fig_width: 6 # 図の横幅.6インチ. --- # Set up ```{r setup} # はてなブログでの出力がおかしくなるため,`の前にスペースを入れていますが削除してください.最後も同様です. knitr::opts_chunk$set( fig.asp=0.618, # 図の横幅を決めた時に,図の縦幅をこの比で決める.黄金比. out.width="70%", # 出力の横幅に対する,図の横幅の比. fig.align="center", # 図の位置 warning = FALSE, # コードを実行したさいに出力されるワーニングを出力しない. error = FALSE # コードを実行したさいに出力されるエラーを出力しない. ) ```
*1:Rmarkdownについては公式の説明がわかりやすいです.rmarkdown.rstudio.com
*2:STATAやPythonもありますが,STATAはほとんど触ったことがなく,よくわかりません.ごめんなさい.Pythonはnotebookがあると思いますが,医療データを扱う分野ではそんなにメジャーではないかなと思い,扱いませんでした.
*3:太字やリンクもつけることができます.一般的なwebページをイメージしたら良いと思います
*4:このような人が悪いというわけではありません.今後研究も分業化していくと,例えば研究計画を立て実施する人とデータ解析をする人は別になってくると思います.ただ人任せにせず,協力するのが大事ですね!