『RとStanではじめる ベイズ統計モデリングによるデータ分析入門』のサポートページです。

この記事では、書籍の特徴などの紹介をしています。
本書に使用したサンプルデータとR,Stanのコードは、すべてGitHubから参照できます
ソフトウェアのインストール方法や実行方法の補足事項なども記しています。

 


RとStanではじめる ベイズ統計モデリングによるデータ分析入門

 
2019年7月:初版第1刷発行
 

出版社の書籍紹介ページはこちらです

丸善さん/ジュンク堂書店さんの在庫はこちらから確認できます

紀伊國屋書店さんの在庫はこちらから確認できます

楽天さんの在庫はこちらから確認できます

 

目次

  1. 基本情報
  2. 書籍の特徴
    1. テーマ
    2. 対象読者
    3. 書籍の構成
    4. 本書に載っていないこと
  3. 本書のサポート情報
    1. サンプルデータとコード
    2. 環境構築の手順
    3. エラーが出た時の対応
    4. 参考資料

 

1.基本情報

出版社  : 講談社
著者   : 馬場真哉(このサイト、Logics of Blueの管理人です)
タイトル : RとStanではじめる ベイズ統計モデリングによるデータ分析入門
発売日  : 2019年7月10日

簡易目次 :
 第1部 【理論編】ベイズ統計モデリングの基本
 第2部 【基礎編】RとStanによるデータ分析
 第3部 【実践編】一般化線形モデル
 第4部 【応用編】一般化線形混合モデル
 第5部 【応用編】状態空間モデル

『実践Data Scienceシリーズ』というシリーズの1冊目となります。
定価は3000円で、消費税8%とすると税込み3240円となります。

 

2.書籍の特徴

前書きの内容を参照しつつ、書籍の特徴を記します。

以下、前書きより引用

 本書は,ベイズ統計モデリングをこれから学ぼうとされる方のための入門書です.ベイズ統計モデリングによるデータ分析を体験してもらうことを目的として執筆しました.
 本書では,ベイズ推論とMCMC の組合せを活用して,モデルを推定します.R とStan というともに無料で使えるソフトウェアの組合せを活用して,さまざまな分析を,実際に手を動かして実行します.ベイズ統計モデリングの良書はすでにいくつか出版されています.その中で,本書の特徴は以下のようになるでしょう.

  1. 数学的な議論が少ない,チュートリアル形式の入門書である
  2. ベイズの定理などの基本事項をしっかり復習できるようになっている
  3. Stan の基本だけでなく,推定結果の図示など「分析を実行する」技術も解説している
  4. brms やbayesplot など,優れたパッケージを積極的に活用している
  5. GLM からGLMM,DLM,そしてDGLM へと順にモデルを発展させていく

 

テーマ

完全なる主観ですが、ベイズ統計モデリングは、詳しい人とそうでない人の差が、埋まることなく開き続けているように感じています。
詳しい人は、どんどん高度な技術を推し進めていく。
そうでない人は、後でやろうと思いつつ、スタート地点からなかなか先に進めない。
このギャップを埋めたい、と願って執筆したのが『RとStanで始める ベイズ統計モデリングによるデータ分析入門』です。

本書は、基礎から順番にステップアップしていき、応用的な内容に移っていく構成になっています。
いきなり実践・応用を行うのではなく、ウォーミングアップを念入りにするわけです。

本書は5部構成となっています。
第1部の【理論編】でベイズ統計モデリングの基礎理論を学びます。
第2部の【基礎編】RとStanによるプログラミングの基礎を学びます。
第3部の【実践編】で一般化線形モデル(GLM)という実用的な統計モデルが登場します。
第4部と第5部の【応用編】で、一般化線形混合モデル(GLMM)や状態空間モデル(特に動的線形モデルDLMと動的一般化線形モデルDGLM)を学ぶ構成になっています。
階層構造を持つ複雑なモデルを自由に推定するというのが、やはり目標になるわけですが、そこに至るまでの段階を大切にした書籍となっています。
もちろん基礎理論だけでなくGLMやDLMといった個別のモデルの解説にもページ数を割いたので、RとStanを使ったベイズ統計モデリングのだいご味も味わえるはずです。

