本投稿の一連の「GLMの基礎」の基礎となるのが、本書第 3 章「一般化線形モデル(GLM)」。「ここをちゃんと理解しなければ先に進めない」と、何度も読み直している。
私にとって GLM が難しく思えた理由に
GLM は 確率分布、リンク関数、線形予測子を指定する統計モデル
そんな GLM の特徴の前に、「なぜ GLM なのか?」を知ることが重要。よってここでは、第 3 章の最終節「3.7 『何でも正規分布』『何でも直線』には無理がある」をもとに「なぜ GLM?」について記す。
以下の図は、ダウンロードファイル中の chapter03 フォルダにある d0.RData をプロットしたもの。
> load("d0.RData")
> ggplot()+ geom_point(data=d0,aes(x=x,y=y),size=3,colour="#CC0000")
このプロット図に、LM と GLM の回帰式を当てはめる。
一目瞭然な直接回帰の限界
問題:この応答変数 y, 説明変数 x で回帰分析せよ。
直線回帰式 yi = β1 + β2xi の切片と係数を求める(今回 glm 関数を使わなかった理由は後述)。
> x<-seq(min(d0$x),max(d0$x),length=100)
> lm(y~x,data=d0)
Call:
lm(formula = y ~ x, data = d0)
Coefficients:
(Intercept) x
-1.424 2.890
この結果から、回帰式を先のプロット図に重ねる(本書図3.9の左図に相当)
> x<-seq(min(d0$x),max(d0$x),length=100)
> df<-data.frame(x=x,y=-1.424+2.890*x)
> ggplot()+ geom_point(data=d0,aes(x=x,y=y),size=3,colour="#CC0000")+geom_line(data=df,aes(x=x,y=y))
外れ値はあるけど、分布の中央に線が引かれているから OK じゃね?
はダメですよね? 仮に「観測データ ≥ 0」の条件がなかったとしても、「外れ値、多すぎじゃね?」と私なら思います。
次が GLM で回帰分析した結果(本書図3.9の右図に相当)
> x<-seq(min(d0$x),max(d0$x),length=100)
> fit.B <- glm(y~x,data=d0,family = poisson(link = "log"))
> df.B<-data.frame(x=x,y=predict(fit.B,newdata=data.frame(x=x),type="response"))
> ggplot()+ geom_point(data=d0,aes(x=x,y=y),size=3,colour="#CC0000")+geom_line(data=df.B,aes(x=x,y=y))
「観測データ ≥ 0」の条件も満たしている上に、「当てはまりの良さ」は直線回帰より優れていることは一目瞭然(glm 関数等 については後日詳述)。
LM は GLM の一部
これ以降は「やり直し『データ解析のための統計モデリング入門』」の「本書の流れ」を補足したもの。
直線回帰は「線形モデル(linear model, LM)」で「一般線形モデル(general linear model)」、つまり「一般化(generalized)ではない線形モデル」ということ。ややこしいが、GLM は「一般化線形モデル(generalized linear model)」。
さらに、LM の統計モデルは
確率分布 :等分散の正規分布
リンク関数:なし
以下は "log" とリンク関数を指定した GLM の回帰分析で
> glm(y~x,data=d0,family = poisson(link = "log"))
glm に「リンク関数なし」を指定可能で「link = "identity"」と恒等リンク関数(identity link function)を指定。
ただし、今回は以下のようにエラー(poisson では無効な負の値が理由と想定)
> fit.A <- glm(y~x,data=d0,family = poisson(link = "identity"))
エラー: 係数の有効なセットが見出されませんでした: 初期値を与えてください
family を poisson 以外にすればよいのかもしれないが、今回は lm 関数を用いた。
「GLMの目的と特徴」に続く。



0 件のコメント:
コメントを投稿