Probabilistic Programming: Core Linear Regression

Ref: Baysian Analysis with Python by Osvaldo Martin
—————————
線形回帰モデルを、最小二乗法と比較して、Baysianによるものを比較して理解すれば、ベイズの特徴がよく分かる。
—————————
一次線形回帰式:y = α + βx
—————————
と表されるが、確率論では、
—————————
y 〜 N(μ=α + βx, σ=ε):つまりデータyは、平均値μ=α + βx, 標準偏差σ=εの正規分布に従うとする。
—————————
なるほど、実際のデータでは、誤差によるばらつきが発生するわけで、ばらつきを含めて平均値μは、正規分布であろうと置くわけだ。
まずは、既知の正規分布に基づく誤差εのデータを作成して、それをサンプルデータの誤差変動として加えたほぼ正規分布する人工サンプルデータを作成し、それをモデルに当てはめ、既知の分布に近いものがモデルから得られるか確かめてみる。αを2.0、βを1.0、正規分布は平均値0,標準偏差0.5、サンプル数N=100、乱数はseed()で固定すると、以下のように記述できる。

次に、平均値10、標準偏差1、サンプル数N=100で正規分布乱数を発生させて、誤差εをデータばらつきとして加えて、人工サンプルデータとする。

生成したデータの性状と、誤差を含まない場合の一次線形回帰式:y = α + βxをグラフ表示する。

次に一次線形回帰式:y = α + βxのベイズモデルy 〜 N(μ=α + βx, σ=ε)を作成する。
ベイズモデルとして各パラメータの事前分布として、αは平均値0、標準偏差10の正規分布、βは平均値0、標準偏差1の正規分布、誤差εは半コーシー分布とする。

※コーシー分布の関数の基本形は次式のようにあらわされる.

ここで, α(>0)、μはそれぞれ定数であり, とくにμはコーシー分布の最頻値(確率密度関数f(x)が最大になるxの値)である。
コーシー分布の特徴
? 時々とんでもない外れ値を出すことがある分布
? 実現値の場合,裾の方に必ず出現度数がある=裾が重い分布。
? べき分布の一種 ? 大数の法則が成立しない
らしい。

各パラメータをメトロポリス法でトレースすると


αとβは、トレースプロットでは、上下変動して収束していない。εは良さそうで、μは、α、βから決定されるので、Deterministicとなっているが、分布図は小さな分布の集合体として描かれることが面白い。
α、βが収束しないので、自己相関プロットをとる。



ためにし、αとε、βとεも自己相関図を作成してみる。




なるほど、αとβだけが、直線関係の相関があることが理解できた。

次にα、βの分布の平均値を用いて、モデルから当てはめられたy = α_m + β_m*xを、人工サンプルデータのx値と描いてみると、

y= 1.21 + 1.08 * x となった。もともとの人工サンプルデータはy = 2.0 + 1.0 * xで作成したので、α値は少し低めとなった。
分布の不確実性を考慮して、図を描くと、

で、

最高事後密度信用区間(HPD区間)を加えると、

argsort(): np.argsortは、ソート結果の配列のインデックスを返す。