文章の書き方も工夫しました。すべての章において「テーマ・目的・概要」を予め説明してから本論に移るようにしています。
本論の流れをつかんでから詳細に移ることで、読者の方が「何が書かれているのかわからないまま読み進める」という状況に陥らないことを目指しました。
また、著者である私が「なぜこの章を書いたのか」という目的を記すことで、読者の方が「この章から何を学べばいいのか」を理解できるようになることを狙っています。

 

対象読者

統計学の基礎やベイズの定理などの基本事項を学んでみたものの、その有効性がピンとこない、という方を対象としています。
例えば、ベイズの定理の導出では終わらない、より実用的なベイズ統計学について学んでみたいと思った方、あるいは統計モデリングに興味が出てきた方は、本書の対象読者であるといえます。理系文系は問わず、データを分析する必要性がある人はもちろん、データサイエンスが専門でないエンジニアの方でも読めるような内容を目指して執筆しました。

逆に、R やStanを使ったベイズ統計モデリングにすでに明るいという方は、読者として想定していません。ベイズ統計学の数理的な側面もある程度省略しました。基本的な事項を、実装を何度も繰り返すことを通じて学ぶ構成になっています。
ベイズ統計モデリングの上級者をさらなる高みへと持っていく本ではないことに、留意してください。

 

書籍の構成

前述の通り、本書は5部構成となっています。
簡易目次を再掲します。
 第1部 【理論編】ベイズ統計モデリングの基本
 第2部 【基礎編】RとStanによるデータ分析
 第3部 【実践編】一般化線形モデル
 第4部 【応用編】一般化線形混合モデル
 第5部 【応用編】状態空間モデル

各々の部の紹介を以下で行います。

第1部 【理論編】ベイズ統計モデリングの基本

本書では、確率・統計、そしてベイズ統計モデリングの基礎理論の復習から入ります。「知識の確認」以上の意味を込めて、この復習パートを、力を入れて執筆しました。
ベイズの定理からスタートする構成ではありません。さらに初歩的な、統計学の基本や確率の加法定理・乗法定理の考え方、確率分布の基本の解説からスタートする構成となっています。
そのうえで確率モデル・統計モデルの基本的な考え方を解説し、そのあとでようやくベイズ推論、そしてMCMCが登場します。

第1部ではRやStanのコードは出てきません。基礎理論を学ぶパートとなります。
数式も必要最小限にとどめました。ベイズ推論の数理的な側面やMCMC(特にNUTS)の詳細なアルゴリズムなどはある程度省略しています。
「なぜこの技術が必要になるのか」という必要性を日本語で解説することで、順を追って無理なくステップアップしていける構成を目指しました。

第2部 【基礎編】RとStanによるデータ分析

第2部では「ベイズ統計モデリングのためのプログラミングの技術」を解説しています。
R言語の復習から入り、Stanの基本的な使い方をこちらで解説します。

Stanを使ったベイズ統計モデリングは、初学者の方にとっては「コードを実行する」あるいは「コードを解読する」だけでもそれなりにハードルが高いと感じられることがあるようです。例えばR言語の使い方でさえ不安があるのに、さらにStanの文法まで覚えるのは少し大変だ、と思われる人もいるでしょう。

第1章でRの基本文法をおさえます。しかし、通り一遍の「R言語入門」だけでは終わりません。インデックスや列名・行名を使ったデータの抽出の方法、forループの仕組み、そして乱数の生成と”乱数の種”の使い方の解説などを行っています。これらを理解しているのといないのとでは、RやStanのコードを読んだ時の理解度が大きく変わると考えたからです。
第2章ではRを用いたデータの要約の方法を解説しています。この章では例えばquantile関数を使ったパーセント点(分位点)の計算の仕方や、カーネル密度推定法の直観的な解説などを載せています。そして第3章ではggplot2の使い方の解説をしています。
ベイズ統計モデリングを行うにあたって「縦横無尽に」使われる技術を、あらかじめ学んでから実践に進んでいただく構成となっています。

