Rを通じて統計学を学ぶ備忘録ブログ

SPSSからRに移行したい私のような人向けのR解説ブログ兼学習用備忘録。

第52回 ポアソン回帰分析

第52回はポアソン回帰分析について書いていきます。これは見てわかる通り、誤差構造にポアソン分布を利用します。つまり、ポアソン回帰分析の目的変数は「ポアソン分布」に従います。従い、ポアソン分布に従って発生する観測値(y)に影響する要因(x)との関係を明らかにするために用いられる回帰分析です。

 

ポアソン分布

ポアソン分布に従って発生する観測値としては、「馬に蹴られて死亡した兵士の数」は有名な話ですが、「サッカーの試合でのゴール数」もポアソン分布に従うことが知られています。ポアソン分布は以下のよう分布です。

f:id:teruaki-sugiura:20150905000106p:plain

> x<-seq(0,20,1)

> par(mfrow=c(2,2))

> plot(dpois(x,1), col="blue", type="b", ylim=c(0,0.5),xlab="Count", ylab="Prob ", cex.lab=1, cex.main=1.7,main="λ=1")

> plot(dpois(x,3), col="red", type="b", ylim=c(0,0.5),xlab="Count", ylab="Prob ", cex.lab=1, cex.main=1.7,main="λ=3")

> plot(dpois(x,5), col="springgreen4", type="b", ylim=c(0,0.5),xlab="Count", ylab="Prob ", cex.lab=1, cex.main=1.7,main="λ=5")

> plot(dpois(x,10), col="magenta", type="b", ylim=c(0,0.5),xlab="Count", ylab="Prob ", cex.lab=1, cex.main=1.7,main="λ=10")

f:id:teruaki-sugiura:20150905000116p:plain

ポアソン回帰分析のモデルとR実践

 

ポアソン回帰分析のモデルは以下のようになります。

f:id:teruaki-sugiura:20150905000306p:plain

ポアソン回帰分析では、以下のように引数を指定します。

glm(formula=y~x1+x2, family=poisson(link="log")) 

 誤差構造は「ポアソン分布」、リンク関数は「対数」です。ポアソン回帰分析では非負の値を目的変数として扱いますので、期待値が負にならない対数リンク関数が使われます。では実践していきましょう。

> poisson.data<- read.csv("poisson.data.csv",header=TRUE)

make.names(col.names, unique = TRUE) でエラー:

   2 は不正なマルチバイト文字です

> data1<-file("poisson.data.csv",encoding="Shift-JIS") 

#不正なマルチバイト文字とかでたんで、一旦エンコードしてから再読み込み。半角は1byteなので、マルチバイトは全角とかになっているっぽい

> poisson.data<-read.csv(data1,header=T,sep=',')

> poisson.data

   y x1 x2

1  3   6  3

2  3   4  5

3  4   4  1

4  6   2  2

> attach(poisson.data) 

>hist(y)

f:id:teruaki-sugiura:20150905000653p:plain

> poisson.log <- glm(y~x1+x2, family=poisson(link="log"))

> summary(poisson.log)

Call:

glm(formula = y ~ x1 + x2, family = poisson(link = "log"))

Deviance Residuals:

    Min       1Q    Median       3Q      Max 

-1.6000  -0.4917  -0.1132   0.5878   1.3002 

Coefficients:

              Estimate  Std. Error  z value   Pr(>|z|)    

(Intercept)  1.54860    0.37870    4.089      4.33e-05 ***

x1            0.00246    0.06284    0.039      0.969    

x2           -0.10002    0.06761   -1.479      0.139    

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for poisson family taken to be 1)

Null deviance: 19.067  on 29  degrees of freedom

Residual deviance: 16.313  on 27  degrees of freedom

AIC: 108.24

Number of Fisher Scoring iterations: 4

summary関数の係数を見てみると、今回の場合(対数リンク関数)、以下のようなモデルが推定されていることがわかります。リンク関数に対数をとっているので、係数を解釈するときは、左辺にexpを取ります。

f:id:teruaki-sugiura:20150905003530p:plain 

・オフセット項 

offset項は目的変数が割算されているときに利用される説明変数です。ポアソン回帰分析のときにだけ使えるテクニックという訳ではありません。例えば、100分間で10回であれば、発生回数は少ないが、1回/10分となり、頻度は高いですね。次に300分間で20回であれば、発生回数は前者よりも多いが、1回/15分と、発生頻度の間隔は遅いと考えられますね。このような場合、分母の値を適切に評価しなければいけません。そのためにoffset項が利用さます。offset項の係数は全て1に設定され、offset項を設定します。

f:id:teruaki-sugiura:20150905004356p:plain

例えば、目的変数が人口密度だとすると、「人の数/面積の大きさ」ということになるので、面積の大きさを適切に評価するために、右辺に移行させます。そうすることで、各面積の大きさの効果をうまいこと評価できます。ポアソン回帰分析でoffset項を利用するときは、offset(log(t))と指定する必要があります。

glm(formula=y~x2+offset(log(t)), family=poisson(link="log"), data=×××××)

 

以上で今回はおしまい。