対数変換してOLSとGLMってそんなに違いますか
※この記事は興味本位で書いただけで、理論的には大きな間違いを孕んでいるかもしれません。
あくまでもモデリングの比較をしてみたかっただけです。
対数変換後のOLSとポアソン回帰ってそんなに違うの
仕事しながら(真面目に仕事をしなさい)思ったのですが、
指数関数的に増加するデータに対して、
・対数変換してOLS推定したパラメータの値
のと
・ポアソン回帰したパラメータの値
ってそこまで違わないんではないかと思い、やってみます。
動機
回帰分析を学ぶときに必ず出てくる4つの仮定があります。
①誤差の期待値は0
②誤差の分散は一定
③誤差間の共分散は0
④説明変数は非確率変数
これら四つが揃うことで、OLSで求まるパラメータは不偏でBLUEとなるのでした。
ただ、現実のデータで上記四つの仮定が満たされることはまずなく、
これらの仮定を崩してパラメータを求めることになります。
代表的なのが分散不均一(②の仮定が成り立たない)です。
②が成り立たないとき、OLS推定ではパラメータは不偏ですがBLUEになりません。
そんな時に用いるのが対数変換です。対数変換を行うことで誤差項の分散を一定にし、
OLS推定ができるようになる、と一般の本には書いてあります。
一方で、対数変換などして無理矢理誤差を正規分布にするのではなく、データをうまく表現できる
確率分布を選べという本もあります。
(『データ解析のための統計的モデリング入門』に何度も記載されています)
じゃあ両者を比較してみますか、と思い立って家に帰ってRを回してみました。
OLSとGLMだけでなく、曲線で回帰する非線形最小二乗法も用いて比較してみます。
結果
赤線がポアソン回帰、青線が対数変換したOLS、緑線が非線形最小二乗法です。
xが小さいときには目的変数はあまり変わらないような気がしていましたが、案の定でした。
※もちろん、いつでも線形回帰をすべきだとは思っていません。
「みどり本」にも記載がある通り、目的変数の確率分布を確認し、どの分布が妥当なのかを
特定してから進めるのが望ましいとは理解しています。
そういう意味で、これは興味本位で書いた記事に過ぎないと思います。
#xとyはそれっぽいデータ x<-c(1,2,3,4,5,6,7,8) y<-c(1,1,2,4,6,8,12,17) #データフレーム化しないと回帰できない d<-as.data.frame(cbind(x,y)) #ポアソン回帰 GLM<-glm(y~x,data=d,family=poisson(link="log")) summary(GLM)#切片とパラメータが求まる glm<-curve(exp(-0.38709+0.40805*x),xlim=c(0,15),ylim=c(0,100),ylab="",col="red") par(new=T)#これを入れないと図に上書きできない #対数変換して、通常のOLS LM<-lm(log(y)~x,data=d) summary(lm)#切片とパラメータが求まる lm<-curve(exp(-0.56398+0.43835*x),xlim=c(0,15),ylim=c(0,100),ylab="",col="green") par(new=T) #非線形最小二乗法.初期値を用意しないと勾配法でパラメータが求められないらしい a1<--0.56398 b1<-0.43835 NLS<-nls(y~exp(a+b*x),data=d,start=list(a=a1,b=b1)) summary(nls)#切片とパラメータが求まる nls<-curve(exp(-0.2189+0.3832*x),xlim=c(0,15),ylim=c(0,100),ylab="",col="blue") par(new=T)