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

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

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

本巻で使用されているソースコードやデータは以下のURLから取得できます。

https://github.com/iwanami-datascience/vol1

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

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

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

スライドはこちら

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

特集の参考文献には入れませんでしたが,以前編集した「数学セミナー」の階層ベイズ特集があります.久保さんはじめ,樋口さん,当時は超若手だった持橋さんなど,色々な方が応用中心に書いておられます.

数学セミナー2007年11月号

上記,岩波書店から「ベイズモデリングの世界」の第一部として復刊されました.追加の記事もあります.第二部は伊庭の書下ろしの「階層ベイズ講義」となっています.実用を重んじたこの特集とは相補的な内容です.ぜひご併読ください.

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

ベイズでない信頼区間

奥村晴彦氏による解説 伊庭のツイッターのまとめ

ベイズでない予測区間

赤平昌文氏による解説(PDF)

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

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

2ページでは足りない方はこちらをどうぞ

統計数理研究所のサイトにあるMCMCの入門講義(90分くらい)

階層ベイズ 最初の一歩 ― 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では関数の仕様が変わっていたので、掲載コードの修正が必要になりました。以下を参照してください。

https://github.com/iwanami-datascience/vol1/commit/72326f397050edbb838c46885026b1ffd5a771fe

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の最新版をダウンロードしてインストール

    1. Rのバージョンと対応しているRtoolsを以下のURLからダウンロードしてインストール後、PATHを通す

    1. Rを起動して「install.packages("rstan", dependencies = TRUE)」とタイプする。しばらく待つ。

    2. Rの再起動

RStanの並列実行

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

収束判定

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

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

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

ここにあった解説原稿は「計算統計2」の改訂版に大幅改稿して載せることになったため,公開中止とします.

以前ここにあった原稿の「リーマニアン・モンテカルロ」(RMHMC)の解説部分で図入りで「ハミルトニアンMCMCはギブス・サンプラーと同様相関に弱い」と説明していますが,これは正しくありません.ハミルトニアンMCMCは(提案分布が球対称性を持つメトロポリス法や最適化の最急降下法と同様に)座標軸の回転について性能が変わらないので,その意味では「相関に弱い」わけではありません.「スケール変換を含むアフィン変換について不変性を持たない」が正しい説明です.相関のある多変量正規分布の場合は,スケールの調整だけでは済まないので厄介ですが,ギブス・サンプラーと違い,相関そのものが問題な訳ではありません.

p.24 1行目 誤「x2が選ばれる確率は」→正「x1が選ばれる確率は」

動画: ハミルトニアンMCMC講義 【DSオリジナル】 (約60分)

上とは一応別モノです.たぶん上の原稿のほうが完成度が高い

この講義のスライド(PDF)

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のデバッグモードを有効にしてしまうようになっているようです。

https://github.com/pymc-devs/pymc3/blob/master/pymc3/model.py#L608

http://deeplearning.net/software/theano/library/config.html#config.compute_test_value

この状態でキャッシュファイルが作られあとで他のことをTheanoでやろうとするとエラーになってしまうようです。

対処法としてはpymc3を使ったあとにTheanoや他のTheanoに依存したライブラリを使う場合はキャッシュファイルを消すというのがあります。以下のLamblinさんの回答:

https://groups.google.com/forum/#!topic/theano-users/vB4RqNXRvOU

キャッシュファイルの場所は以下です。

[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)