95%信頼区間の繰り返し実験解釈をシミュレートするRスクリプトを記述しようとしています。これは、割合の真の母集団値がサンプルの95%CIに含まれている時間の割合を過大評価していることがわかりました。大きな違いはありません-約96%対95%ですが、それでも私は興味を持っていました。
私の関数は、samp_n
確率pop_p
でベルヌーイ分布からサンプルを取得し、prop.test()
連続性補正を使用して、またはより正確に95%信頼区間を計算しbinom.test()
ます。真の人口比率pop_p
が95%CIに含まれている場合、1を返します。私は2つの関数を作成しました。1つはを使用する関数、もう1つはを使用しprop.test()
、binom.test()
両方で同様の結果を得たものです。
in_conf_int_normal <- function(pop_p = 0.3, samp_n = 1000, correct = T){
## uses normal approximation to calculate confidence interval
## returns 1 if the CI contain the pop proportion
## returns 0 otherwise
samp <- rbinom(samp_n, 1, pop_p)
pt_result <- prop.test(length(which(samp == 1)), samp_n)
lb <- pt_result$conf.int[1]
ub <- pt_result$conf.int[2]
if(pop_p < ub & pop_p > lb){
return(1)
} else {
return(0)
}
}
in_conf_int_binom <- function(pop_p = 0.3, samp_n = 1000, correct = T){
## uses Clopper and Pearson method
## returns 1 if the CI contain the pop proportion
## returns 0 otherwise
samp <- rbinom(samp_n, 1, pop_p)
pt_result <- binom.test(length(which(samp == 1)), samp_n)
lb <- pt_result$conf.int[1]
ub <- pt_result$conf.int[2]
if(pop_p < ub & pop_p > lb){
return(1)
} else {
return(0)
}
}
実験を数千回繰り返すpop_p
と、サンプルの95%CI内にある時間の割合が0.95ではなく0.96に近いことがわかりました。
set.seed(1234)
times = 10000
results <- replicate(times, in_conf_int_binom())
sum(results) / times
[1] 0.9562
なぜこれが当てはまるのか、これまでの私の考えは
- 私のコードは間違っています(しかし、私はそれをたくさんチェックしました)
- 私はこれが通常の近似問題によるものだと最初は思っていましたが、
binom.test()
助言がありますか?
times=100000
何度か再実行し、同じ結果を確認しました。誰かがこれについて説明があるかどうか知りたいです。コードは非常に単純で、コーディングエラーがないことは確かです。また、結果としてGiveが1回実行されtimes=1000000
ました.954931
。