階層線形(Hierarchical Linear Regression)モデル|PyMC3チュートリアルに学ぶ統計モデリング #5

f:id:lib-arts:20200911161527p:plain

当シリーズではPyMC3のチュートリアルを元に統計モデリングについて確認しています。PyMC3はベイズ統計モデリングのためのPythonのパッケージで、Pythonにおいてベイズ統計を取り扱うにあたってはデファクトとみて良いパッケージだと思います。
#1〜#4は下記のように進めました。

#5では階層線形(Hierarchical Linear Regression)モデルについて取り扱います。
以下、目次になります。
1. 問題設定&モデリングの理論的な内容の確認
2. 実装の確認
3. まとめ


1. 問題設定&モデリングの理論的な内容の確認
1節では問題設定とモデリングの理論的な内容の確認を行います。

f:id:lib-arts:20200911162328p:plain

f:id:lib-arts:20200911162346p:plain

上記のように、ここでの問題設定としてはいくつかの州の行政区分や地下か地上かを踏まえた上でラドンの放射性ガス(radioactive gas radon)を予測する問題です。

以下この予測にあたってのモデリングに関して確認していきます。

f:id:lib-arts:20200911162827p:plain

まず、上記はfloorの情報だけを用いてシンプルな回帰分析を行っています。floorは地下かどうかなためカテゴリカル変数だと考える方が良いと思いますが、2値であるため\betaで表したslopeのパラメータが一つで済んでいます。とはいえ、これでは州(state)やさらに詳細には行政区分(county)を考慮できていません。そこでより高度なモデリングをどうするかについて以下では考えます。

f:id:lib-arts:20200911163851p:plain

州や行政区分を考慮するにあたって、\alpha_{c}\beta_{c}のようにそれぞれの行政区分の数だけパラメータを設定する方法について上記では言及されています。PoolingとUnpoolingはパラメータをまとめるかどうかの意味合いで使われていると考えて良さそうです。

f:id:lib-arts:20200911191931p:plain

ここまでの二つの手法の中間的な手法として、階層的回帰(Hierarchical Regression)が上記で言及されています。PoolingとUnpoolingの中間としてPartial poolingのように表現されています。この方法においては\alpha_{c}\beta_{c}がそれぞれ正規分布にしたがって得られると考える考え方です。これによりパラメータが階層的になるのでHierarchical Linear Regressionと呼んでいるようです。

大体のイメージがつかめたので1節はここまでとします。


2. 実装の確認
2節では実装を確認していきます。

f:id:lib-arts:20200911193143p:plain

上記が階層的でないunpooledなモデリング、下記が階層的でPartial pooledなモデリングとされています。

f:id:lib-arts:20200911193202p:plain

それぞれpm.sample(2000)などによってMCMCの計算が行われています。

f:id:lib-arts:20200911193637p:plain

f:id:lib-arts:20200911193649p:plain

hierarchical_traceを元にpm.traceplotを用いて可視化を行うと上記のようになります。右の図では2,000ステップの値の変動について記載されています。横軸がステップ数、縦軸が値の変動を意味しており、ランダムウォークなどの記述などと同様にこの図は理解しておくと良いかと思います。

大体はつかめたので2節はここまでとします。


3. まとめ
#5では階層線形(Hierarchical Linear Regression)モデリングについて取り扱いました。
Pooling、Unpooled、Partial poolingの言葉とともに階層モデリングについては理解しておくと良さそうでした。
#6では混合ガウスモデル(Gaussian Mixture Model)について取り扱います。

Gaussian Mixture Model — PyMC3 3.9.3 documentation