本章では尤度比検定(likelyhood ratio test)について説明
#各自データを読み込んでください
head(d)
## # A tibble: 6 x 3
## y x f
## <dbl> <dbl> <chr>
## 1 6 8.31 C
## 2 6 9.44 C
## 3 6 9.5 C
## 4 12 9.07 C
## 5 10 10.2 C
## 6 4 8.32 C
fit.null <-glm(y ~ 1, data = d, family = poisson)
fit.x <- glm(y ~ x, data = d, family = poisson(link = "log"))
stargazer(fit.x, fit.null, type = "text", style = "all", ci = TRUE,
star.cutoffs = NA, omit.table.layout = 'n',
align = TRUE)
##
## =========================================================
## Dependent variable:
## ---------------------------------
## y
## (1) (2)
## ---------------------------------------------------------
## x 0.076
## (0.006, 0.145)
## t = 2.125
## p = 0.034
## Constant 1.292 2.058
## (0.579, 2.005) (1.988, 2.128)
## t = 3.552 t = 57.586
## p = 0.0004 p = 0.000
## ---------------------------------------------------------
## Observations 100 100
## Log Likelihood -235.386 -237.643
## Akaike Inf. Crit. 474.773 477.286
## Residual Deviance 84.993 (df = 98) 89.507 (df = 99)
## Null Deviance (df = 99) 89.507 89.507
## =========================================================
2つのモデルを比較すると, 逸脱度(Residual Deviance)の差は\(4.5\)くらい
尤度比 : \[\begin{align} \frac{L_1}{L_2} = \frac{一定モデルの最大尤度 : exp(-237.6)}{xモデルの最大尤度 : exp(-235.4)}\\ \end{align}\]
逸脱度の差 : \[\begin{align} Δ_{1, 2} & = -2 × log\frac{L_1}{L_2}\\ &= -2 × (logL_1 - logL_2)\\ \end{align}\]
\(D_1 = -2logL_1\), \(D_2 = -2logL_2\)とすると, \[\begin{align} ΔD_{1, 2} = D_1 - D_2 \\ \end{align}\] となる
今回, \(ΔD_{1, 2} = 4.5\) となった
本例題での帰無仮説と対立仮説
第一種の過誤 : 本当は帰無仮説が正しいのに棄却されてしまう(対立仮説が正しいと判断)
第二種の過誤 : 本当は対立仮説が正しいのに帰無仮説を採択してしまう
Neyman-Pearson検定では第一種の過誤の検討にだけ専念
検定の流れ
\(ΔD_{1, 2} = 4.5\)がありえない値と評価されれば帰無仮説が棄却される
#一定モデルとxモデルの逸脱度の差
fit.null$deviance - fit.x$deviance
## [1] 4.513941
exp(2.058)
## [1] 7.830294
#標本平均は7.83, データdに追加する
d$y.rnd <- rpois(100, lambda = mean(d$y))
#一定モデルとxモデルをこの新データに当てはめてみる
fit.null.rnd <- glm(y.rnd ~ 1, data = d, family = poisson)
fit.x.rnd <- glm(y.rnd ~ x, data = d, family = poisson)
#逸脱度の差
fit.null.rnd$deviance - fit.x.rnd$deviance
## [1] 0.4153217
get.dd <- function(d)
{
#dのデータの数
n.sample <- nrow(d)
#yの平均
y.mean <- mean(d$y)
#n.sampleだけ乱数発生
d$y.rnd <- rpois(n.sample, lambda = y.mean)
fit.null.rnd <- glm(y.rnd ~ 1, data = d, family = poisson)
fit.x.rnd <- glm(y.rnd ~ x, data = d, family = poisson)
#逸脱度の差
fit.null.rnd$deviance - fit.x.rnd$deviance
}
pb <- function(d, n.bootstrap)
{
#get.ddをn.bootstrap回実施(回数を指定)
replicate(n.bootstrap, get.dd(d))
}
#1000回シミュレーション
dd12 <- pb(d, n.bootstrap = 1000)
summary(dd12)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0000 0.1109 0.4806 1.0611 1.3920 15.6523
#ヒストグラムにする
dd <- as.data.frame(dd12)
ggplot(data = dd) +
aes(x = dd12) +
geom_histogram(alpha = 0.5, bins = 100, color = "blue", fill = "blue") +
geom_vline(aes(xintercept = 4.5), color = "#990000", linetype = "dashed")
#p値(4.5以上となる数÷1000)
sum(dd12 >= 4.5)/1000
## [1] 0.04
#95パーセンタイル値
quantile(dd$dd12, 0.95)
## 95%
## 3.84572
この値以下はよくある差(つまりこれ以上だとレア)
尤度比検定の結論としては\(p\leqq0.05\)となるので, 帰無仮説は棄却される
anova(fit.null, fit.x, test = "Chisq")
## Analysis of Deviance Table
##
## Model 1: y ~ 1
## Model 2: y ~ x
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 99 89.507
## 2 98 84.993 1 4.5139 0.03362 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#ちなみに自由度1のカイ二乗確率点
qchisq(0.95, 1)
## [1] 3.841459
#自由度1のカイ2乗分布
curve( dchisq( x, df = 1 ), xlim = c( 0, 10 ), lwd = 3 )