Research Compendium(解析のパッケージ化)について

この記事は,Open and Reproducible Science Advent Calendar 2019の6日目の記事です。

研究で使用したデータや解析コードが公開されることが今後増えていくことかと思いますが,研究者が解析したそのままで公開すると第三者にはわかりにくいものになるかもしれません。データや解析コードの説明を含めたある程度決まった形式で解析をパッケージ化して配布することが必要になるかと思います。

困ったデータと解析コードの共有の例

具体例を出すと以下のようなフォルダを共有されても困るわけです。 f:id:cpp-laboratory:20191127215719p:plain

まず,解析に関する説明文書が5つあります(「解析v2.txt」から「重要メモ.doc」です)。どれが見るべきファイルから判別できません。このフォルダを渡されたら,すべての説明文書を開いて解読するところから始める必要があります。

次に,データが4つあります(「データv1.csv」から「データ修正版v3.csv」までです)。異なるルールで記載された最終版があり,修正版には最も新しそうなバージョン番号がついています。そのため,どれが一番最新のデータなのか謎です。データの中身と解析コードを突き合わせていかないと判別できません。

最後に,解析コードのファイルが5つあります(「准教授Kを黙らせる解析.m」から「メインの結果_fin.R」までです)。「准教授Kを黙らせる解析.m」という心意気は良いとは思いますし,「分析with田中センパイ.m」からは田中先輩の人柄が伝わってきますが,研究の解析コードの名前としては情報がありません。また,「2番目に実施する.R」とありますが,じゃあ,最初にはどれを実施するの?と疑問がでてきます。多くの場合,解析コードは決められた順番で実施する必要があります(統計解析→前処理→データの読み込みという順番では正常に動作しないはずです)。その順番の情報がこれらのファイル名からはわかりません。

Research Compendium(解析のパッケージ化)

データと解析コードを整理する必要性は,多くの方にご納得いただけるかと思います。ただ,どのように整理するかというルールはないので,各研究者がそれぞれの美学に基づいて整理している感じかと思います。それがすごくわかりやすいものだったらいいのですが,癖があったりすると読みにくくなります(そして,その癖は自分では気が付かないかなと思います)。この形式が研究者によって異なると,読む側としてはちょっと認知的負荷が高いように思います。

そういうこともあり,再現性の高いデータと解析コードの共有に関して,Research Compendiumという考え方がでてきています。Research Compendiumは,以下の3つの特徴をもったデータと解析コードの整理法です。

  1. ファイルを研究者コミュニティにおいて広く流布された方法でまとめる
  2. データ,方法,出力を明確に分けた上で,それらの関係について明示する
  3. 解析が実施された解析環境を明確にする

Research Compendium(解析のパッケージ化)のやり方

Research Compendiumに基づいて,Marwick, Boettiger, & Mullen (2018)の"Packaging Data Analytical Work Reproducibly Using R (and Friends)"*1では,Rのパッケージ開発で使われている方法をデータと解析コードの共有方法として採用することを提案しています。Research Compendiumの1つ目である「ファイルを研究者コミュニティにおいて広く流布された方法でまとめる」は,Rのパッケージ開発の方法である必要はありません。しかし,Rパッケージ開発では,他の開発者とも共同作業ができるように,形式が決められており,そのファイル配置も合理的なものになっています。なお,ファイルの配置くらい自分で決めたいという気持ちもあるかもしれないですが,ここは個性を発揮しなくてもいいじゃないかなと思います。むしろ,すでに配置を決めたテンプレートがあると,あとは中身をいれるだけなので,簡単といえます。このように負担が小さくなるだけでなく,公開されたデータをその後のメタ分析などで活用する場合に,データと解析コードが同じファイル構造をもっている方が楽になると思います。

Marwick, Boettiger, & Mullen (2018)を参考にして,フォルダを作ると以下のようになります。公開するフォルダは,以下のファイルやサブフォルダ(サブフォルダには,/がついています)からなります。

  • README 第三者がプロジェクトの全体像を理解できるように説明をするファイルです。どのdataに対して,どのfunctionを使って,どういうanalysisをしているのかを書きます。
  • DESCRIPTION プロジェクトのメタデータや依存関係を記載するファイルです。
  • LICENCE 公開したファイルは誰がどのように使えるものなのか説明するファイルです(MITライセンスなどよく使われるものを参考にするとよいです)。
  • data/ 使用したデータを配置するフォルダです。可能であれば,最も前処理をしてないデータ(生データか匿名化処理後のデータ)だけを配置して,前処理後のデータは置かない(その処理はanalysisで行う)。
  • analysis/ 使用した解析コードを配置するフォルダです。解析コードが複数ある場合は,どういう順番で実行するのか分かるようなファイル名にしておくとよいです。
  • function/ プロジェクトで使用した関数を配置するフォルダです。 Marwick, Boettiger, & Mullen (2018)の場合は,R/となっていますが,PythonMatlabも使うこともあるので,functionにしています。

f:id:cpp-laboratory:20191127215740p:plain

  上記のようにデータや解析コードを準備すれば,他の研究者は,まずREADMEを読んで,次に,analysisフォルダを開いて,analysis01.Rmdから順番に実行すれば良いです。その後,functionが気になったりしたら,そっちを確認することもできます。なお,上記のResearch Compendiumは,Marwick, Boettiger, & Mullen (2018)の例の中でも最小限のものになるので,より大規模なものなどを参考にしたい場合は,Research Compendiumで探すと良いかと思います。日本語の例としては,著者の研究室で取り組んだ追試研究のデータと解析コードの共有リポジトリ(https://github.com/ykunisato/somatori_kunisato_2019_replication_study)がありますので,参照ください。

今回解説した解析のパッケージ化は,再現可能な心理学研究入門でも触れています。データ解析の再現可能性の全体像を把握したうえで,上記の解析のパッケージ化の位置づけを知りたい場合は,読んでいただけたら幸いです。

Enjoy!

*1:Marwick, B., Boettiger, C., & Mullen, L. (2018). Packaging Data Analytical Work Reproducibly Using R (and Friends). The American Statistician, 72(1), 80–88.