38
Rで Reproducible Research 2012年7月7日 第24回Tokyo.R @sfchaos

Rでreproducible research

  • Upload
    sfchaos

  • View
    3.544

  • Download
    3

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Rでreproducible research

RでReproducible Research

2012年7月7日

第24回Tokyo.R

@sfchaos

Page 2: Rでreproducible research

1

� 自己紹介

� Reproducible Researchとは

� Rでやってみる

� まとめ

アジェンダ

Page 3: Rでreproducible research

2

1. 自己紹介

Page 4: Rでreproducible research

3

�TwitterID: @sfchaos

�職業: データ分析

�抱負: 頑張る

Page 5: Rでreproducible research

4

2. Reproducible Research

Page 6: Rでreproducible research

5

2.1 Reproducible Researchとは

� 「再現可能な研究」のこと.

�データ分析者にとっては,「再現可能なデータ分析」.

�後々,分析条件の確認や追試を実施できるよう,データ,分析内容,結果を確認できるようにすべし.

Page 7: Rでreproducible research

6

2.1.1 再現不可能な分析の例

� コンソールやデバイスの分析結果をコピペする

� コンソール上だけでコマンドを打ち,ソースコードを残さない

Page 8: Rでreproducible research

7

2..2 効率的なレポート生成

�分析結果を数100枚~数1,000枚のレポートにまとめることも珍しくはない.

� また,データ分析では条件を変えて同じプログラムを実行してレポートを作成することも往々にして発生しがち.

Page 9: Rでreproducible research

8

� このようなレポートを作成するために,気合と根性でRから出力した図や表をベタ貼りすることは非現実的.

�何とか楽してレポートを作成したい!!

�その一つの方法として,文芸的プログラミングがある.

Page 10: Rでreproducible research

9

2.3 文芸的プログラミング

� RRは,Donard Knuthが提唱した「文芸的プログラミング(Literate Programming)」が大いに関係する.

�文芸的プログラミングは,

ドキュメントとソースを併記したWEBと呼ばれるメタソースを記述し、そこからドキュメントとソースコードをそれぞれ生成させることで情報の一体性を高めている

(Wikipedia「文芸的プログラミング」)

Page 11: Rでreproducible research

10

�興味がある方は,Knuth氏の書籍をどうぞ.

Page 12: Rでreproducible research

11

3. Rでやってみる

Page 13: Rでreproducible research

12

3.1 CRAN TASK VIEW

� CRAN TASK VIEWには"Reproducible Research"のカテゴリが存在する.

Page 14: Rでreproducible research

13

� 出力フォーマットごとに,以下のようなパッケージがある.

� CRAN TASK VIEWには,これらだけでなく,ソースコードのハイライトやRのオブジェクトのキャッシュを行うパッケージも列挙されている.

出力フォーマット パッケージの例

LaTeX Hmisc, xtable, reporttools, r2lh, tables, pgfSweave

HTML R2HTML, hwriter, xtable

ODF odfWeave

Microsoft Office R2wd, R2PPT

プレインテキスト AsciiDoc, ascii

その他 knitr

Page 15: Rでreproducible research

14

