MENU

R でポアソン回帰の 95 % 信頼区間付き回帰直線のグラフを描く方法

カウントデータの散布図に、ポアソン回帰の回帰直線と予測値の 95 % 信頼区間を書き入れたグラフの書き方

>>もう統計で悩むのは終わりにしませんか? 

↑期間・数量限定で無料プレゼント中!

目次

ポアソン回帰

まれな事象が起きることを表現したポアソン分布を示すカウントデータ(発生数の数を数えたデータ)を予測する回帰モデル

こちらも参照のこと

ポアソン回帰のサンプルデータ

サンプルデータは、植物の体サイズ x 、種子数 y のデータである

data3a.csv というデータで、data3a という名前を付けて読み込む

data3a <- read.csv("data3a.csv")
head(data3a)

データセットの先頭部分を示す

今回グループ変数の f は使わない

> head(data3a)
y     x f
1  6  8.31 C
2  6  9.44 C
3  6  9.50 C
4 12  9.07 C
5 10 10.16 C
6  4  8.32 C

散布図を見てみる

### Scattergram
library(ggplot2)
ggplot(data=data3a, aes(x=x, y=y))+
geom_point(size=3)+
theme_classic()

散布図は以下のとおり

なんとなく右肩上がりの分布のような、そうでもないような・・・

>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

ポアソン回帰:偏回帰係数推定と予測値計算

ポアソン回帰を実際に行ってみる

R では、glm() を使う

family=poisson(link='log')

この指定が重要である

スクリプトは以下のとおり

glm.fit1 <- glm(y~x, family=poisson(link='log'), data=data3a)
summary(glm.fit1)

結果は以下のように出力される

> summary(glm.fit1)
Call:
glm(formula = y ~ x, family = poisson(link = "log"), data = data3a)
Deviance Residuals:
Min       1Q   Median       3Q      Max
-2.3679  -0.7348  -0.1775   0.6987   2.3760
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept)  1.29172    0.36369   3.552 0.000383 ***
x            0.07566    0.03560   2.125 0.033580 *
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 89.507  on 99  degrees of freedom
Residual deviance: 84.993  on 98  degrees of freedom
AIC: 474.77
Number of Fisher Scoring iterations: 4

x が 1 大きくなると、y は、0.07566 大きくなる

真数に戻すと個数になる

$ e^{0.07566} = 1.078596 $ なので、約 1 個増えるということだ

予測値の計算

予測式を用いて、予測値の計算を行う

予測式は、$ y = e^{(1.29172 + 0.07566 \times x)} $

予測値は以下のように計算する

予測値を計算するためには、x = new_data を準備しておく必要がある

### Fitted values
new_data <- data.frame(x=seq(min(data3a$x), max(data3a$x),
length=100))
pred.glm.fit1 <- predict(glm.fit1, new_data, type='link',
se.fit=TRUE)
### 95% confidence interval limits
alpha <- 0.05
ci.upper <- exp(pred.glm.fit1$fit +
(qnorm(1-alpha/2)*pred.glm.fit1$se.fit))
ci.lower <- exp(pred.glm.fit1$fit -
(qnorm(1-alpha/2)*pred.glm.fit1$se.fit))

ci.upper, ci.lower は予測値の 95 % 信頼区間の上限と下限だ

式で書いてみると以下のようになる


$$ \displaystyle e^{(log(\hat{y}) \pm Z_{\alpha/2} \times SE)} $$

散布図と回帰直線

先ほどの散布図にポアソン回帰で得た回帰直線を書き入れてみる

# 1つ目の散布図
graph1 <- ggplot(data = data3a, aes(x = x, y = y)) +
geom_point(size = 3) +
theme_classic()
# 回帰曲線を重ねる
graph1 +
geom_line(data=data.frame(x=new_data, y=exp(pred.glm.fit1$fit)),
aes(x = x, y = y), linewidth = 2)+
geom_line(data = data.frame(x = new_data, y = ci.upper),
aes(x=x, y=y), linewidth=1, linetype=2)+
geom_line(data=data.frame(x=new_data, y=ci.lower),
aes(x=x, y=y), linewidth=1, linetype=2)

最初の ggplot() で散布図を書き、graph1 + geom_line() で、回帰直線と信頼区間を書き入れる

できあがりの図は以下のとおり

実線が予測値で、破線が信頼区間の上限と下限である

今回のデータを直線で予測するというのはしょせん無理があるなといったところ

まとめ

ポアソン回帰分析から得られた、予測値と 95 % 信頼区間を、元の散布図に書き入れる方法を解説した

参考になれば

参考サイト

ポアソン回帰 | R glm 関数を利用してカウントデータの回帰モデルを作成

参考書籍・サンプルデータ

データ解析のための統計モデリング入門

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

統計解析が趣味

コメント

コメントする

目次