第4章から6章までがStanを使ったプログラミングを学ぶパートとなります。
Stanを使って「平均値と分散を推定する」という初歩的な問題を第4章で扱います。第5章では「MCMCを実行した後」に行う各種の評価の方法を解説します。それは収束の評価の方法であったり、事後予測チェックであったりします。最終的にはbayesplotパッケージをつかうことになるのですが、あえてggplot2(やggfortify)を使って”手作業で”グラフを描く方法も記しています。「Rの関数でできることが、私のできることのすべて」となってしまうのは、とてももったいないことであるからです。
第6章では、4章と5章を補足する目的で、Stanの様々な文法の解説を載せています。

第2部までを読了することで、RとStanを使った基本的な分析を行う技術が身につくはずです。

第3部 【実践編】一般化線形モデル

第3部からは、実用的な内容に移ります。一般化線形モデル(GLM)の解説をここで行います。
一般化線形モデルは、様々な統計モデルの基礎といえるモデルです。これ自体が実用的であるだけではなく、一般化線形モデルを発展させることで複雑なモデルを作っていくという「統計モデリングのスタート地点」ともいえる存在です。

ベイズ統計モデリングというと「複雑な階層構造を持つモデルでも、自由に推定できる」というのが、これを使う大きなモチベーションになっていると思います。
しかし、最初のうちは、階層構造がほとんどなくて説明変数も少ない、単純な構造を持つモデルを対象とします。初学者の方が基礎から一歩ずつ進めていけるような、ゆっくりとしたペースで進んでいく構成になっています。

第1章で一般化線形モデルのいくつかの構造を例示します。一般化線形モデルの枠組みで扱える構造を網羅することは目指していません。その代わりに、線形回帰モデルやダミー変数の使い方など、基本的な構造を、ページ数を割いて解説しました。
またデザイン行列を用いたモデルの表現方法も解説しました。入門的な書籍では行列表現を省略することが多いと思います。しかし、中・上級者向けの書籍では当たり前のように行列表現が現れます。より高度な書籍へと進むさいの足掛かりになることも狙って、行列表現の練習をするパートを用意しました。こちらでは、行列の基本的な演算の仕方から始めて、一般化線形モデルの効率的な表現の方法を学ぶ構成になっています。

第2章から5章まで、ずっと単回帰モデルを対象とした解説が続きます。
第2章では単回帰モデルをStanで推定する方法を解説し、第3章では予測の方法を、第4章でデザイン行列を使った実装の方法を解説し、第5章でbrmsという便利なパッケージを使った実装の方法を解説します。
単回帰分析をマスターしてから、応用的な構造に進んでほしいので、このような構成になっています。

第6章以降は、ダミー変数の使い方や、ポアソン回帰モデル、ロジスティック回帰モデルという、重要なモデルの構築方法を解説します。
第10章で交互作用について解説しています。交互作用は、実装は簡単なのですが、解釈を誤りやすいことで有名です。そこで「カテゴリ×カテゴリ」「カテゴリ×数量」「数量×数量」の3パターンにおいて、モデルの実装の方法と結果の解釈の方法を記しました。交互作用に関してここまで丁寧に書かれた書籍は少ないのではないかと思います。

Stanを使ったベイズ統計モデリングは、慣れてくれば、ブロックを組み合わせるようにして複雑な構造を実装していくことができます。
しかし、最初から複雑な構造を対象とすると、個別の構造が理解しにくくなるかと思います。
個別の構造を切り出して、その特徴を吟味する、というやり方で解説する方針としました。

第4部 【応用編】一般化線形混合モデル

第4部からは応用的なモデルに移ります。階層構造を持つモデルを扱うことになり、ここからは「本格的なベイズ統計モデリングだ」と思えるかもしれません。
とはいっても、第4部以降においても「個別の構造を切り出して、その特徴を吟味する」というやり方は変わりません。

第1章ではポアソン回帰モデルにおける過分散の問題を解決するための一般化線形混合モデルの構造を説明します。
第2章、第3章では「グループごとに異なったランダム効果が加わる(あるいは同じグループ内では同じランダム効果が加わっている)」モデルを解説します。
第2章ではランダム切片モデルを、第3章ではランダム係数モデルを解説します。ランダム効果の使い方における、最も初歩的でかつ頻繁に用いられる技法を、単純な事例を通して学ぶ構成になっています。