(;´д`)ゞ

いっぱいあって,

どこから手をつけたら良いのやら・・・

Page 16: Rでreproducible research

15

�私はこんな感じで使っています.

出力フォーマット 使用パッケージ用途

LaTeX xtableRで作成した数表やオブジェクトのLaTexで読み込める形式への変換

Microsoft Office

フォーマット

R2PPT, R2wdRで作成した図や数表の取り込み

Page 17: Rでreproducible research

16

� これらは,Rで作成した図や数表をLaTeXやMicrosoft Office系のレポーティングツールに取り込むために使用.

�一方で,Rのソースコードを作成しながら,レポートを作成する以下のようなパッケージも存在する(文芸的プログラミング).

� Sweave

� knitr

Page 18: Rでreproducible research

17

3.2 Sweave

�以下の@wakutekaさんのブログ記事が秀逸.

「文芸的な、あまりに文芸的な」

(R Advent Calendar 2011)

http://d.hatena.ne.jp/wakuteka/20111206/1323182969

Page 19: Rでreproducible research

18

3.3 knitrパッケージ

� Sweaveの精神を引き継いだ動的なレポートを生成するためのパッケージ

http://yihui.name/knitr/

Page 20: Rでreproducible research

19

3.3.1 簡単な例

\documentclass{article}

\begin{document}

<<setup, include=FALSE, cache=FALSE>>=opts_chunk$set(fig.path='figure/minimal-', fig.align='center', fig.show='hold')options(replace.assign=TRUE, width=90)@

\title{test}\author{sfchaos}\maketitle

<<cars>>=library(ggplot2)summary(cars)plot(cars)qplot(speed, dist, data=cars)@

\end{document}

test.Rnw

Page 21: Rでreproducible research

20

$ R

> library(knitr)

> knit2pdf("test.Rnw")

これでLaTeX形式のPDFファイルが生成されるが,

結構面倒

Page 22: Rでreproducible research

21

3.3.2 Rのソースコードだけ記述する

library(ggplot2)

summary(cars)

plot(cars)

qplot(speed, dist, data=cars)

test.r

Page 23: Rでreproducible research

22

$ R

> library(knitr)

> stitch("test.r")

LaTeX形式のPDFファイルが生成される

Page 24: Rでreproducible research

23

楽にレポート作成ができるようになった!

Page 25: Rでreproducible research

24

だが待て.

LaTeXだけでなく,

もっといろいろなフォーマットで出力したい.

→ knitr + pandocで

Page 26: Rでreproducible research

25

3.3.3 knitr + pandoc

http://johnmacfarlane.net/pandoc/

Page 27: Rでreproducible research

26

#@knitr summarysummary(cars)

#@knitr plot1plot(cars)

#@knitr plot2library(ggplot2)qplot(speed, dist, data=cars)

test_pandoc.r(Rのソースコード)

ドキュメントを作るときに用いるタグを指定しておく

Page 28: Rでreproducible research

27

% knit-pandoc test% sfchaos

<!-- Setting up R -->`ro warning=FALSE, dev="png", fig.cap="", cache=FALSE or`

```{r reading, echo=FALSE}read_chunk("test_pandoc.r")```

```{r}<<summary>>````

```{r plot-fig1, result="asis"}<<plot1>>```

```{r plot-fig2, result="asis"}<<plot2>>```

test_pandoc_knit_.md(ドキュメント生成)

Rのソースコードと分析結果を埋め込むために,Rのソースコードに埋め込んだタグを指定する('''{r} で始まり ''' で終わるブロックの中)

ファイル名末尾の"_knit_"は必ずつける

Page 29: Rでreproducible research

28

# markdownへの変換

 (markdown形式のファイル"test_pandoc.md"が生成される)

$ Rscripe -e "library(knitr); knit('test_pandoc_knit_.md')"

# pdfへの変換

$ pandoc -s test_pandoc.md -t latex -o test_pandoc.pdf

# HTMLへの変換$ pandoc -s test_pandoc.md -t html -o test_pandoc.html

# OpenOffice形式への変換$ pandoc test_pandoc.md -o test_pandoc.odt

# Microsoft Word形式への変換$ pandoc test_pandoc.md -o test_pandoc.docx

参考:kariert, Reproducible research with markdown, knitr and pandoc (R-bloggers 2012/5/17)

Page 30: Rでreproducible research

29

� pandocを用いて出力できるフォーマット

出力フォーマット

TeX LaTeX, ConTeXt, LaTeX Beamer slides

HTML XHTML, HTML5, and HTML slide shows using Slidy, Slideous, S5, or DZSlides

Word Microsoft Word docx, OpenOffice/LibreOffice ODT, OpenDocument XML

EBook EPUB

文書フォーマット DocBook, GNU TexInfo, Groff man pages

マークアップフォーマット Markdown, reStructuredText, AsciiDoc, MediaWiki markup, Emacs Org-Mode, Textile

Page 31: Rでreproducible research

30

これで,

いろいろなフォーマットの

ドキュメントが作れるようになる

Page 32: Rでreproducible research

31

3.3.4 RStudioを用いる

� RStudio(ver0.96以上)を用いて,このようなレポート作成が非常に楽に行える.

Page 33: Rでreproducible research

32

� 「ファイル(File)」 → 「新規作成(New)」 → 「R Markdown」

�以下のようなファイルを作成

carsデータセットに対する分析========================================================

統計量```{r}summary(cars)```散布図```{r fig.width=7, fig.height=6}plot(cars)```

test.rmd 拡張子は"rmd"

Page 34: Rでreproducible research

33

� knit HTMLボタンを押す

Page 35: Rでreproducible research

34

この後,Rpubsに投稿したり,HTMLファイルとして保存するのも

楽勝.

Page 36: Rでreproducible research

35

4. まとめ

Page 37: Rでreproducible research

36

� Reproducible Research

データ分析者にとっては,「再現可能な分析」

� knitrパッケージを用いるといろいろとできそう.

�未調査事項が多いので,また機会を見つけて発表します.

Page 38: Rでreproducible research

37

参考資料

� JJ Allaire and Yihui Xie, "New Tools for Reproducible Research with R", 2012.