GLMについて
GLM概論
GLMはGeneralised Linear Model(一般化線形モデル)の略。General Linear Model(一般線形モデル)の略として使われることもある。General Linear ModelはANOVAと回帰分析が似たような誤差分解方法を取ることから、ANOVAと回帰分析の総称として使われる言葉である。
GLMでは独立変数が線形結合している必要がある。線形結合しているモデルとは以下のようなモデルである。
各Xが独立変数としてモデルに組み込んだ要因である。
GLMでは指数関数族に属する分布を扱うことができる。正規分布のみを扱える回帰分析を拡張したものであるため、"一般化"という名前になっている。指数関数族の一般式は以下のように表される。
GLMで扱う代表的な分布系
代表的な指数関数族に属する分布は以下の通り。
平均値と分散
平均値
分散
GLMがいつ必要か?
ある現象を説明するモデルを構築したいとき。これだけだと(重)回帰と同じだが、GLMは説明したい現象の起こり方が正規分布に従わない場合でも解析することが可能である。
例えば、個体が生き残った、死んだという現象や、あるプロットは0個体、あるプロットは7個体...というような現象の起こり方の分布は正規分布にはならない。このような場合に正規分布を仮定する(重)回帰を行うと、独立変数のパラメータ推定を誤る。
GLMで事前に指定しなければならないもの
誤差分布
線形予測子
リンク関数
誤差構造
得られたデータのばらつきがどのような構造をしているかを指定する。特に野外で得られるデータの分布は正規分布に従わないケースもあり、自分の取ったデータがどのような分布になるのかはデータの取り方やデータのヒストグラムを書いてチェックする必要がある。主に扱えるのは以下の分布。
カウントデータ (0<x,ただしxは整数): ポアソン分布
あるなしデータ (x = 0 or 1): ベルヌーイ分布
あるなしデータ (x = 0 or 1)を複数回やってできる分布: 二項分布
連続データ (0<x) かつ左右非対称: ガンマ分布
連続データ (-∞<x<∞) で左右対称: 正規分布
正規分布だったら重回帰でも対応できる。
線形予測子
線形予測子とは、独立変数の効果を線形に合計したもので、以下のような式で表される。
式の左側が線形予測子、xが各独立変数である。βはこれから推定するパラメータ(その独立変数の傾きのようなもの)である。ちなみに式の右側は線形構造と呼ばれる(各要因の和の形になっているから)。
リンク関数
誤差構造で指定した分布の形にデータを変換するための関数がリンク関数である。線形予測子は、データから得られた期待値をリンク関数によって変換することによって得られる。よって、線形予測子は以下の式でも表される。
ここでg()はリンク関数であり、μは期待値である。
各誤差構造に対して最も一般的に用いられるリンク関数
GLMにおけるパラメータ推定方法
最尤推定法を用いる。具体的には、iteratively reweighted least squares (IRWLS)法によるパラメータ推定を行う。
ηとμを観測値から得る。μはyの値、ηはμをリンク関数で変換したものである。
"調整された従属変数"zを算出する。zは によって与えられる。
重みwを、 によって得る。
ηを得るために、βを再推定する。具体的には、重みwをつけてzを従属変数、想定している要因を独立変数とした回帰を行い、新たなβを得る。βが新しいηとなる(ηに逆リンク関数を適用すればμも算出される)
4.によって得られるβの値が安定するまで、2.-4.を繰り返す。
モデル選択
線形モデルにどの変数を含めるべきかを判断する方法としては、
が挙げられる。最も一般的なのは、AICによるモデル選択である。
AICについて
AICは以下の式で定義される。
RでのGLMのかけ方
一般的な式の形
> result <- glm(y ~ x1 + x2 + ..., family=**(**), data=**)
y ~ x1 + x2 + ...の部分は単にモデル式の指定である。
family=binomial(logit)の部分は、family=binomialで誤差構造の指定を、(logit)の部分はリンク関数の指定である。ちなみにbinomialの場合は何も入力しなければデフォルトでリンク関数はlogitになる。
data=seizanの部分は、データが入っているオブジェクトの指定である。
例えば、二項分布なら、
> result <- glm(y ~ x1 + x2 +... , family=binomial(logit), data=seizan)
となる。
結果の見方
> summary(result)
のように、結果を付与したオブジェクトをsummary()に入れることで、結果の完全な要約を出力することができる。
モデル選択
AICによるモデル選択を行う場合は、Rにすでに関数が用意されている。
> library(MASS)
> stepAIC(result)
こうすると、AICによるモデル選択が行われ、AICが最も小さくなるモデルが選択される。ただし、stepAIC()によるモデル選択では、全ての(可能性がある)モデル間でAICを比較しているわけではない(らしい)ので、必ずしもAIC最小モデルが選択されるとは限らない。
説明変数の相対的な重要度(IOV: relative Importance Of Variable)
重回帰であれば、標準回帰係数を使えばいいのだが、誤差構造に様々な分布を取りうるGLMでは、relative Importance Of Variable (IOV)を使う。
ヌルモデルからフルモデルまで、全ての組み合わせのモデルの中で、どのモデルの重要度が高いのかを、Akaike weightによって算出する。
Akaike weight(=wi)は以下の式で定義される。
Δiは、当該モデルと、AIC最小モデルとのAICの差である。
これによって、各モデルにwiが付与される。
各独立変数の重要度(IOV)は、その変数が含まれる全てのモデルの、wiの和で定義される。
IOVは0から1までの値をとり、1に近いほどその変数が従属変数に大きな影響を与えていることを示す。現在のところ、自動で計算する関数はRでは用意されていないので、計算する自作のスクリプトをここに載せておく。
使うときは、この関数を一度Rにコピペしておいて、データフレームをアタッチし、以下の要領で走らせる。ただし、データフレームは、従属変数が一番右の列になるように作る必要がある。
> 上記の関数コピペ
> attach(df) #データフレームをアタッチ
> result <- akaikeW(df,poisson(log))
#データフレーム, 誤差構造(リンク関数)
#リンク関数はなくても大丈夫です。
> result #結果が表示される
#どうやらカテゴリー変数が数字以外で与えられていると
#エラーを吐き出すようですが、結果を表示させると
#計算は出来ています。
誤差構造は自分に合わせて指定する。また、リンク関数を指定しないときは、誤差構造で
デフォルトに設定されているリンク関数が適用される。