第5部 【応用編】状態空間モデル

第5部では状態空間モデルを用いた時系列分析を解説します。
基本的に線形のモデルしか対象としませんが、行列表現は避けました。個別の成分を切り出して、その成分ごとに章を分けて解説するようにしています。

第1章で状態空間モデルの基本的な用語を整理します。
第2章では、確率的に変動する水準成分を取り上げます。いわゆるローカルレベルモデルと呼ばれるモデルの解説となります。第3章ではローカルレベルモデルを対象として、予測や補間をする方法を解説しています。
第4章では、時変係数のモデルを扱います。これは回帰係数が時点によって変化することを想定したモデルです。状態空間モデルを使いたいと思う大きなモチベーションとなる構造かと思います。一般化線形モデルとの対比をしながら解説しました。
第5章では、トレンドの構造を解説します。確定的トレンド、確率的トレンド、そして2次のトレンド(平滑化トレンド)とローカル線形トレンドを解説します。「平滑化トレンドだけの解説」とか「ローカル線形トレンドだけの解説」で終わるのではなく、様々なトレンドの構造を対比させながら解説しました。
第6章では確定的周期成分、確率的周期成分を解説し、トレンドの構造と組み合わせた基本構造時系列モデルを導入します。ここまでで、線形ガウス状態空間モデル(別名は動的線形モデル:DLM)の解説はひと段落着くことになります。
第7章では補足的に、自己回帰モデルについて解説しました。状態空間モデルにおいて、自己回帰成分を組み込むことはしばしば行われるからです。構造そのものを知っておくことは有益だと思います。

第8章と第9章では、線形非ガウス状態空間モデル(別名は動的一般化線形モデル:DGLM)を扱います。
DGLMは一般化線形モデル(GLM)の拡張ともいえるし、動的線形モデル(DLM)の一般化であるともいえます。両者との対比をしながら、自然な導入ができるように工夫しました。
DGLMの構造を理解して、これを推定できるようになるのが、本書のゴールとなります。

全体を通して

本書では、線形な構造のみ、説明変数が少ないモデルのみを扱っています。その代わりに、GLM~GLMM~DLM~DGLMへと順番にモデルを発展させていって、基本的なクロスセクションデータから階層構造を持つデータそして時系列データまで、幅広いデータに対して適用できる構造を紹介しています。

応用的なモデルであっても、本書で解説した構造が使われることはしばしばあるかと思います。
より応用的な文献へ進む際の足掛かりとして、ベイズ統計モデリングへの第一歩を踏み出すために、本書を使っていただければ幸いです。

 

本書に載っていないこと

本書では、網羅性を満たすことよりも、個別のテーマを丁寧に記載することを目指して執筆しています。
そのため、本書でベイズ統計モデリングのすべてのテーマを扱えているわけではありません。
本書では以下のテーマを扱っていません。

  • 説明変数が多く含まれるモデル
  • 非線形な構造を含むモデル
  • WAICなどの情報量基準を用いたモデル選択
  • MCMC(特にHMC法の実装であるNUTS)の数理的な側面や詳細なアルゴリズム
  • 共役な事前分布を用いて解析的に解を得る方法、など

 

3.本書のサポート情報

こちらでは、書籍中で使われたサンプルデータとコードを配布しています。
また、環境構築の方法や、コードを実行したときにエラーが出た場合の対応方法も紹介します。

 

サンプルデータとコード

 
本書に使用したサンプルデータとR,StanのコードはすべてGitHubから参照できます。
緑色の「Clone or download」というボタンをクリックしてから「Download ZIP」をクリックすると、すべてのファイルをZIP形式でダウンロードできます。
書籍のサンプルコードとデータ

 

環境構築の手順

Rは下記のリンクからダウンロードしてください。
https://cran.ism.ac.jp
または
https://cran.r-project.org/

RStudioは下記のリンクからダウンロードしてください。無料の『RStudio Desktop Open Source License』をインストールします。
https://www.rstudio.com/products/rstudio/download/

 
パッケージのインストール方法は、書籍の内容も参照してください。
RStanのインストールは『RStan Getting Started (Japanese)』という外部リンクも参照してください。

