岩波データサイエンス Vol.1

[特集] 
ベイズ推論とMCMCのフリーソフト のサポートページ

本巻で使用されているソースコードやデータは以下のURLから取得できます。
https://github.com/iwanami-datascience/vol1


【DSオリジナル】の表記のある動画や原稿は岩波DSウェブサイトのオリジナルコンテンツです。

目次

  1. 1 イントロダクション「階層ベイズで何ができるか」【DSオリジナル】
  2. 2 ベイズ統計超速習 (伊庭幸人)
  3. 3 2ページで分かるMCMCの秘密 (伊庭幸人)
  4. 4 階層ベイズ 最初の一歩 ― JAGS を使って (久保拓弥)
    1. 4.1 階層ベイズミニ解説の動画【DSオリジナル】
    2. 4.2 JAGSのインストールについて
    3. 4.3 {rjags}のインストールについて
  5. 5 時系列・空間データのモデリング (伊東宏樹)
    1. 5.1 CARBayes のインストール
    2. 5.2 CARBayes を使ったコードの修正
    3. 5.3 OpenBUGS のインストール
    4. 5.4 R2OpenBUGSのインストール
  6. 6 MCMCソフトを使う前に ― 一般的な準備から統計モデリングまで (松浦健太郎)
  7. 7 Stan入門 ― 次世代のベイジアンモデリングツール (松浦健太郎)
    1. 7.1 Stanの開発陣によるプロモーションビデオ
    2. 7.2 Stan&RStanのインストール方法
    3. 7.3 RStanの並列実行
    4. 7.4 収束判定
    5. 7.5 Stanを扱っているブログのURLの修正
    6. 7.6 ハミルトニアンMCMCの解説 by 伊庭 【DSオリジナル】
    7. 7.7 NUTSの論文と動画
  8. 8 PythonのMCMCライブラリPyMC (渡辺祥則) & Pythonとは (高柳慎一)
    1. 8.1 開発環境(IDE)
    2. 8.2 Pythonのインストール
    3. 8.3 パッケージ管理システムpipのインストール
    4. 8.4 PyMC3のインストール方法 
    5. 8.5 さらに学ぶためのリンク集
    6. 8.6 補足
  9. 9 MCMCソフトウェアの比較 (松浦健太郎)
  10. 10 時間・空間を含むベイズモデルのいろいろな表現形式 (伊庭幸人)
    1. 10.1 Brook's lemmaの考え方についての解説 【DSオリジナル】
    2. 10.2 状態空間モデルの周辺
    3. 10.3 カーネル法とのつながり
    4. 10.4 マルコフ場・空間モデリング
  11. 11 赤池スクールとベイズ統計―1980年代の統計数理研究所 (伊庭幸人)


イントロダクション「階層ベイズで何ができるか」【DSオリジナル】

ちょっとイントロがそっけなかったので長くしたものを動画で入れます.まだ買われていないかたもどうぞ.19分.

イントロダクション(ロングバージョン) 特集担当 伊庭





ベイズ統計超速習 (伊庭幸人)

版元在庫切れのため,特集の参考文献には入れませんでしたが,以前編集した「数学セミナー」の階層ベイズ特集があります.
数学セミナー2007年11月号


久保さんはじめ,樋口さん,当時は超若手だった持橋さんなど,色々な方が応用中心に書いておられます.実用を重んじたこの特集とは相補的だと思うので,図書館などで入手できたらぜひ読んでみてください.

図3ですが,変数Sを確率変数とみなさないなら,いちばん上の〇でかこんだSは図に描かないのが普通かもしれません.つい描いてしまったので,式のほうもp(w)とせずに,p(w;s)のようにパラメータをあらわすセミコロンを使いましたが,違和感があるかもしれません.

ベイズでない信頼区間

ベイズでない予測区間

グラフ表現(有向グラフ.無向グラフ)については,宮川雅巳「グラフィカルモデリング(朝倉書店)の2章と3章,ビショップ「パターン認識と機械学習」(丸善)の下巻8章,などに解説があります.


2ページで分かるMCMCの秘密 (伊庭幸人)

2ページでは足りない方はこちらをどうぞ
統計数理研究所のサイトにあるMCMCの入門講義(90分くらい)

MCMC入門講義 by 伊庭幸人




階層ベイズ 最初の一歩 ― JAGS を使って (久保拓弥)

追加の情報などが久保拓弥のページにあります.

この解説を読む助けになるQ and Aを作成しました(PDF 7ページ)【DSオリジナル

2番目の答とその中の図で「サンプル平均」とパラメーターとしての平均(この推定値が母平均の推定値になる)の区別があいまいだったのをより明確にしました(10/11) .ひとつ不適切な答があったので差し替えました(青字,10/9)

