Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

統計解析の再現可能性を高める取り組み

11,940 views

Published on

統計解析・データ分析における再現可能性を高めるための取り組みについて発表をしました。

Published in: Science

統計解析の再現可能性を高める取り組み

  1. 1. 統計解析の再現可能性を 高める取り組み 専修大学人間科学部心理学科 国里愛彦 2017/7/8 臨床疫学研究における報告の質向上のための統計学の研究会 第30回「Rを用いたデータハンドリング入門:効率的かつ再現性の高い統計解析のための第一歩」
  2. 2. 再現性の危機 • 心理学研究 本のうち再現されたのは 本 • 引用数が多く効果があるとされた臨床医学研究 本のうち再現されたのは 本 • 名の調査から, が他の研究者の研究を再 現できず, が自分の研究の再現もできなかった
  3. 3. と • 再現可能性 :ある現象が他の研究者 が行った研究でも再現されること(新規なデータ収 集あり) • 再生可能性 :データから解析結果 が再生できること(新規なデータ収集なし。コードや データの共有などで確認する) →今回は,再生可能性について扱う Peng, R. D. (2011). Reproducible research in computational science. Science, 334(6060), 1226-1227. 日本語だとどちらも「再現」と訳される 区別のために「再生」としてみた
  4. 4. 統計解析の再生可能性を 高める取り組み 専修大学人間科学部心理学科 国里愛彦
  5. 5. あなたの解析,再生できますか? •共同研究者や学生の解析結果に違和感。生デー タから同じ統計解析をしたのに再生できない •共同研究者・学生・過去の自分が行った解析を見 直したら,何をしているのか理解できない
  6. 6. 大切だけどスルーされる問題 •共同研究者や学生の解析結果に違和感。生デー タから同じ統計解析をしたのに再生できない →前処理のエラー,文書化の問題 •共同研究者・学生・過去の自分が行った解析を見 直したら,何をしているのか理解できない →可読性の問題,文書化の問題
  7. 7. なぜ再生可能性を高めるのか? •再生可能性は,科学の重要な要素である •同じデータから同じ結果が再生されることが科学 的知見の蓄積において重要(コードやデータの共 有が知識の蓄積を加速する) •再生可能性の個人的利点: エラーの少ない質の高い研究ができる 共同作業がしやすくなる データやコードの共有は研究のインパクトを高め る 『 』
  8. 8. による臨床試験の データ共有方針 • 年 月から 雑誌に投稿される臨床試験 にはデータ共有文書を含める • 年 月以後に参加者募集する試験は,試験 登録段階でデータ共有プランを含める Taichman et al.(2017) Data Sharing Statements for Clinical Trials: A Requirement of the International Committee of Medical Journal Editors データ共有文書項目 例 個人の参加者のデータが入手可能か? yes 特にどのデータが共有されるのか? 試験中に収集した全ての参加者の全ての匿名化したデータ 他に入手可能な文書は? 研究プロトコル,統計分析プラン,分析コード・・・ いつ(いつまで)データが入手可能になるか? 出版後すぐ,いつまでも入手可能 誰が入手できるか? だれでも どのような分析のために? どのような目的でも データはどのように入手可能か? データは,5年間xxxx-URL-yyyにて公開
  9. 9. 再生可能な研究のステップ データの 取りまとめ ・前処理 分析 文書化 論文出版 データ・コー ドの共有生データ 生データ 1.ファイルを組織化し,バージョン管理する 2.コードの可読性を高める 3.すべて文書化する 『 』 を参考に作成
  10. 10. 統計解析の再現可能性を高める ツール • • • • ※コード・データ共有には,クラウドサービス , , など
  11. 11. 再生可能な研究のステップ データの 取りまとめ ・前処理 分析 文書化 論文出版 データ・コー ドの共有生データ 生データ 1.ファイルを組織化し,バージョン管理する 2.コードの可読性を高める 3.すべて文書化する 『 』 を参考に作成
  12. 12. 解析関連ファイルの組織化・保存 •分かりやすいようにファイルを組織化&保存し,他の 者も利用できようにする •解析用フォルダ内に解析コード, ドキュメント , フォルダなどを配置 REQUIRE_study Data README.md Analysis.Rmd data1.csv data2.csv
  13. 13. でのファイル操作 • でデータの前処理・解析をする上で,カレントワー キングディレクトリの設定やファイル操作ができると 便利 カレントワーキングディレクトリ のパスを調べる 指定したパス を指定したパスに ディレクトリーやファイルを作成 内のファイルをリストにする ファイル名の変更 ファイルのコピー
  14. 14. を使う のコードやデータなどをフォルダにいれたら で を作る。 メニューから をクリックして,解析用フォルダを選択する 指定したフォルダ に という拡 張子のファイルが できる
  15. 15. の利点 • の メニューにリスト化されるので, 簡単に選んで開くことができる • メニューから を選択 ファイルをダ ブルクリックなどで開くと,解析用フォルダがワー キングディレクトリーになる( , , コードも読み込まれる) • を閉じたら,自動的に や が ファイルに保存される ↑地味でピンとこない機能ですが,使うと驚くほど便 利です
  16. 16. と でバージョン管理 • を含むコードを書く作業は,バージョン管理(ファ イルの変更履歴の管理)ができると便利(手動で もできるけど,できるだけ楽にしたい) • は,バージョン管理ツール のクラウド サービス( ) • 無料アカウントだとプライベート(非公開)リポジト リが作れないので有料サービスになる(教育機 関なら無償利用も)。
  17. 17. と • 事前に アカウントとリポジトリを作っておけ ば, の ファイルの作成の際に を 選ぶことができる
  18. 18. と によるバージョン 管理のしくみ • で 上のコード ・データを に落と す • コードを変更したらこまめ に して変更の履 歴を残す。 で に上げる コード の変更 Commit Pull Push
  19. 19. 上での操作 • のタブができ る。コードの変更 をすると変更した ファイルが表示さ れるので,説明 をつけて する • で分かり やすい説明をい れると,変更履 歴 下図 がわか りやすくなり,後 で便利
  20. 20. 再生可能な研究のステップ 『 』 を参考に作成 データの 取りまとめ ・前処理 分析 文書化 論文出版 データ・コー ドの共有生データ 生データ 1.ファイルを組織化し,バージョン管理する 2.コードの可読性を高める 3.すべて文書化する
  21. 21. 可読性を高める 可読性を高めるには, コメントをまめにつける, スタイルガイドを使う • は をつけるとコメントアウトされるので, を使って コードの説明を加える を使うとコメントの 表現も増える 独自なコードの書き方を避け,少なくとも研究室単位 で コードの書き方を定める • の スタイルガイドが有名だが, も スタイルガイドを作成している。
  22. 22. ファイル・オブジェクト名を統一 • ファイル( や や など ,変数,関数名は ,意味のある名前にして,アンダーバー でつな ぐ。変数は名詞,関数は動詞にする。 • のような名前の付け方(キャメルケース)もあるが, 大文字・小文字を区別しない もあるので,小文字をアン ダーバーでつなぐこと(スネークケース)が推奨されている。 http://style.tidyverse.org/ 関数の場合
  23. 23. スペースをいれる 関数の引数の指定法 • 演算子 など)の前後にはスペースを入れ る。コンマ の後ろにスペースを入れる(前は入れな い)。 の前後にスペースを入れるが, や の前後に はいれない • の関数の最初の引数は大体データなので引数指定 なし。それ以降の引数はすべて名前を書く http://style.tidyverse.org/
  24. 24. 代入,セミコロン,引用符,一行 の文字数 • 代入は ではなく, を使う • セミコロン は使わない( 行に複数のコードを書 かない) • 引用符は, ではなく を使う(すでに を使って いる場合だけ を使う) • 行の文字数を少なくする( 文字以下) http://style.tidyverse.org/
  25. 25. インデントの活用 • 文や 文などでコードに階層性がある場合,インデント を使って階層をわかりやすくする • はスペース2つ分を推奨。 の後ろに続けて書かず 改行する。 はそれだけの行を作る( や丸括弧がある 場合は除く)。 http://style.tidyverse.org/ if (y == 0) { if (x > 0) { log(x) } else { message("x is negative or zero") } } else { y ^ x } Good
  26. 26. パイプ演算子の活用 • 特に を使うと,パイプ演算子 が使えるようになる • は,左の値 を右の関数 の第一引数 (多くの場合,データ)として渡します • 処理を流れるように記述でき可読性が上がる foo_foo <- hop(foo_foo, through = forest) foo_foo <- scoop(foo_foo, up = field_mice) foo_foo <- bop(foo_foo, on = head) もしくは bop(scoop(hop(foo_foo, through = forest),up = field_mice),on = head) Bad foo_foo <- foo_foo %>% hop(through = forest) %>% scoop(up = field_mouse) %>% bop(on = head) Good
  27. 27. データ整形と可視化の ための強力なパッケージ • 界で非常に有名な ( に勤 務)が作成・まとめたパッケージ群
  28. 28. による解析のワークフロー 太字はコア関数 データの読み込み readr(csvなど長方形データ) readxl(Excel) haven(SPSS,SAS) httr, rvest(ウェブAPIとスクレイピ ング) xml2(XML) 整然化 tibble(新しい データフレーム) tidyr(データの 整然化) 変形 dplyr(データ の変形) forcats(カテゴリ カル変数) hms,lubridate( 日付,時刻) strigr(文字) 可視化 ggplot2(データ を美しくプロット) モデル化 broom(モデルを整然データに ) modelr(モデリング) プログラミング purrr(関数型プログラミング ) magrittr(パイプ演算子) 2017年6月にSQLなどのデータベースをdplyrで扱うためのdbplyrもリリース(他にもgoogle docと連携する関数なども開発中)
  29. 29. をフル活用してデータ の整形方法,可視化,モデリン グ方法を説明 でも閲覧できますし  ( ),書籍 としても購入可能
  30. 30. 可視化の優れたツール • でエレガントな図を可読性高く描ける • の基本的な3コンポーネント ① ②データの変数間の (審美的マッピ ング)と視覚的性質 ③ 関数を使って,それぞれの観測をどのように 描写するかを記述したレイヤーを指定 ggplot(mpg, aes(x = displ, y = hwy)) + geom_point() data: mpg(ggplot2で用意され ている) aes: x軸がdispl, y軸がhwy geom: 点をプロット
  31. 31. 可視化の優れたツール • 主に や を変更するこ とで様々なプロットを実現す る。 # classによる色分け(aes) ggplot(mpg,aes(x = displ, y = hwy, colour = class)) + geom_point() # 平滑化曲線の追加(geom) ggplot(mpg,aes(x = displ, y = hwy)) + geom_point() + geom_smooth()
  32. 32. で様々な図を描く
  33. 33. で論文用の 図を描く • で論文で使える 図を描くパッケージ • で科学雑 誌に合わせた図を描く パッケージ )  → 風
  34. 34. 再生可能な研究のステップ データの 取りまとめ ・前処理 分析 文書化 論文出版 データ・コー ドの共有生データ 生データ 1.ファイルを組織化し,バージョン管理する 2.コードの可読性を高める 3.すべて文書化する 『 』 を参考に作成
  35. 35. すべて文書化する • データの前処理から統計解析まで,その過程を できるだけ詳細に記録する で,無理なく全て文書化! Rファイルの#コメン ト読みにくい。結果と コードがバラバラに なっている・・・ 結果をWordやPPTに コピペだと,データを 変えると全部やり直さ ないと・・・ 作業煩雑 コピペ汚染 共有が面倒 エラー見過ごし
  36. 36. とは • 記法を使って,文章・解析コード・解析結 果を統一的に処理できるパッケージ • を使うことで1つのファ イルで文書・コード・結果をまとめて ,様々なフォーマットで出力できる ( , など)。
  37. 37. :はじめの一歩    から,R Markdownをクリック 適当に名前を つけて”OK”
  38. 38. :はじめの一歩 以下のようなテンプレートが出 てくるので自分で改変
  39. 39. の基本要素 --- title: "RMarkdownで再生可能性研究" author: "国里愛彦" date: "`r format(Sys.time(), '%Y/%m/%d')`" output: html_document: toc: yes toc_float: yes --- # 使用するパッケージ 今回使用するRパッケージのtidyverseを読み込み ます。 ```{r} library(tidyverse) ``` ①yamlヘッダ:Rmdの設定情報 ・タイトル,作者,作成日(左の設 定だと自動生成される),出力の 設定(左の設定だと浮動する目次 のついたhtml) ②Markdown:Markdown記法に よる文章部分(コードや解析の説 明文章を書く) ③R chunk:実行したいRコードを 記述した部分
  40. 40. の書き方 •行頭に で見出しになる( を重ねるほど見出しの水準 は下がる)。 •改行をしたい場合は,空行を入れる。 •行頭に をいれると箇条書きリスト,行頭に をいれる と順序付きリストになる。 • でくくれば 形式で数式を書けたり,リンクや画 像も挿入できる。 # 解析 ## データの準備 ### データの読み込み 解析 データの準備 データの読み込み 出力
  41. 41. の書き方 • ```{r}と```で囲われたRコードが実行され,その結果 が出力される。 • ```{r, echo=FALSE}のようにRコードをどう扱うかに ついていくつかオプションがある。 echo: コードを表示するか(FALSEで非表示,コードは実行され るの結果は表示される) results: 結果を表示するか(’hide’で結果を非表示,コードは表 示される) eval: コードを実行するか(FALSEで実行しない) include: 出力に含むか(FALSEで含まない,でもコードは実行さ れる) ```{r, echo=FALSE} Rコード ```
  42. 42. から へ 書けたら,knitをク リック(wordなどでも 出力できる) 出力 knitで全て実行 しなくても▶をク リックすると,当 該R chunkだけ 実行できる
  43. 43. 解析環境の記録 • 再生可能性を高める 上で,解析環境 ・ ・パッケージの バージョン,ロケー ル についての記録 が重要 • を使うと ,右のように必要情 報が表示される ```{r} sessioninfo() ```
  44. 44. で変わる解析フロー 解析コード 解析結果 (数値,図表 がバラバラ) 文書化 ● コピペ汚染 ● 作業が煩雑 ● 一方向的 ● コピペ汚染がない ● 1つのRmdファイルです べて完結 ● さまざまな出力が可能 ● データと詳細なRmdで 解析の再生が可能 解析コード 解析結果 文書化 出力
  45. 45. と で 作成 • と で,簡単 無料で 作れます。 • 詳しくは以下の神資料を参照ください。
  46. 46. 再生可能研究のまとめ データの 取りまとめ ・前処理 分析 文書化 論文出版 データ・コー ドの共有生データ 生データ 1.ファイルを組織化し,バージョン管理する 2.コードの可読性を高める 3.すべて文書化する 『 』 を参考に作成
  47. 47. 推奨文献 • 『 』 著 年 • 『 』( 著 年) • 『 』 著 年

×