% 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_pve 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=100000birkaç 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=1000000verdi.954931.