ikeの日記

しがない研究者の雑記。

分析コードの望ましい(?)書き方

今学期から、某政治学トップジャーナルのRAとして働いている。
主な仕事は、採択されたペーパーで報告されている統計分析の結果が再現(reproduce)できるかを確認することである。1
そのため他人が書いたRやStataのコードを見る機会が多いが、再現性や可読性の高いコードの書き方について、いろいろと学ぶところが多い。
そこで、これまでに得た教訓を以下にまとめておこうと思う。

1. 途中で変数やオブジェクトを削除しない

データの前処理をしたり異なる種類の複数の分析をする際、分析ファイル内で変数やオブジェクトを削除してしまうケースをよく見るが、これはできるだけやめた方がいい。
後から元の変数の情報や前に行った分析の結果を参照できなくなってしまい、大変不便である。

2. ペーパーで報告されている全ての数値情報に関するコードを公開する

当たり前のように聞こえるかもしれないが、例えば記述統計に関するコードが欠けているなど、ペーパーの結果すべてに関するコードが公開されていないケースが非常に多い。
再現性の確認は分析者の義務であり、第三者にそのために追加的なコーディングをさせるようなことがあってはいけない。

3. Readmeファイルやデータのコードブックなどの添付文書もできるだけ公開する

これらがないと、ある場合と比べコードの可読性は格段に下がる。
特に複数のデータセットやコードファイルが存在する際は、Readmeファイルがあると非常に便利である。
また変数が多いような場合は、それぞれが何を示すのかがわかるよう、コードブックも公開すべきである。

4. どの図表に関するコードかを必ず明記する

統計モデルを推定したり図を出力したりした場合は、ペーパーのどの図表に該当するのかを必ずコメントで明記すべきである。
この情報がないと第三者はコードを理解するのが難しくなり、可読性が著しく低下する。

5. 図の縦横比はコードで指定する

ペーパーに載っている図とソフトウェアが出力する図とで縦横比が異なっているケースが非常に多い。
縦横比が違うと図が伝える印象が著しく変わってしまうので、分析者は自らが望ましいと思うアスペクト比をコード内で指定し、出力された通りの図をペーパーに載せるべきである。

6. 疑似乱数を発生させる際は必ず初期値を設定する

当たり前のように思えるかもしれないが、実際には守られていないケースが多い。
初期値が設定されていないと、結果が本当に再現できるのか、第三者は判別できなくなってしまう。
モンテカルロシミュレーションを行う際などは、この点を忘れてはいけない。

7. どのアドオンやパッケージを用いているのかがわかるようにする

これは特にStataユーザーに起こりがちな問題。
統計分析を行うにあたって、アドオンにより提供されているコマンドに頼ることが多い。
そのことに全く問題はないが、その際、コードの実行にどのアドオンが必要なのか、分析者は必ず明示すべきである。
この情報がないと、第三者はコードエラーへの対処法を自ら探さねばならなくなってしまう。

8. バージョン情報を必ず記載する

統計ソフトやそのパッケージ/アドオンのバージョンが違うと、利用できる関数や得られる結果が異なることが多い。
再現性を高めるため、分析者は使用したソフトウェアやパッケージ/アドオンのバージョンをペーパーに記載すべきである。


以上、自分が重要だと思った点を挙げてみた。
網羅的でも体系的でもないが、何かの役に立てば。


  1. ここでいう再現性(reproducibility)とは「同じデータ・方法を用いて報告されている通りの分析結果が得られること」を指しており、「異なるデータや方法を用いても結果が再現できること」(replicability)とは異なる。