階層ベイズミニ解説の動画【DSオリジナル

階層ベイズミニ解説(久保)

JAGSのインストールについて

JAGSのインストール方法は以下の公式ページを参照し、OSごとの指示に従ってインストールします。

Windows およびMac にはインストーラーが用意されているので(http://sourceforge.net/projects/mcmc-jags/files/ からダウンロードできます)、それを使うとよいでしょう。なお、64 ビット版Windows では、インストール時に32 ビット版を選択しないようにします(詳細はhttp://hosho.ees.hokudai.ac.jp/~kubo/ce/JagsMisc.html を参照)。Linux でも、主要なディストリビューションにはバイナリパッケージが用意されていますし、自分でコンパイルすることもできるでしょう。例えば、WindowsにJAGS 3.4.0をインストールする場合には、ここ(http://sourceforge.net/projects/mcmc-jags/files/JAGS/3.x/Windows/)から「JAGS-3.4.0.exe」をダウンロードしてダブルクリックして指示に従ってインストールします。

{rjags}のインストールについて

Rのインストールはすでにされているとします。Rから使えるようにするにはRを起動し、以下のコマンドで{rjags}パッケージをインストールします。

  • install.packages("rjags")


時系列・空間データのモデリング (伊東宏樹)

Rの各パッケージとJAGS以外のソフトウェアへのリンクは以下の通りです。

CARBayes のインストール

CARBayes はCRAN に登録されていますので、通常のパッケージと同様に、Rを起動し以下のコマンドを実行することでインストールできます。

  • install.packages("CARBayes")

CARBayes を使ったコードの修正

CARBayes 4.4では関数の仕様が変わっていたので、掲載コードの修正が必要になりました。以下を参照してください。

OpenBUGS のインストール

Windows では、インストーラー(http://www.openbugs.net/w/Downloadsからダウンロードできます)をつかってインストールできます。ただし、管理者権限が必要になります。

Mac では、Wine を使うことによりWindows 版のインストールと使用が可能になります。Mac 用のWine バイナリはいくつかのサイトで配布されていますし、MacPorts またはHomebrew からのインストールもできます。これらのうち、筆者がOpenBUGS の動作を確認したものはWineBottler 同梱のWine.app とMacPorts(ともにバージョン1.6.1)です。

OpenBUGS にはLinux 版もあります。詳細はhttp://www.openbugs.net/w/Downloads をご覧ください。
R から利用するには、R2OpenBUGS などのパッケージを利用します。

R2OpenBUGSのインストール

R2OpenBUGSも同様に、Rを起動し以下のコマンドを実行することでインストールできます。

  • install.packages("R2OpenBUGS")

MCMCソフトを使う前に ― 一般的な準備から統計モデリングまで (松浦健太郎)

記事の中で言及したソフトへのリンクは以下の通りです。

OpenRefineの使い方については以下の統合TVの動画が分かりやすいです。


Stan入門 ― 次世代のベイジアンモデリングツール (松浦健太郎)

Stanの開発陣によるプロモーションビデオ


Stan&RStanのインストール方法

公式ホームページを参照してください。
https://github.com/stan-dev/rstan/wiki/RStan-Getting-Started
Windows 7や8.1でしたら、基本的には以下の手順でRとStanとRStanがインストールされます。
  1. 以下のURLからRの最新版をダウンロードしてインストール
  2. Rのバージョンと対応しているRtoolsを以下のURLからダウンロードしてインストール後、PATHを通す
  3. Rを起動してinstall.packages("rstan", dependencies = TRUE)」とタイプする。しばらく待つ。
  4. Rの再起動

RStanの並列実行

Stan2.7.0以降から簡単になりました。具体的には計算の前にR上で以下を実行してオプションを設定しておくだけで並列化されます。

収束判定

本書では詳しく触れませんでしたが、例えば 久保データ解析のための統計モデリング入門―一般化線形モデル・階層ベイズモデル・MCMC」(岩波書店)の8章を参考にして下さい。松浦は基本的にはchains数3以上でサンプリングを実行し、全てのパラメータのR hat < 1.1 となった時、「収束した」と見なしています。その他、trace plotの形は必ず見ます。その形状がモデルの改善のヒントになることがあるためです。また、「収束しない場合にそのまま解析をすすめていいですか?」という質問をよく受けますが、答えは「ダメ」です。収束するまでモデルの試行錯誤を繰り返します。収束を改善させる指針というものはいくつかありますが、またの機会にしたいと思います。

Stanを扱っているブログのURLの修正

ハミルトニアンMCMCの解説 by 伊庭 【DSオリジナル】

解説原稿: ハミルトニアンMCMCの解説(PDF)  【DSオリジナル】
DSに掲載予定で書いたが,難しめなのとモデリングにページ数を割きたいため掲載見合わせとなったもの.いずれ改稿してどこかに載せたいですが,それまでは無料コンテンツとしてここに置きます.
p.24 1行目
「x2が選ばれる確率は」→正「x1が選ばれる確率は」

動画: ハミルトニアンMCMC講義 【DSオリジナル】 (約60分)
上とは一応別モノです.たぶん上の原稿のほうが完成度が高い
この講義のスライド(PDF)

YouTube 動画


NUTSの論文と動画

NUTS(No-U-Turn Sampler)の情報は以下のページの「Papers about Stan」にある論文を参照して下さい。
http://mc-stan.org/citations/

解説の動画は以下にあります。

PythonのMCMCライブラリPyMC (渡辺祥則) & Pythonとは (高柳慎一)

開発環境(IDE)

Pythonスクリプトの編集、実行にはEmacs,Vimのようなテキストエディタを利用することが出来、有名なIDEとしてはPyCharmがありますが、データ解析のようなモデル改変、計算実行のイテレーションや結果の可視化が多い用途ではMatlabやRstudioに似たIDEであるSpyderの方が使い勝手が良いようです。またpythonスクリプトの対話的な実行、データの可視化とその公開にはipython notebookが有用です。Githubへのアップロードやnbviewerを介することでWeb上に公開したnotebookの表示をすることも出来ます。

Pythonのインストール

windowsではPythonはあらかじめインストールされていないので以下のURLからMSI installerをダウンロード、インストールする必要があります。

パッケージ管理システムpipのインストール

pipはget-pip.pyを以下のURLからダウンロードした後、
python get-pip.pyでインストールできます。

PyMC3のインストール方法 

Pythonではパッケージマネージャとしてpipが用いられています。PyMCはnumpy, scipy, Theano, Matplotlibに依存しているのでこれらをインストールする必要があります。continuum.io社の提供するPython環境Anacondaを用いるとnumpy, scipy, Matplotlibなどの主要なパッケージのインストールとアップデートが自動で行われるようになり便利です 。PyMC3は開発版であるのでgithubのリポジトリを指定することでインストール、使用することが出来ます。

Linux, Macの場合の具体的な手順

macの場合は以下でfortranを先にインストールします。
brew install gfortran

その後依存ライブラリをpipでインストールします。
pip install numpy
pip install scipy
pip install matplotlib
pip install Theano

matplotlibのインストールでエラーが出た場合は依存ライブラリ(libpng, freetype2)もインストールします(参考) 。
# mac homebreaw
brew install libpng
brew install freetype

# linux apt-get
sudo apt-get install libpng-dev
sudo apt-get install freetype

pymc3のインストール
pymc3は開発版なのでprocess-dependency-linksオプションをつけてその最新版をインストールします。
pip install --process-dependency-links git+https://github.com/pymc-devs/pymc3

Windowsの場合の具体的な手順

WindowsではnumpyやTheanoでのC++コンパイラのインストール、パスの指定などを行わなければなりません。その工程が煩雑なためnumpyなど有名なパッケージのバイナリが http://www.lfd.uci.edu/~gohlke/pythonlibs/ にて提供されています。Numpy,scipy,matplotlibを上記サイトからダウンロード、インストールした後にLinuxなどと同様に以下を実行します。
pip install Theano
pip install --process-dependency-links git+https://github.com/pymc-devs/pymc3

さらに学ぶためのリンク集

PyMCの本家リポジトリにソースコード、サンプル、チュートリアルやたのドキュメントへのリンクがあります。開発者による英語の紹介論文も公開されています。本記事と同様のモデルを詳細に解説しています。

関連するブログとして
があります。また以下の内容は PyMC2 を用いたものですが参考になります。
これをPyMC3で実装したものも一部公開されています。

補足

theanoは毎回pythonのコードをコンパイルしているのではなく、キャッシュファイルを作って以前コンパイルしたものは使いまわすようにして時間を節約しています。GPUを使う、CPUを使うなどのTheanoの設定を切り替えた場合にこのキャッシュファイルが残っているとエラーになってしまいます。

現状pymc3はインポートされるときにTheanoのデバッグモードを有効にしてしまうようになっているようです。
この状態でキャッシュファイルが作られあとで他のことをTheanoでやろうとするとエラーになってしまうようです。

対処法としてはpymc3を使ったあとにTheanoや他のTheanoに依存したライブラリを使う場合はキャッシュファイルを消すというのがあります。以下のLamblinさんの回答:
キャッシュファイルの場所は以下です。
[Windows]
C:\Users\ユーザー名\AppData\Local\Theano\compiledir* 以下
[Linux, Mac]
~/.theano/compilrdir* 以下

よりエレガントな方法としてはvirtualenvというpythonの実行環境を仮想的に複数作る仕組みを使ってpymc3を使う環境とそれ以外の環境(特にGPUをつかうもの)を分ける方法がありますが、渡辺は試していないので有効かどうかはわかりません。

MCMCソフトウェアの比較 (松浦健太郎)

各ソフトウェアへのリンクを紹介します。

他にもMCMCに限らず、モデルをコーディングすることで推定計算をお手軽に実行してくれる確率的プログラミング言語はたくさんあります。以下のサイトで一部がまとめられています。

2015年10月現在で上記サイトに記載はないですが、その他にも紹介しておきたいソフトウェアは以下です。


時間・空間を含むベイズモデルのいろいろな表現形式 (伊庭幸人)

Brook's lemmaの考え方についての解説 【DSオリジナル】

Brook's lemma (PDF)

状態空間モデルの周辺

隠れマルコフモデルについては書きませんでしたが,隠れマルコフモデルから線形状態空間モデルにつなげる解説が,通称PRMLこと「パターン認識と機械学習(下)」(丸善)の第13章にあります. そこでは「線形動的システム」という名称が使われています.

カルマンフィルタについては北川「時系列解析入門」の9章,一般の状態空間モデルについては同書の第14章. 人によっては14章を先に読むのやさしいかも.カルマンフィルタをあまり前面に出さずに一般の状態空間モデルを強調した本としては 樋口「予測にいかす統計モデリングの基本」(講談社)があります.

カーネル法とのつながり

線形モデルの解は再生カーネルで書けるので,解説で述べた話とカーネル法にはつながりがあります.ガウス過程からカーネル法をみた本としては,Rasumussen and Williams 「Gaussian Processes for Machine Learning」(MIT Press) がよく読まれています

マルコフ場・空間モデリング

間瀬・武田 「空間データモデリング」(共立出版)の4章にマルコフ場モデルの簡単な解説があります.この本の6章のクリギングというのは,1階・2階の階差から導かれるものに限らない,より一般の共分散行列をもつガウス過程を事前分布に選ぶことに対応しているのではないかと思います.


赤池スクールとベイズ統計―1980年代の統計数理研究所 (伊庭幸人)

赤池は「大域的なパラメータをエビデンス最大化で点推定する」という I J Goodに起源を持つ方法に思想的な意味を持たせましたが,いまの見方では,これは単なるfull Bayesの近似でしょう.このあたりの意識は現在とは違うかもしれません.これに対して,階差を含む事前分布や問題に応じた尤度関数を「部品」として, そこから組みあげたベイズモデルで多様な問題を扱うというアプローチには,現代のベイズと共通するものがあります.とくに「色々な実際の問題がそれで解け ることに気づいて興奮している様子」は現代の階層ベイズユーザーも1980年代の統計数理研究所の研究者も瓜二つにみえます.

なお.本文には書きませんでしたが,(階差を含む事前分布を用いたベイズモデル)+(エビデンス最大化による大域的なパラメータ推定)という組み合わせは統計数理研究所以外でも使われていました.公平のために,当時の海外のチュートリアル論文を追加しておきます.

D. M. Titterington (1985)
Common Structure of Smoothing Techniques in Statistics
International Statistical Review  53(2), 141-170 リンク(JSTOR)

【本文の引用文献へのリンク】

Hirotugu Akaike (1980)
Likelihood and the Bayes procedure
Trabajos de Estadistica Y de Investigacion Operativa, 31(1) 143-166.

田辺 國士 (1985)
ベイズモデルとABIC
オペレーションズ・リサーチ30(3) 178-183

Makio Ishiguro, Yosiyuki Sakamoto (1983)
A bayesian approach to binary response curve estimation
Annals of the Institute of Statistical Mathematics 35(1), 115-137.

Ogata and Katsura (1988)
Likelihood analysis of spatialinhomogeneity for marked point patterns
Annals of the Institute of Statistical Mathematics 40(1), 29-39.

【追加】
北川先生の本 「時系列解析入門」より専門的
Kitagawa and Gersch (1996)
Smoothness Priors Analysis of Time Series

Makio Ishiguro, Yosiyuki Sakamoto (1985): 2変数版
Bayesian binary regression involving two explanatory variables
Annals of the Institute of Statistical Mathematics 37(1), 369-387.

伊庭幸人(1996)
学習と階層 : ベイズ統計の立場から
物性研究 65 (5)