今年も始まりました。RStudio Advent Calender。今日で5日目です。みなさま楽しんでおられますでしょうか?
RStudioで論文を書くモチベーションは、端的に述べるならば、再現可能性を高めるためです。再現可能性の高い論文(reproducible research paper)が必要とされる主な理由を3点, Mike Frank & Chris Hartgerink (2017)は, 以下のように述べています。
エラーを回避するため
[Nujiten et al. (2016)]では, APA (American Psychological Association)形式の論文での,p値を用いた検定結果を報告している文を収集して, 10%以上の論文が, 検定統計量とp値の報告,解釈に不一致があることを示しています。(例えば, その不一致が見られた論文の約半数では,t検定のt値がめちゃくちゃ小さくてサンプルサイズも小さいのに, p値が0.001以下となって有意だったというような,検定統計量とp値のズレが発生していました)。RStudioで論文執筆を進めると,解析ソフトから原稿執筆ソフトに解析結果の情報を転記するプロセスで生じるヒューマンエラーを減少することができます。
計算の再現性
研究の再現可能性を担保する上で, 他者が解析結果を再現可能であることが重要な要件となります。近年, 解析モデルは複雑化しているので, 論文に掲載されている情報のみでは,解析結果を再現するのが難しいものも少なくありません。解析に用いたデータやコードの公表を求める論文も多くなってきています。RStudioで論文を書くと, 論文とコードの対応が明確ですし, 公表も容易です。
改稿が簡単 論文の修正など、簡単に実行可能です。特に図表の修正となると、他ソフトを使う場合には、他ソフトで修正したものを、再度コピペして論文原稿の方にセッティングしてと、手間が多いですが、そのような手間を省けます。
ようは、エラー少なく、再現性高く、無駄な労力を削減して、生産性高く論文を書こうということです。
RStudioでのドキュメント生成は, rmarkdown(Allaire, Xie, et al. 2017)を使っていきます。rmarkdown(Allaire, Xie, et al. 2017)自体の解説はぞうさんの記事が基本カバーしているのでそちらもご参照ください。
今回は,packageでテンプレートが用意されていているものを紹介します。今日紹介するテンプレートが自分が投稿したい雑誌とフィットしていなければ, 細かい調整が必要になります。今回はrticlesとpapajaパッケージを紹介します。
この二つで結構な範囲のスタイルがカバーできます。
というわけで, まずはこの二つのパッケージをインストールしましょう。 papajaはCRANに登録されていないので, githubインストールです。
install.packages("rticles")
devtools::install_github("crsh/papaja")
試しにrticlesのelsevier形式のテンプレートを開いてみます。 下記のコードを実行するとdraft1(任意のフォルダ名)というフォルダができて、その中に、原稿作製に必要な5つのファイル生成されます。
基本的にいじるのはrmdファイルのみで, 必要に応じて.bibファイルを調整します
library(rticles)
library(rmarkdown)
rmarkdown::draft("draft1", template = "elsevier_article", package = "rticles")
では, .rmdの中身をみてみましょう。 YAMLヘッダーで下記を指定します。
---
title: All we need is bayes.
author:
- name: Yoshitake Takebayashi
email: xxxx@xxx.ac.jp
affiliation: Bayes-Juku
footnote: Corresponding Author
- name: Masaru Tokuoka
email: zzzz@zzzz.com
affiliation: Bayes-Juku
address:
- code: Some Institute of Technology
address: Department, Street, City, State, Zip
- code: Another University
address: Department, Street, City, State, Zip
abstract: |
This is the abstract.
It consists of two paragraphs.
bibliography: mybibfile.bib
output: rticles::elsevier_article
---
YMALヘッダーのbibliographyで引用文献情報のファイルを指定します。ここでは.bibファイルを指定します。.bibファイルは, 文献管理ソフトから作製すること可能です。
おっと, ここでタイトルから逸脱してしまいました。他ソフトに浮気してしまいました。実際的には,ここは文献管理を他のソフトでやってそこから.bibファイルを生成するのが一番良いですが, タイトル通り, 浮気せずにやってみましょう。RrefManageRというパッケージを使います。
RefManageRでは, 文献管理ソフトではZoteroから, 論文検索サイトではPubmedから書誌情報をゲットして.bibファイルを生成できます。 Zoteroから生成する場合,ユーザIDとアクセスキーが必要になります。ウェブ上でzoteroのアカウントにログインするとsettingから確認できます。
library(RrefManageR)
# zoteroから書誌情報を読み込む
zotero<-ReadZotero(user = "ユーザID", .params = list(q = "検索用語",
key = "アクセスキー"))
# pubmedから情報を読み込む
pubmed<-ReadPubMed("検索用語", database = "PubMed")
# .bibファイルとして出力する
WriteBib(zotero, file="zotero.bib",biblatex=T, verbose=F)
WriteBib(pubmed,file = "pubmed.bib", biblatex = T, verbose = F)
先のセクションでは, 二つの.bibファイルを作成しました(pubmed.bibとzotero.bib)。その場合, bibliography: を以下のように指定すればOKです。
bibliography:["zotero.bib", "pubmed.bib"]
papajaパッケージには, r_refs関数が含まれており,論文原稿の作成するrmdファイル内のチャンクで実行したRのパッケージの引用文献情報の.bibファイルを自動生成してくれます。最近は解析に使ったソフトウェアやパッケージの引用も求められることが多いです。そんな時,解析に使用したR packageの引用文献がひとまとめに取得できると便利です。
ここで生成されたr-references.bibも, YAMLヘッダーのbibliograpyに追加してやればOKです。
さて,.bibファイルができたら,本文中の引用文献を挿入したい箇所に文献情報を指定して行きます。ここからcitrパッケージが大活躍します。citrパッケージはRStudioのAddinとして機能します。まずは, パッケージをインストールします。
install.packages("citr")
パッケージをインストールできたら,本文の引用文献を挿入したい箇所にカーソルをセットします。そしてAddinから「Insert citation」を選択します。すると, YAMLヘッダーのbibliographyで指定した.bibファイルを読み込んで, gifの用にGUIで論文を選択できます。
install.packages("RefManageR","citr")
綺麗な器が揃ったら、メインディッシュの盛り付けです。論文のメインは、図表、数式ですね。論文形式に対応した図表の作成が必要ですが、そんなときに役立つpackageをいくつか。
APAスタイルで行きたいときは、papajaに含まれている関数が便利です。papajaの使い方の詳細は,papajaのbookdownが非常に役立ちます。apastatsは一般化線形混合モデルの表まで含めて作成されているようですが, まだ開発途上なようです。
APA系以外は,stargazerパッケージがいくつかの雑誌のスタイルをカバーしているようですが, 手広くありません。他には, broomパッケージと組み合わせて表が作れるpixiedustパッケージというのもあって, 使いこなせると便利そうですが詳細は追えていません。
ggsciはJAMAやNEJMやLancetなど高級雑誌のカラーパレットを指定できるパッケージです笑 この辺に当たり前に出せるようになれたらいいですね。。。
library("ggsci")
library("ggplot2")
library("gridExtra")
data("diamonds")
p1 = ggplot(subset(diamonds, carat >= 2.2),
aes(x = table, y = price, colour = cut)) +
geom_point(alpha = 0.7) +
geom_smooth(method = "loess", alpha = 0.05, size = 1, span = 1) +
theme_bw()
p2 = ggplot(subset(diamonds, carat > 2.2 & depth > 55 & depth < 70),
aes(x = depth, fill = cut)) +
geom_histogram(colour = "black", binwidth = 1, position = "dodge") +
theme_bw()
p1_lancet = p1 + scale_color_lancet()
p2_lancet = p2 + scale_fill_lancet()
grid.arrange(p1_lancet, p2_lancet, ncol = 2)
p1_jama = p1 + scale_color_jama()
p2_jama = p2 + scale_fill_jama()
grid.arrange(p1_jama, p2_jama, ncol = 2)
p1_jama = p1 + scale_color_jama()
p2_jama = p2 + scale_fill_jama()
grid.arrange(p1_jama, p2_jama, ncol = 2)
解析の統計量を文中に挿入する際に, 転記ミスが生じやすいものです。RStudioで解析した結果からそのまま数値を取ってきて文章に挿入するとそのようなエラーが減ります。
そのような志向のパッケージに, sigr(https://github.com/WinVector/sigr)やpsycho(https://github.com/neuropsychology/psycho.R)パッケージがあります。
例えば, 一般化線形モデルの解析結果の統計量を報告する際には
library(sigr)
d <- data.frame(x=c(1,2,3,4,5,6,7,7),
y=c(TRUE,FALSE,FALSE,FALSE,TRUE,TRUE,TRUE,FALSE))
model <- glm(y~x,data=d,family=binomial)
summary(model)
sigrのwrapChiSqTestを使って
cat(render(wrapChiSqTest(model),
pLargeCutoff=1, format='markdown'))
Chi-Square Test summary: pseudo-R2=0.023 (χ2(1,N=8)=0.25, p=0.61).
と, 統計量を含んだ文を生成してくれます。
その他に, 論文作成のために便利なaddinを紹介します。
後半, パッケージ名のみの紹介になってしまいましたが, 論文作成周りのパッケージが徐々に充実してきているように思います。私もまだまだつまずくことが多々ありますが, とりあえずテンプレートにそっておおよその形は作っていけるかと思います。解析結果をそのまま埋め込んでいける感じがやっぱ良いです。
Enjoy, Writing Manuscripts with RStudio !!
Allaire, JJ, R Foundation, Hadley Wickham, Journal of Statistical Software, Yihui Xie, Ramnath Vaidyanathan, Association for Computing Machinery, et al. 2017. Rticles: Article Formats for R Markdown. https://CRAN.R-project.org/package=rticles.
Allaire, JJ, Yihui Xie, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, Hadley Wickham, Joe Cheng, and Winston Chang. 2017. Rmarkdown: Dynamic Documents for R. https://CRAN.R-project.org/package=rmarkdown.
Aust, Frederik, and Marius Barth. 2017. papaja: Create APA Manuscripts with R Markdown. https://github.com/crsh/papaja.