Masalah dengan studi simulasi penjelasan percobaan berulang tentang interval kepercayaan 95% - di mana saya salah?

9

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_ndari 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_pterkandung 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_pberada 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?

Andrew
sumber
(+1) Ngomong-ngomong, saya menjalankan ulang kode Anda dengan times=100000beberapa 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 dengan times=1000000memberi .954931sebagai hasilnya.
Makro
3
(+1) Tapi mengapa Anda berharap mendapatkan persis 95%? Clopper Pearson misalnya dijamin konservatif. Untuk dan , saya mendapatkan bahwa CI harus mencakup nilai sebenarnya 95,3648% dari waktu. pnp
kardinal
2
Untuk mendukung kardinal, komentar probabilitas binomial tepat adalah tepat karena didasarkan pada perhitungan probabilitas tepat tetapi mereka tidak selalu memberikan tingkat kepercayaan yang tepat. Itu karena binomial adalah distribusi diskrit. Jadi Clopper-Pearson memilih titik akhir untuk interval sehingga Anda memiliki probabilitas terdekat dengan tingkat kepercayaan di atau di atasnya. Ini juga menciptakan perilaku gigi gergaji untuk fungsi daya dari tes binomial yang tepat. Hasil yang aneh tapi mendasar ini dibahas dalam makalah saya dengan Christine Liu dalam American Statistician (2002).
Michael R. Chernick
1
Rincian di atas kertas saya di link ini: citeulike.org/user/austin987/article/7571878
Michael R. Chernick
3
CI Binomial Tepat adalah "tepat" karena kinerja aktualnya sama dengan kinerja nominalnya, bukan karena perhitungan probabilitasnya "tepat"! Ini harus dipahami bahwa CI harus memiliki setidaknya satu kesempatan yang meliputi parameter benar, tidak peduli apa distribusi yang mendasari adalah (dalam keluarga diasumsikan). "Tepat" berarti bahwa jumlah maksimum semua pertanggungan ini, diambil alih seluruh keluarga distribusi, sama dengan . Untuk mencapai ini, cakupan aktual untuk banyak distribusi yang mungkin sering harus lebih besar dari . 1 - α 1 - α 1 - α1α1α 1α1α
whuber

Jawaban:

9

Anda tidak salah. Sangat tidak mungkin untuk membangun interval kepercayaan untuk proporsi binomial yang selalu memiliki cakupan tepat 95% karena sifat diskrit dari hasil. Interval Clopper-Pearson ('tepat') dijamin memiliki cakupan setidaknya 95%. Interval lain memiliki cakupan mendekati rata-rata 95% , ketika dirata-ratakan atas proporsi sebenarnya.

Saya cenderung menyukai interval Jeffreys sendiri, karena memiliki cakupan mendekati rata-rata 95% dan (tidak seperti interval skor Wilson) kira-kira cakupan yang sama di kedua ekor.

Dengan hanya perubahan kecil pada kode dalam pertanyaan, kita dapat menghitung cakupan yang tepat tanpa simulasi.

p <- 0.3
n <- 1000

# Normal test
CI <- sapply(0:n, function(m) prop.test(m,n)$conf.int[1:2])
caught.you <- which(CI[1,] <= p & p <= CI[2,])
coverage.pr <- sum(dbinom(caught.you - 1, n, p))

# Clopper-Pearson
CI <- sapply(0:n, function(m) binom.test(m,n)$conf.int[1:2])
caught.you.again <- which(CI[1,] <= p & p <= CI[2,])
coverage.cp <- sum(dbinom(caught.you.again - 1, n, p))

Ini menghasilkan output berikut.

> coverage.pr
[1] 0.9508569

> coverage.cp
[1] 0.9546087
onestop
sumber
1
" Tidak mungkin untuk membangun interval kepercayaan untuk proporsi binomial yang selalu memiliki cakupan tepat 95% karena sifat diskrit dari hasil " --- selain itu, mungkin, untuk kemungkinan interval acak secara acak (agak aneh) . (Setidaknya dengan cara itu, hal itu dapat dilakukan, meskipun mungkin memang tidak seharusnya demikian .)
Glen_b -Reinstate Monica
2
@ Glen_b Saya sudah lama ingin tahu tentang keberatan untuk keputusan acak. Saya percaya Jack Kiefer berkomentar bahwa jika Anda ok menggunakan pengacakan untuk mengumpulkan sampel Anda, Anda seharusnya tidak memiliki masalah menggunakannya dalam proses pengambilan keputusan. Jika Anda memerlukan prosedur keputusan yang dapat direproduksi, didokumentasikan, dan sulit untuk ditipu, cukup buat nilai acak apa saja yang diperlukan untuk interval acak sebelum mengumpulkan data - jadikan itu bagian dari desain.
Whuber