一般化線形モデルとは
一般化線形モデルとは線形回帰やポアソン回帰、ロジスティック回帰などの、説明変数(x)によって応答変数(y)を説明する統計モデルの総称です。
さらに具体的に言うと、確率分布、線形予測子、リンク関数によって決まる統計モデルのことです。
確率分布
応答変数が従う確率分布です。
カウントデータなどの離散データを扱うためには、二項分布
やポアソン分布
がよく使われます。
株価などの連続量を表す連続データを扱うためには、正規分布
やガンマ分布
がよく使われます。
線形予測子
説明変数の一次結合で表されるモデル式のことです。
どの説明変数を使用するかであったり、どの交互作用項(説明変数の積で表される項)を使用するかを指定することができます。
z = β_0 + β_{1}x_{1} + β_{2}x_{2}
リンク関数
式を変換して線形予測子に対応させる関数のことです。
リンク関数のおかげで値が0から1しか取ることのできない確率も線形予測子に対応させることができます。
分布によって使うリンク関数はある程度決まっているので、詳しく知りたい人は記事下の参考にあるリンク先の書籍を参照してください。
log(y) = β_0 + β_{1}x_{1} + β_{2}x_{2}
Pythonでの実装
一般化線形モデルはRのglm関数
を使えば簡単に実行することができます。
しかしながら、
- R使いたくないよ
- Pythonでやりたいよ
という人も多いと思うので、Pythonでやってみます。
探してみると、statsmodels
というRのglm関数
のようなモジュールがありました。
モジュールのインストール
$ pip install statsmodels
$ pip install patsy # statsmodelsをimportしたら必要と言われたのでインストールしておく
$ pip install pandas # データ加工のためにインストールしておく
データ取得してモデリング
import statsmodels.api as sm
import pandas as pd
# 下の参考URLにあるデータを読み込み
data3a = pd.read_csv("http://hosho.ees.hokudai.ac.jp/~kubo/stat/iwanamibook/fig/poisson/data3a.csv")
# 変数xと定数項による線形予測子を作成
data3a.x_c = sm.add_constant(data3a.x)
# 分布はポアソン分布、リンク関数は対数リンク関数の一般化線形モデルを作成
# ポアソン分布の場合はデフォルトで対数リンク関数が指定される
model = sm.GLM(data3a.y, data3a.x_c, family=sm.families.Poisson())
result = model.fit()
# 結果
result.summary()
statsmodels
べんり!
おわりに
線形モデルなどの統計モデルを拡張した一般化線形モデルでしたが、やはり現実の事象はこれほど簡単なモデルには落とし込むことが難しいです。
下の書籍では一般化線形モデルの発展形である一般化線形混合モデルなどの手法も説明されているので、参考にしてください。
参考