Saya mencoba menulis skrip R untuk mensimulasikan interpretasi eksperimen berulang dari interval kepercayaan 95%. Saya telah menemukan bahwa itu melebih-lebihkan proporsi waktu di mana nilai populasi sebenarnya dari suatu proporsi terkandung dalam 95% CI sampel. Bukan perbedaan besar - sekitar 96% vs 95% tetapi ini tetap menarik bagi saya.
Fungsi saya mengambil sampel samp_n
dari distribusi Bernoulli dengan probabilitas pop_p
, dan kemudian menghitung interval kepercayaan 95% dengan prop.test()
menggunakan koreksi kontinuitas, atau lebih tepatnya dengan binom.test()
. Ini mengembalikan 1 jika proporsi populasi sebenarnya pop_p
terkandung dalam CI 95%. Saya telah menulis dua fungsi, yang menggunakan prop.test()
dan yang menggunakan binom.test()
dan memiliki hasil yang serupa dengan keduanya:
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)
}
}
Saya telah menemukan bahwa ketika Anda mengulangi percobaan beberapa ribu kali, proporsi kali ketika pop_p
berada dalam CI 95% dari sampel lebih dekat ke 0,96 daripada 0,95.
set.seed(1234)
times = 10000
results <- replicate(times, in_conf_int_binom())
sum(results) / times
[1] 0.9562
Pikiranku sejauh ini tentang mengapa ini mungkin terjadi
- kode saya salah (tapi saya sudah sering memeriksanya)
- Saya awalnya berpikir bahwa ini adalah karena masalah perkiraan yang normal, tetapi kemudian ditemukan
binom.test()
Ada saran?
times=100000
beberapa waktu yang berbeda dan melihat hasil yang sama. Saya ingin tahu apakah ada yang punya penjelasan untuk ini. Kode ini cukup sederhana sehingga saya cukup yakin tidak ada kesalahan pengkodean. Juga, satu lari dengantimes=1000000
memberi.954931
sebagai hasilnya.