9. ベイズ推定に使うBUGSの話題

藤宮

はじめに

様々な場でベイズ推定が利用されるようになってきました。尤度関数を考えてプログラミングするとなると、それなりに数学の知識が必要となります。しかし、BUGSソフトウェアが使えるとその心配がかなり解消できます。私どももベイズ推定では、頻繁にWinBUGSやOpenBUGS、JAGSなどを利用しています。今回はそのような話題です。

BUGSを比較する

ベイズ推定を行うために、直接的に尤度関数を求めてプログラミングできれば高速で良いのですが、尤度関数が正しく導くことができたか心配になります。また事前分布として複雑な関数や条件などを想定すると、あきらめたくなります。そのようなこともあり、BUGSソフトウェアを用いてストレートにデータの関係を表現し、MCMCでシミュレーションできるというのは本当にありがたいことだと感じています。

BUGSの選択にあたっては、日本語の書籍の多さから言えばWinBUGSがもっとも情報を得やすいといえます。GeoBUGSという空間データ処理もWinBUGSのメニューの一つとしてサポートされています。R言語から呼び出して使用することで、データの準備や処理結果を加工して描画するなどかなり環境が整ってきました。

ただ、難点としては、多数のデータセットを対象に自動処理した場合にWinBUGSがRから起動されるたびにマウスフォーカスがとられてしまう点です。自動化できるだけでよしとしなければならないかも知れませんが、通常の業務で使用するPCで試してみている場合などは困りものです。その点OpenBUGSは完全にバックグラウンドで処理できますので、自動化にかなり向いています。Linux版もあるのでRstudioなどを使ってブラウザ経由でWindowsマシンと同様なインターフェイスでガンガン走らせることができます。

ただ、紹介されている日本語の書籍がほとんど無いのは残念です。OpenBUGSにもGeoBUGSが含まれていますので、空間データの処理が手軽に実現可能です。WinBUGSは開発が終了してしまっていますが、OpenBUGSは今でも進化を続けています。数学的な関数もWinBUGSよりも豊富です(特殊な数学関数を使わなければ関係ありませんが)。

もう一つJAGS(Just Another Gibbs Sampler)というソフトがあります。こちらも日本語の書籍はほとんどありません。OpenBUGS同様に自動化に向いたソフトでもあります。Rから呼び出して、バックグラウンドで処理をしてくれます。Linux版もサポートされています。モデルがシンプルでデータ数が小さいときには他のソフトとあまり変わりませんが、データ数が多い場合などOpenBUGSよりも高速です。空間データ処理のGeoBUGSに対応していない点が残念なのですが、数学的な関数が豊富であり、多変量の乱数サンプリングや特殊なデータの扱いなどで独自に進化していて、大変便利なツールです。

カーブフィッティングでは、ガウス分布の歪んだ形まで表現できるSHASH(sinh-arcsinh)分布関数にフィッティング(サンプリングではない)する場合など、SHASH関数を実現するためのarcsinh関数まできっちりサポートされていて助かっています(ちなみにarcsinhなどはOpenBUGSにもあります)。またデータを直接的に前処理するブロックとMCMCのモデルのブロックを分けて記述できるなど使いやすくなっています。カテゴリカルなデータの取扱やソートなどの関数が一歩進んでいます。ただ、空間データに関しては、当面自分の研究領域に関係ないということで、開発の予定はないとコメントされていました。

ここまで作成しておいて何なのですが、どのソフトも微妙にMCMCの収束の感じが違っているような気がします。どれも最初に使い始めるときに慣れ親しんだソフトと違うような違和感があります。でもそれぞれに慣れるといつの間にか、違和感なく使っているので、それほど大きな問題ではないのでしょうね。サンプリングした結果を見ながら、収束するまでモデルを改良しますから、当然何とかなる(何とかしている?)のだと思いますが、、。