二項

  • 信頼区間というのがある
  • 母分布からデータセットをとって、母分布の平均が知りたいときに、昨日は点推定をしたわけだが、今日は区間推定
  • 確率pで生起するときN回観測して、k回起きたという観測結果を基にpを区間推定する
  • Rのbinomパッケージではそのヘルプ文書で『Fisher Information for Various Binomial Parameterizations』と題して、複数の信頼区間算出関数を書いている
  • こちらでは、それを含めて、『信頼区間』の保守性、とかをコメントしている
  • 実際、どうなの?ということで、pを振って、母分布からN=20でサンプリングして、その観測結果に基づき、それぞれの方法で信頼区間を出して、その区間内にpがどのくらいの割合で入るか(95%、入るとよいが…という方法のはず)をぐるぐるをループを回してやってみる
  • 記事などで指摘がある通り、pが0(1でも…)に近い付近での歪みが大きいわけだが、どの方法がどういう風に、どれくらい信頼区間に影響を与えているかを図にする。

library(binom)
ps <- seq(from = 0,to=0.5,by=0.01)
ps <- ps[-1]
ps <- ps[-length(ps)]

n.iter <- 1000
N <- 20
results <- matrix(0,length(ps),11)
for(i in 1:length(ps)){
	res <- matrix(0,n.iter,11)
	for(j in 1:n.iter){
		X <- sample(0:1,N,replace=TRUE,prob=c(1-ps[i],ps[i]))
		binom.out <- binom.confint(length(which(X==1)),N,conf.int=0.95,prior.shape1=1,prior.shape2=1)
		ci <- cbind(binom.out$lower,binom.out$upper)
		res[j,] <- (ci[,1]<ps[i])*(ci[,2]>ps[i])
	}
	results[i,] <- apply(res,2,sum)
}

matplot(ps,results,type="l")
abline(h=950)
legend(0.4,600,binom.out[[1]],lty=1:11,col=1:11)