Rによる再現可能なデータ分析

作者

瓜生真也

公開

2024年8月31日

前書き

コンピュータを用いた統計解析は、現代の統計学やデータサイエンスにおいて重要な役割を果たしています。 膨大かつ多様性を増しているビッグデータを扱う際には、コンピュータによる効率的なデータ処理と解析が不可欠であり、これにはデータの処理速度やデータの多様性に対応できる技術が求められます。 また、人工知能(AI)分野では、統計モデルを基盤とした機械学習手法が不可欠であり、その多くは大規模なデータセットを基に、コンピュータを利用してパターンを学習しています。

コンピューターを使ったデータ分析が進む中、データ分析の過程を再現可能にすることが重要視されています。 再現可能性とは、分析者自身を含めた他者が同じデータ・ソースコードを使って同じ結果を得られることを指します。 再現可能性が確保されていることで、データ分析の過程や結果を他者に説明しやすくなり、信頼性の高いデータ分析を行うことができます。

近年、データ分析を伴う学術研究の中で、第三者や自分自身の研究結果を再現しようとして失敗する「再現性の危機」と呼ばれる問題が報告されています。 どうすればデータ分析に再現性を持たせることができるのか、そのためにはどのような手法を用いるべきなのか、といった問題に対して、研究者やデータ分析者は真剣に取り組む必要があります。

私たちはデータ分析の手法や背景にある数学、統計学の知識を学び、実現するためのプログラミング技術を磨いてきました。 しかし分析作業の再現可能性については、学ぶ機会が少なかったり、普段意識していないかもしれません。

「誰が再現性を必要としている?」という問いに対して、あなたはどのように答えますか?

以前行ったデータ分析の結果が再現できず、時間を割いた経験がある人は、その必要性について否定的な意見を持つことは少ないでしょう。 再現可能性を必要としているのは、あなた自身であり、あなたのチームであり、あなたの成果を利用する他者を含みます。 これら全ての人々を意識するのは困難かもしれませんが、まず身近で作業する人たちのために再現可能性を確保することが重要となります。

再現可能性にはいくつかの段階があり、どこにゴールを置くかは状況によって異なります。 ゴールはデータとソースコードを残し、あくまでも自分だけが再現できる状況を残すことなのか、さらに一歩進んで実行環境の情報を提供するのかといった具合です。 さらに完全な再現は困難である点も認識しておく必要があります。

本書の目標は、再現可能なデータ分析に取り組む全員が再現可能なデータ分析に必要な考えや能力を身につけることです。 実際のデータ分析で本書のどの内容が適用されるかは、読者自身が判断することになります。 本書の内容が、あなたのデータ分析の再現可能性に対する考え方や作業を改善する一助となれば幸いです。

構成

本書では、データ分析の過程において再現可能性を確保するための手法を学びます。 R言語を題材としますが、多くの考えが他のプログラミング言語でも適用できるはずです。

再現可能性と関係するコンピューターおよびプログラミングに関する基礎知識を身につけることから着手します(第1章)。 次の第2章では、R言語によるプログラミングの作業において、再現可能性を低下させる要因を理解します。 再現可能なデータ分析の第一歩として、データ分析をプロジェクトとして捉えて組織化することを学びます(第3章)。 統合開発環境を導入することで次の章からの再現可能性を高める手法の実践が容易になります。 第4章では、データ分析の作業を記録し共有するためのバージョン管理システムを導入します。

第5章からは、データ分析作業においてのさらに具体的な場面での再現可能性の手法に取り組みます。 まず、分析結果をレポートなどにまとめるためのドキュメントの生成を学びます(第5章)。 続いてRで利用可能な再現可能性を高めるパッケージを紹介し(第6章)、特に第7章でtargetsパッケージを用いたデータ分析プロジェクトのパイプライン化を学びます。 第8章では、コンテナ技術によるデータ分析環境の構築を目指します。

本書の再現

本書は以下の環境で執筆されました。GitHubリポジトリ https://github.com/uribo/rrr に関係するファイルを公開しています。 リポジトリからファイルをダウンロードし、RStudioで rrr.Rproj を開いたうえで起動するプロジェクトから、本書の再現を試みることができます。

  • macOS Sonoma 14.6.1 および Ubuntu 22.04.4 LTS (GitHub pagesへのデプロイ)
  • R version 4.1.1
  • RStudio
  • Quarto
  • renv

次のコードを実行すると、本書の復元が行われます。 ここで行われるのは、renvによるパッケージの整備とQuartoによるドキュメントの生成です。

renv::restore()

quarto::quarto_render()

本書の内容を補足するサンプルコードをGitHubリポジトリで公開しています。こちらも合わせてご利用ください。

https://github.com/uribo/rrr-demo

sessionInfo()
R version 4.4.1 (2024-06-14)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 22.04.4 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so;  LAPACK version 3.10.0

locale:
 [1] LC_CTYPE=C.UTF-8       LC_NUMERIC=C           LC_TIME=C.UTF-8       
 [4] LC_COLLATE=C.UTF-8     LC_MONETARY=C.UTF-8    LC_MESSAGES=C.UTF-8   
 [7] LC_PAPER=C.UTF-8       LC_NAME=C              LC_ADDRESS=C          
[10] LC_TELEPHONE=C         LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C   

time zone: UTC
tzcode source: system (glibc)

attached base packages:
[1] stats     graphics  grDevices datasets  utils     methods   base     

loaded via a namespace (and not attached):
 [1] digest_0.6.37     fastmap_1.2.0     xfun_0.47         knitr_1.48       
 [5] htmltools_0.5.8.1 rmarkdown_2.28    lifecycle_1.0.4   cli_3.6.3        
 [9] textshaping_0.4.0 renv_1.0.7        systemfonts_1.1.0 compiler_4.4.1   
[13] tools_4.4.1       ragg_1.3.2        evaluate_0.24.0   yaml_2.3.10      
[17] rlang_1.1.4       jsonlite_1.8.8    htmlwidgets_1.6.4