引越作業中

GLM

最終更新:

hayatoiijima

---,--- view
管理者のみ編集可

GLMについて


GLM概論

各Xが独立変数としてモデルに組み込んだ要因である。


GLMで扱う代表的な分布系

代表的な指数関数族に属する分布は以下の通り。


平均値と分散

平均値


分散


GLMがいつ必要か?

ある現象を説明するモデルを構築したいとき。これだけだと(重)回帰と同じだが、GLMは説明したい現象の起こり方が正規分布に従わない場合でも解析することが可能である。

例えば、個体が生き残った、死んだという現象や、あるプロットは0個体、あるプロットは7個体...というような現象の起こり方の分布は正規分布にはならない。このような場合に正規分布を仮定する(重)回帰を行うと、独立変数のパラメータ推定を誤る。


GLMで事前に指定しなければならないもの

  1. 誤差分布
  2. 線形予測子
  3. リンク関数


誤差構造

得られたデータのばらつきがどのような構造をしているかを指定する。特に野外で得られるデータの分布は正規分布に従わないケースもあり、自分の取ったデータがどのような分布になるのかはデータの取り方やデータのヒストグラムを書いてチェックする必要がある。主に扱えるのは以下の分布。


正規分布だったら重回帰でも対応できる。


線形予測子

線形予測子とは、独立変数の効果を線形に合計したもので、以下のような式で表される。
式の左側が線形予測子、xが各独立変数である。βはこれから推定するパラメータ(その独立変数の傾きのようなもの)である。ちなみに式の右側は線形構造と呼ばれる(各要因の和の形になっているから)。


リンク関数

誤差構造で指定した分布の形にデータを変換するための関数がリンク関数である。線形予測子は、データから得られた期待値をリンク関数によって変換することによって得られる。よって、線形予測子は以下の式でも表される。
ここでg()はリンク関数であり、μは期待値である。


各誤差構造に対して最も一般的に用いられるリンク関数



GLMにおけるパラメータ推定方法

最尤推定法を用いる。具体的には、iteratively reweighted least squares (IRWLS)法によるパラメータ推定を行う。
  1. ηとμを観測値から得る。μはyの値、ηはμをリンク関数で変換したものである。
  2. "調整された従属変数"zを算出する。zはによって与えられる。
  3. 重みwを、によって得る。
  4. ηを得るために、βを再推定する。具体的には、重みwをつけてzを従属変数、想定している要因を独立変数とした回帰を行い、新たなβを得る。βが新しいηとなる(ηに逆リンク関数を適用すればμも算出される)
  5. 4.によって得られるβの値が安定するまで、2.-4.を繰り返す。


モデル選択

線形モデルにどの変数を含めるべきかを判断する方法としては、
が挙げられる。最も一般的なのは、AICによるモデル選択である。

AICについて

AICは以下の式で定義される。


RでのGLMのかけ方

一般的な式の形

> result <- glm(y ~ x1 + x2 + ..., family=**(**), data=**)

例えば、二項分布なら、
> 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)を使う。


IOVは0から1までの値をとり、1に近いほどその変数が従属変数に大きな影響を与えていることを示す。現在のところ、自動で計算する関数はRでは用意されていないので、計算する自作のスクリプトをここに載せておく。

iov.txt

使うときは、この関数を一度Rにコピペしておいて、データフレームをアタッチし、以下の要領で走らせる。ただし、データフレームは、従属変数が一番右の列になるように作る必要がある。
> 上記の関数コピペ
> attach(df) #データフレームをアタッチ
> result <- akaikeW(df,poisson(log))
#データフレーム, 誤差構造(リンク関数)
#リンク関数はなくても大丈夫です。
> result #結果が表示される

#どうやらカテゴリー変数が数字以外で与えられていると
#エラーを吐き出すようですが、結果を表示させると
#計算は出来ています。
誤差構造は自分に合わせて指定する。また、リンク関数を指定しないときは、誤差構造で
デフォルトに設定されているリンク関数が適用される。
人気記事ランキング
最近更新されたページ

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!