ベイズモデリングとは何か?初心者向け解説
ベイズモデリングは面白い
最近、ベイズモデリングにハマっています。
ベイズモデリングは、ベイズ統計モデリングなどとも呼ばれますが、ここではベイズモデリングと呼ぶことにします。
ベイズモデリングは、主にパソコンのソフトを使って行います。
有名なところでは、JAGS, Stanなどありますが、私が使っているのは主にrstanというR言語からstanを呼び出すものです。rstanのインストールの方法などはRstan-Getting-Startedを参考にしてください。この手のMCMCと言われる手法を汎用的に扱えるソフトウェアが出てきたことでベイズモデリングが手軽に利用できるようになりました。
パソコンの性能が上がって実用的な速度が出るようになったのがきっかけだと思いますが、最近、ベイズモデリングを使う機会が増えています。
興味がある方はぜひ使ってみてください。ここでは、ベイズモデリングの概要を開設します。
PCの性能がアップすると、これまでは計算量的に使えなかった技術や理論が使えるようになって面白いです。ディープラーニングとかもその1つですね。
統計モデリングって
統計モデリングとは「確率モデルでデータ生成メカニズムを記述し、データを使ってっパラメータを推定」するものですが、これにベイズ統計を用いるものがベイズモデリングとなります。
ベイズモデリング…
ベイズモデリングを行うことで、従来では解けないような複雑なモデルが扱えるようになるとか色々言われていますが、個人的には、すごく直感的に組み立てられる部分が良いと感じます。
例えば、身長の分布がどのようなものか考えてみます。身長の分布は正規分布になると考えられますので、平均値を$\mu$、偏差を$\sigma$とした正規分布でモデル化できます。
$$
height \sim normal(\mu, \sigma)
$$
ここで、「体重の重さと身長は比例するのでは?」と考えたとします。従来の手法だと、回帰分析を使うことを思いつくかと思います。とりあえず、身長と体重の関係が線形だと考えれば、以下のような線形式に線形回帰させます。
$$
height = a + b \times weight
$$
ここまでは、高校生レベルでしょうか。
ベイズモデリングでも似た感じになるのですが、身長の平均$\mu$にこれを代入します。イメージとしては以下のような式になります。
$$
height \sim normal(a+b \times weight, \sigma)
$$
この式の解釈は「身長の平均は体重に比例していて、$\sigma$のばらつきをもつ」ということになります。感覚的にわかりやすくないでしょうか。ちなみに、先程の線形回帰でも、ばらつきは定義できて、以下のように$\epsilon$で表すことができます。
$$
height = a + b \times weight + \epsilon
$$
どちらの式が直感的ですか?
個人的には統計モデリングでの記述の方だと思います。
統計モデリングでは、さらに体重についてのばらつきを追加して表現することもできます。例えば、体重が平均$\mu _w$、偏差$\sigma _w$の正規分布に従うと考えられる場合、以下のように記述できます。
$$
height \sim normal(a+b \times weight, \sigma)
$$
$$
weight \sim normal(\mu _w, \sigma_w)
$$
追加されたのは、体重が正規分布に従うという下の1行です。こんな感じで、それぞれの値に対してモデルを追加していくことで、より細かくモデルを記述することができます。
rstanなどのツールのすごいところは、こういった記述をほぼそのまま行うだけで計算できることです(表現が悪いのですが、ここでは計算と言っておきます)。
ここでは、プログラム例などは記載しませんが、興味がある方は調べてみてください。
プログラムに慣れている人でも、確率変数が入った文法にちょっと躓くかもしれません。
追記(ベイズらしい部分を忘れていました)
ここまで書いて、大切なことを書き忘れていることに気づきました。全然、ベイズではないですね(汗
実際には、数人の体重と身長を計測して、そこから平均や偏差といったパラメータを求めます。回帰の場合はaとbです。計測したデータをそれぞれ$height _i$、$wight _i $とすると、以下の確率を求めることになります。
$$
P(a,b | height _i, weight _i)
$$
これは以下のように書き直せます。
$$
P(a,b | height _i, weight _i)=\frac{P( height _i, weight _i | a,b)P(a,b)}{P( height _i, weight _i )}
$$
左辺のそれぞれはモデリングしていますので、そのモデルをあてはめます。ソフトはこれをやってくれるわけです。便利!!
ベイズモデリングに興味がでたら、以下の記事も参考にしてください。