以下のコードを実行すれば、本書で使用するすべてのパッケージをインストールできます。


# 第2部第3章までに使われるパッケージ
install.packages("tidyverse")
install.packages("ggfortify")

# rstanのインストール
install.packages("rstan", 
                 repos="https://cloud.r-project.org/", 
                 dependencies=TRUE)

# Rtoolsのインストール
pkgbuild::has_build_tools(debug = TRUE)

# Stanをより使いやすくする
install.packages("bayesplot")
install.packages("brms")

# boatデータ
install.packages("KFAS")

 

エラーが出た時の対応

参考までに、当方のPC上で再現したエラーと、その対応を以下に記します。
お手持ちの環境によって、対処法などが異なるかもしれません。この点を理解いただいたうえで、以下の内容を参照してください。

なお、以下の対応はすべて、OSがWindows10の64bitバージョンで確認しています。

 
基本的には事例2のコンパイル設定の変更だけで動くかと思いますが、この設定時にエラーが出るケースがあったので、少し詳細に手順を記しました。
rstanやRのバージョンによって、作業手順が変わる可能性があります。
あまりPCの操作に詳しくない方でも実行でき、追加のソフトウェアのインストールや仮想環境の構築を行わなくても実行できる方法を選んで載せたつもりです。他の対処方法があるかもしれません。
また、繰り返しになりますが、下記手順は、あくまでも当方の実行環境下で確認された方法となります。
PATHの追加など、PCの設定変更に関しては自己責任で実行をお願い致します。
恐れ入りますが、上記の点、ご理解ください。

 

事例1:パッケージのインストールの際にエラーが出る

RStudioのアイコンを右クリックして「管理者として実行」してください。
RStudioを管理者として実行した状態でパッケージのインストールを行うと、うまくいくことがあります。

 

事例2:Stanのコンパイルが通らない

『C++14 standard requested but CXX14 is not defined』のようなエラーがでて、コンパイルが通らないことがあります。
この場合は『RStanのインストール時に C++14 standard requested but CXX14 is not defined と怒られた時の対処|Qiita』という外部リンクを参照して、記載されているコードを実行してください。

外部リンク先のコードを実行すると、Sys.getenv("HOME")で出力されるフォルダ上に、『.R』という名前のフォルダが作られ、そのフォルダの中に『Makevars』という名前の拡張子のないファイルが作成されます。
どんなファイルなのかが気になる場合、あるいはうっかりで2回以上、上記のコードを実行してしまった場合は、コンソール上でSys.getenv("HOME")と実行してください。フォルダ名が出力されます。
『Makevars』という名前のファイルに、以下のように記載されていればOKです。


CXX14FLAGS=-O3 -Wno-unused-variable -Wno-unused-function
CXX14 = g++ -std=c++1y

同じ設定が何度も記されていると問題です。この場合は一度ファイルを削除してから、外部リンク先のコードを再実行してください。

その他、コンパイルの設定は様々変えることができます。詳細は『RStan Getting Started (Japanese)』という外部リンクを参照してください。

 

事例3:事例2のコードがエラーで動かないとき

全角文字が含まれるフォルダがHOMEフォルダに指定されてしまい、事例2の外部リンクに載っているコードを実行するとエラーが出ることがあるようです。
著者の場合は「ドキュメント」という全角カタカナがフォルダ名に入っており、エラーになっていました。

様々な対策がありますが、HOMEフォルダを変えてしまうのが一つのやり方です。

Cドライブ直下に、例えば『C:\r_home』というフォルダを作ってください。
そして、以下のコードをRStudioで実行します。


Sys.setenv("HOME" = "C:/r_home")
Sys.setenv("R_USER" = "C:/r_home")

上記のコードを実行した後に、事例2の手順に従って『Makevars』ファイルを作成します。
すると、『C:\r_home』というフォルダの中に『.R』というフォルダができ、その中に『Makevars』という名前の拡張子がないファイルが作成されるはずです。

 
次回以降は、RStudioを起動させるたびに、以下のコードを実行します。


