Tekrarlanan deneylerin% 95 güven aralığının açıklanmasıyla ilgili simülasyon çalışmasıyla ilgili sorunlar - nerede yanlış gidiyorum?


9

% 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?


(+1) Bu arada, kodunuzu 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.
Macro

3
(+1) Peki neden tam olarak% 95 almayı düşünüyorsunuz? Örneğin Clopper Pearson'un muhafazakar olduğu garanti edilmektedir. Senin içinn ve p, CI zamanın% 95.3648 gerçek değerini kapsaması gerektiğini anladım.
kardinal

2
Kardinalleri desteklemek için kesin binom olasılıkları tamdır çünkü kesin olasılık hesaplamasına dayanırlar, ancak kesin güven seviyesini vermezler. Çünkü binom ayrık bir dağılımdır. Böylece Clopper-Pearson, aralığın uç noktasını seçer, böylece onun üzerindeki veya üzerindeki güven seviyesine en yakın olasılığa sahip olursunuz. Bu aynı zamanda tam bir binom testinin güç fonksiyonunda testere dişli bir davranış yaratır. Bu garip ama temel sonuç makalemde Amerikan İstatistikçi (2002) 'de Christine Liu ile tartışıldı.
Michael R. Chernick


3
Kesin Binom CI'leri "kesin" dir çünkü olasılık hesaplamaları "kesin" değil, gerçek performansları nominal performanslarına eşittir! Bir anlaşılmalıdır ki1-αCI en az bir1-αAltta yatan dağılım ne olursa olsun (varsayılan aile içinde) gerçek parametreyi kaplama şansı . Tüm bu sigortaların infimum, dağılımları, ailesinin tamamı ele o "Tam" anlamına gelir eşittir 1-α. Bunu başarmak için, olası dağıtımların birçoğunun gerçek kapsamı genellikle1-α.
whuber

Yanıtlar:


9

Yanlış gitmiyorsun. Sonucun ayrık doğası nedeniyle her zaman tam olarak % 95 kapsama sahip olan bir binom oranı için bir güven aralığı oluşturmak mümkün değildir . Clopper-Pearson ('kesin') aralığının en az % 95 kapsama alanı olduğu garanti edilir . Diğer aralıklar , gerçek oran üzerinden ortalamalandığında ortalama % 95'e yakın kapsama alanına sahiptir .

Ortalama olarak% 95'e yakın kapsama ve (Wilson skor aralığının aksine) her iki kuyrukta yaklaşık eşit kapsama sahip olduğundan, Jeffreys aralığını kendim tercih ediyorum.

Söz konusu kodda sadece küçük bir değişiklikle, kesin kapsamı simülasyon olmadan hesaplayabiliriz.

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))

Bu, aşağıdaki çıktıyı verir.

> coverage.pr
[1] 0.9508569

> coverage.cp
[1] 0.9546087

1
" Sonucun ayrık doğası nedeniyle her zaman tam olarak% 95 kapsama alanına sahip olan bir binom oranı için bir güven aralığı oluşturmak mümkün değildir " --- belki de rastgele aralıkların (biraz tuhaf) olasılığı için . (Bu şekilde En azından olabilir de olabilir ama yapılması genellikle o olmamalı .)
Glen_b -Reinstate Monica

2
@Glen_b Uzun zamandır randomize kararlara itirazları merak ediyorum. Jack Kiefer, örneklerinizi toplamak için rasgeleleştirmeyi kullanırsanız, karar sürecinde kullanmakta sorun yaşamamanız gerektiğini belirtti. Yeniden üretilebilir, belgelenmiş ve aldatılması zor bir karar prosedürüne ihtiyacınız varsa , verileri toplamadan önce rastgele aralık için gereken tüm rasgele değerleri üretin - tasarımın bir parçası haline getirin.
whuber
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.