ゼロが多くて、 ものすごくバランバランなデータを解析したいなら、 負の二項分布モデルを使うことができる。
重回帰モデルやポアソン回帰モデルよりも適切だ。
統計ソフトRで負の二項分布モデルを解析する
データはこちらからダウンロード可能。
データを読み込む。
dat <- read.csv("C:/data/NegBin-sample-data.csv")
Yの分布。
> table(dat$Y) 0 1 2 4 3601 35 3 1
Yの分布図はすごいことに。
plot(table(dat$Y))
XとYの関係を見ていこう。
まずクロス集計表だ。
> table(dat$X, dat$Y) 0 1 2 4 1 910 2 1 0 2 1333 11 1 0 3 509 9 1 0 9 849 13 0 1
Yがゼロばかりなのが目立つ。
負の二項分布モデルは、 MASSライブラリの glm.nb()を使う。
library(MASS) nb.res <- glm.nb(Y ~ factor(X), data=dat) summary(nb.res)
結果は、Xが1に比べて、3とか、9とかはYに関連がある。
> summary(nb.res) Call: glm.nb(formula = Y ~ factor(X), data = dat, init.theta = 0.05009536409, link = log) Deviance Residuals: Min 1Q Median 3Q Max -0.18802 -0.18228 -0.13295 -0.09165 3.10151 Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) -5.4304 0.5214 -10.415 <2e-16 *** factor(X)2 0.7912 0.6030 1.312 0.1895 factor(X)3 1.5764 0.6334 2.489 0.0128 * factor(X)9 1.5032 0.5948 2.527 0.0115 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for Negative Binomial(0.0501) family taken to be 1) Null deviance: 210.18 on 3639 degrees of freedom Residual deviance: 199.65 on 3636 degrees of freedom AIC: 465.67 Number of Fisher Scoring iterations: 1 Theta: 0.0501 Std. Err.: 0.0236 2 x log-likelihood: -455.6660
まとめ
データがゼロばかりで、 ほんの少しゼロより大きいデータがある。
こんなデータの場合に使えるモデルだ。
ふだん使いではないが、 知っておいて損はない、 そんなモデルだ。