Sys.setenv("HOME" = "C:/r_home")
Sys.setenv("R_USER" = "C:/r_home")

本来は、設定を恒久的に変えてしまうのが良いかもしれません。
ほかの分析に悪影響を及ぼさないようにするため、ここでは、上記のやり方を記しておきます。

 

事例4:RtoolsのPATHが通っていない

事例2~3の時とはエラーメッセージが変わって『Compilation ERROR, function(s)/method(s) not created! sh: g++: command not found』などというエラーが出ることがあります。
この場合はRtoolsのPATHが通っていないのが理由になります。

PCによって異なる可能性がありますが、『C:\RBuildTools』などにRtoolsがインストールされているはずです。
64bitのOSをお使いの場合は、WindowsのPATHに以下の2つを追加してください。

C:\RBuildTools\3.5\bin
C:\RBuildTools\3.5\mingw_64\bin

WindowsにPATHを追加する方法は、いくつかあるでしょうが、『windows path 追加』などで検索いただければ、手順が載っているかと思います。

 
参考になれば幸いです。

 

参考資料

主にWebで閲覧できる、ベイズ統計学やStanプログラミングの参考資料のリンクを以下に記載します。

Stan-Documentation
 拙著「RとStanではじめる ベイズ統計モデリングによるデータ分析入門」で主に使用しているソフトウェアであるStanの公式ドキュメントです。英語です。

stan-reference(日本語)
 Stanのリファレンスです。有志の方々が日本語に翻訳作業を進めてくださっています。

StatModeling Memorandum
「StanとRでベイズ統計モデリング (Wonderful R)」の著者の方のWebサイトです。
 ベイズ統計モデリング全般に関して、大変有益な情報が多く公開されています。

生態学のデータ解析 – ベイズ統計 & MCMC
「データ解析のための統計モデリング入門: 一般化線形モデル・階層ベイズモデル・MCMC」の著者の方のWebサイトです。
 統計モデリングの初歩からベイズ統計モデリングまで、様々な情報が公開されています。

作って遊ぶ機械学習
「ベイズ推論による機械学習入門」の著者の方のWebサイトです。
 ベイズ推論や機械学習法など、様々なトピックが公開されています。

六本木で働くデータサイエンティストのブログ
 Stanのインストール方法から分析事例まで、様々なトピックが公開されています。

Rで楽しむStan
「Rで楽しむベイズ統計入門」の著者の方のWebサイトです。
 現在は工事中と記載がありますが、Stanのサンプルコードなどが公開されています。

Kosugitti’s BLOG
 Stanを使った分析事例など、様々なトピックが公開されています。

 なお、上記リンク先では状態空間モデルを用いた欠損値補間のコードが記載されています。
 欠損値補間には様々な方法がありまして、以下の記事も参考になります。
{rstan} 欠損値あり時系列データのモデル推定
 この辺りはStatModeling Memorandumの以下の記事も参考になります。
RStanで『予測にいかす統計モデリングの基本』の売上データの分析をする
不等間隔の状態空間モデル
なお、拙著「RとStanではじめる ベイズ統計モデリングによるデータ分析入門」では、可読性を鑑みて松浦(2016)「StanとRでベイズ統計モデリング (Wonderful R)」記載の方法を採用しています。しかし、欠損値補間の方法は1つには限らず、様々あることは覚えておくとよいかと思います。欠損値補間の使用頻度は高いと私は感じます。

Sunny side up!
 Stanを使った分析事例など、様々なトピックが公開されています。

nora_goes_far
 brmsの使用例など、様々なトピックが公開されています。

Stan Advent Calendar 2018
 Stanを用いた分析事例など、様々なトピックのリンク集となっています。

 
 
 
 


RとStanではじめる ベイズ統計モデリングによるデータ分析入門

 
hontoさん
楽天さん
 

 
更新履歴
2019年06月10日:新規作成
2019年06月17日:GitHubへのリンクを追加。データ配布に関する文言を一部修正。
         インストール手順や、コンパイルエラーへの対応を追記。
2019年07月01日:参考資料へのリンクを追加
2019年07月09日:出版社と紀伊国屋書店さんへのリンクを追加