いろいろするblog

プログラミングとか統計とかえーあい的なあれこれとか

データ解析のための統計モデリング入門をpythonでやる(2-2)-poisson分布-

【あらすじ】
ポアソン分布の性質を確認した。
最尤推定を試した。

【本文】
ポアソン分布についてみてみる。

ポアソン分布は以下の確率質量関数に従う。
ポアソン分布は離散分布であり、パラメータは平均だけである。
分散は平均と等しい。

P(X = k) = \frac{\lambda^{k} exp(-\lambda)}{k!}

\lambda : 平均

numpyはnumpy.random.poissonでポアソン分布に従う整数の配列が作れる。
scipyはscipy.stats.poissonでポアソン分布が扱える。

{ここにpython コードを埋め込む}

ある観測データとモデルの間には尤度(あてはまりの良さ)なる統計量を定義できる。
尤度はある観測データの集合が得られたときの、各観測データが得られる確率の積である。
尤度はLであらわされる。
あるパラメータ\lambdaの時の尤度はL(\lambda)である。
平均\lambdaポアソン分布と観測データの集合\{ y_i \}の場合の尤度を式で表すと以下のようになる。

L(\lambda) = \prod{p(y_i | \lambda)} = \prod{\frac{\lambda^{y_i} exp(-\lambda)}{y_i!}}

これだと値が小さくなりすぎて使いにくいので対数を取った対数尤度(\log_{10} L)を使う。

\log_{10} L = \sum{(y_i \log \lambda - \lambda - \sum_{k}^{y_i} \log k)}

この対数尤度(\log_{10} L)が最大となる\lambdaが最もあてはまりの良いモデルとなる。

対数尤度(\log_{10} L)が最大となる\lambdaを求めるには微分して傾きゼロの値を求めればよいので

\frac{\partial \log L(\lambda)}{\partial \lambda} = \sum \{ \frac{y_i}{\lambda} - 1\}

これがゼロの時は

\sum \{ \frac{y_i}{\lambda} - 1\} = 0
\frac{1}{\lambda} \sum y_i - (総データ数) = 0
\lambda = \frac{\sum y_i}{(総データ数)}

となり、ポアソン分布においては標本平均と等しくなる。

このようにしてパラメータを決める手法を最尤推定という。