R Markdown のめちゃ簡単な説明
プロってる人には怒られそうなページです。公式とか、ちゃんとした解説を読んだ方が良いです。
R Markdownを使うと、「何が良いか」という点を、まずは僕なりに。
プログラミング言語で解析をすると何が良いか?ということは、すでに感じている人も多いと思います。データが増えたり減ったり、似たような実験デザインで別の実験をしたり、ということがあっても、同様のスクリプトやちょっとだけ改変したスクリプトで解析を簡単にやり直せます。学生さんを指導している立場の人なら、scriptを見ればちゃんと解析をやれてるかどうかを後から見ても分かるので安心、ということもあると思います。
ただ、
スクリプト→ 残せる
図→ スクリプトで残せるしそれにより図の作成も再現できる
統計結果→ コンソールに出力された結果をコピペして保存する????
そう、解析結果を如何に再現可能な状態で残すか、というのが難しい。スクリプトがあれば再現可能性はあるが、結果をサッと見られる状態も同時に維持するのが難しいと言いますか。で、Rマークダウンを使うと、それが出来てしまうというのが、良いところです。
どのデータを読み込んで、どんな解析をして、どんな結果が出たか、それを、文書として見ることができる状態で保存できます。この文書の元となるファイル中でスクリプトの実行もできます。使ったコードを、文書に表示させることもできますし、元ファイルにだけ書いておくこともできます。
R Markdownのファイル → 出力されたWordやPDF(結果のレポート)
という流れが作れます。
僕が、R Markdown を使うと「良いな!」と思ったのは、論文のサプリメンタルインフォメーションとしてのファイル作りに最適だと思ったからです。
昨今の論文や査読の印象としては、
統計に使ったデータのスプレッドシートも公開して解析の再現可能性を担保する流れにある
他方、
読みやすさや分かりやすさも重視される(本文に字数制限がある、インパクトを求められる)
という、両立が難しい要素があるように思います。
他にも、
心理や生態学:統計に詳しい(本文中にもめっちゃ統計的記載を書く)
生物・生命科学:統計の記載がなさすぎてどんな解析したかわからない論文も多いし、ちゃんと統計について記載すると「統計の記載が細かすぎて、文章が分かりづらくなり、内容理解を妨げる」と査読で言われることすらある
という悩みもあります。
実際、生物・生命科学系の論文では、1つの論文に載せる実験結果が膨大になる傾向があり、古来よりの習わしに基づく書き方をしていると、本文が統計の記述ばかりで、確かに話の筋が分かりづらくなるとは、僕も思っています。
そうなってくると、「確かな統計のプロセスとその結果が分かるようになっている」という資料と、統計結果に基づく論理(本文)をある程度分けて書くということが望ましいのではないかと、僕なんかは思っています。こんなとき、R Markdown はすごく役立つと思うわけです。統計量の値やP値などは、計算過程とともにサプリに任せてしまい、本文では、統計的根拠が見られたことに基づく機能や意義を議論する、というワークフローを作りたいと、僕は思っています。
文章だけだとピンとこないと思いますので、
サプリメンタルデータの解析で上記のようなことをしましたので、そこで作ったマークダウン文書のスクショなどを貼っていきたいと思います。その文書とスクリプトなどは、論文にもリンクしてある figshare に置いてあります。
https://scrapbox.io/files/65e811f226b64100249d7c7e.png
文中にもあるFigに対して「こんな統計をしました〜」というのを書いておいて、Welchの一元配置分散分析で主効果が有意であることを示したその下にさらに、
https://scrapbox.io/files/65e812219aff9a0025211785.png
こんな感じで、post-hoc test の結果を書いておきました。群が多いと、心理統計の教科書で書かれているみたいに本文に全ての結果を載せていったら、実際結構うざいことになるので、これで良いのではないかなと。
さて、このような文書を作るための、、バチクソ簡単すぎる解説のスクショを貼っておきます。
僕のような弱者による簡単な理解でしかありません。
プロってる人は、R Markdownで論文作成までなさいます。R Markdownファイルで統計をやり、図を描画し、本文も書いて、それを出力して論文原稿にするのです。
【実際の使い方】
R studio の新規ファイル作成のメニューに、R Markdownの項目があるので、そこからファイルを作成し、あとは、以下のスクショのように頑張ります。
https://scrapbox.io/files/65e81670a05b5b0025a34c51.png
このスクショで大体 R Markdown 文書の作成が可能になると思いますが、以下、いくつか注意点
スクリプトの実行時の注意
RStudioのスクリプトエディタやコンソール側で1度実行されたもの(オブジェクト化されたもの)は、 Markdownのエディタでも実行可能(逆にオブジェクト化されてないものは Markdown側からは動かせない、もしくは Markdown内で一からオブジェクト化)。
Markdown内でオブジェクト化してもいいのだが、Markdown文書はあくまで結果の要約なので、何でもかんでも書かない方が良いかも?(なんでもかんでもはRのファイルにScriptとして残せば十分)
最後の出力時の注意(WordやHTMLなど)
<フォント問題>
グラフの作成で、Rのデフォルトで設定されているフォント以外のものを使うと、 Markdownがうまく出力されないかもしれない
これは、図をPDFに出力するときも一緒。pngへの画像出力なら、日本語フォントでもできる。
ちなみに図をPDFにすると、そのPDFは Adobe illustrator で編集が可能です
いろんなフォントを使えるようにする方法があるのだが、かんのもまだ勉強中…(というか諦めた)
とりあえず、英語の Helvetica をフォント指定すると、見栄えも良いしPDF作成もRStudioのexportメニューから簡単にできる
<出力の工程:Knit>
Markdownのエディタで書いたものは、Knit(ニット🧶)という作業によってレンダリング(重ね合わせ)される。KnitというボタンがRStudioの Markdownエディタのメニューにあるのだが… かんのがこのボタンを使うとエラーが起きる。結局、RStudioのScriptエディタから出力形式に合わせて以下を実行するのが最も簡単だった。
Wordでの出力:rmarkdown::render("RMarkdownファイルの名前.Rmd", "word_document")
HTMLでの出力:rmarkdown::render("RMarkdownファイルの名前.Rmd", "html_document")
<その他>
PDFへの直接出力は、Texを入れないと出来ないのでWordにしてからやってください
統計結果の出力は、 Markdown文書をWordなどに出力すると、一行が長すぎてレイアウト崩れを起こすことがある(anova君とか)
そう言う場合は、Word上でフォントを9ptにしましょう
HTMLではレイアウト崩れは起きない
だけど R Markdown では改行とか難しいし、細かい設定しないと情報量が多いグラフもレイアウト崩れする