% 95 güven aralığının tekrarlanan deneylerin yorumunu simüle etmek için bir R komut dosyası yazmaya çalışıyorum. Bir oranın gerçek popülasyon değerinin numunenin% 95 CI'sinde bulunduğu süreyi orantısını fazla tahmin ettiğini gördüm. Büyük bir fark değil - yaklaşık% 96 vs% 95 ama bu yine de ilgimi çekti.
samp_n
İşlevim bir Bernoulli dağılımından olasılıkla bir örnek alır pop_p
ve sonra prop.test()
süreklilik düzeltmesi kullanarak veya daha doğrusu ile % 95 güven aralığı hesaplar binom.test()
. Gerçek nüfus oranı pop_p
% 95 CI içinde bulunuyorsa 1 değerini döndürür . Biri kullanan prop.test()
ve biri kullanan binom.test()
ve her ikisiyle de benzer sonuçlar elde eden iki işlev yazdım :
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)
}
}
Deneyi birkaç bin kez tekrarladığınızda pop_p
, örneğin% 95 CI'sinde olduğu zaman oranının 0.95 yerine 0.96'ya yakın olduğunu buldum.
set.seed(1234)
times = 10000
results <- replicate(times, in_conf_int_binom())
sum(results) / times
[1] 0.9562
Bu durumun neden böyle olabileceğine dair düşüncelerim
- kodum yanlış (ama çok kontrol ettim)
- Başlangıçta bunun normal yaklaşım sorunundan kaynaklandığını düşündüm, ancak daha sonra
binom.test()
Herhangi bir öneri?
times=100000
birkaç farklı kez tekrar çalıştırdım ve aynı sonucu gördüm. Bunun için bir açıklama olup olmadığını merak ediyorum. Kod hiçbir kodlama hatası oldukça eminim yeterince basit. Ayrıca, bir çalışma ile sonuçtimes=1000000
verdi.954931
.