Toplam olay sayısı için bir güven aralığı nasıl bulunur


9

Bazı olasılıkları olan bir olayı algılayacak dedektör var p . Dedektör bir olayın meydana geldiğini söylüyorsa, durum her zaman böyledir, bu nedenle yanlış pozitifler yoktur. Bir süre çalıştırdıktan sonra, k olaylarının algılanmasını sağlarım. Ortaya çıkan toplam olay sayısının, tespit edildiğini veya başka bir şekilde,% 95 diyelim, hesaplamak istiyorum.

Diyelim ki 13 olay tespit edildim. 13 ile% 19 arasında p olayı olduğunu% 95 güven ile hesaplayabilmek istiyorum .

İşte şimdiye kadar denedim:

N toplamı varsa k olaylarını algılama olasılığı :

binomial(n, k) * p^k * (1 - p)^(n - k)

O aşkın toplamı n dan k sonsuza geçerli:

1/p

Yani toplamda n olay olma olasılığı :

f(n) = binomial(n, k) * p^(k + 1) * (1 - p)^(n - k)

Eğer% 95 emin olmak istiyorsam ilk kısmi toplamı bulmalıyım f(k) + f(k+1) + f(k+2) ... + f(k+m)ki bu en az 0.95 ve cevabı [k, k+m]. Bu doğru bir yaklaşım mı? Ayrıca cevap için kapalı bir formül var mı?

Yanıtlar:


11

Ben bir başarı sabit olasılığı p olduğunda, k_th başarıdan önce X başarısızlık olasılığı olasılığını döndüren negatif binom dağılımı kullanmayı tercih eder .

Bir örnek kullanma

k=17 # number of successes
p=.6 # constant probability of success

arızalar için ortalama ve sd

mean.X <- k*(1-p)/p
sd.X <- sqrt(k*(1-p)/p^2) 

X arızalarının dağılımı yaklaşık olarak bu şekle sahip olacaktır.

plot(dnbinom(0:(mean.X + 3 * sd.X),k,p),type='l')

Böylece, başarısızlık sayısı (% 95 güvenle) yaklaşık olarak

qnbinom(.025,k,p)
[1] 4

ve

qnbinom(.975,k,p)
[1] 21

Yani inerval [k + qnbinom (.025, k, p), k + qnbinom (.975, k, p)] (örneğin sayılarını kullanarak [21,38])


5

N, p (n) için bir dağılım seçmek istediğinizi varsayarsak, Bayes yasasını uygulayabilirsiniz.

Aslında n meydana geldiği göz önüne alındığında k olaylarının meydana gelme olasılığının bir binom dağılımı ile yönetildiğini biliyorsunuz.

p(k|n)=(nk)pk(1p)(nk)

Gerçekten bilmek istediğiniz şey, k gözlemlediğiniz göz önüne alındığında, n olayın gerçekleşme olasılığıdır. Bayes lay tarafından:

p(n|k)=p(k|n)p(n)p(k)

Toplam olasılık teoremini uygulayarak şunu yazabiliriz:

p(n|k)=p(k|n)p(n)np(k|n)p(n)

Dolayısıyla, daha fazla bilgi olmadan, nin dağılımı hakkında daha fazla ilerleyemezsiniz.p(n)

Bununla birlikte, bir dağılım almak istiyorum olan bir değeri vardır burada daha büyük , ya da yeterince sıfıra yakın, daha sonra biraz daha iyi yapabilir. Örneğin, dağılımının aralığında eşit olduğunu varsayalım . bu durum:p(n)np(n)=0n[0,nmax]

p(n)=1nmax

Bayes formülasyonu aşağıdakileri basitleştirir:

p(n|k)=p(k|n)np(k|n)

Sorunun son kısmına gelince, en iyi yaklaşımın üzerinde kümülatif bir toplama yapmak , kümülatif olasılık dağılım fonksiyonunu oluşturmak ve 0.95 sınırına ulaşılana kadar tekrarlamak olduğunu kabul ediyorum .p(n|k)

Bu sorunun SO'dan taşındığı göz önüne alındığında, python'daki oyuncak örnek kodu aşağıda eklenmiştir

import numpy.random

p = 0.8
nmax = 200

def factorial(n):
    if n == 0:
        return 1
    return reduce( lambda a,b : a*b, xrange(1,n+1), 1 )

def ncr(n,r):
    return factorial(n) / (factorial(r) * factorial(n-r))

def binomProbability(n, k, p):
    p1 = ncr(n,k)
    p2 = p**k
    p3 = (1-p)**(n-k)
    return p1*p2*p3

def posterior( n, k, p ):
    def p_k_given_n( n, k ):
        return binomProbability(n, k, p)
    def p_n( n ):
        return 1./nmax
    def p_k( k ):
        return sum( [ p_n(nd)*p_k_given_n(nd,k) for nd in range(k,nmax) ] )
    return (p_k_given_n(n,k) * p_n(n)) / p_k(k)


observed_k   = 80
p_n_given_k  = [ posterior( n, observed_k, p ) for n in range(0,nmax) ]
cp_n_given_k = numpy.cumsum(p_n_given_k)
for n in xrange(0,nmax):
    print n, p_n_given_k[n], cp_n_given_k[n]

3

Ölçmek Eğer olay ve bildiklerimisizlere algılama verimliliği olan otomatik sayısı "true" için ölçülen sonuç kadar düzeltebilir .kpktrue=k/p

O zaman sorunuz, gözlemlerin% 95'inin aralığını . Bu aralığı tahmin etmek için Feldman-Cousins ​​yöntemini kullanabilirsiniz. ROOT'a erişiminiz varsa, bu hesaplamayı sizin için yapacak bir sınıf vardır.ktrue

Sen den Feldman-Cousins ile alt ve üst sınırları hesaplamak olacaktır düzeltilmemiş olaylar sayısı ve daha sonra% 100'e onları büyütmek . Bu şekilde, gerçek ölçüm sayısı, ölçülmeyen ölçeklenmiş bir sayıyı değil, belirsizliğinizi belirler.k1/p

{
gSystem->Load("libPhysics");

const double lvl = 0.95;
TFeldmanCousins f(lvl);

const double p = 0.95;
const double k = 13;
const double k_true = k/p;

const double k_bg = 0;

const double upper = f.CalculateUperLimit(k, k_bg) / p;
const double lower = f.GetLowerLimit() / p;

std::cout << "["
  lower <<"..."<<
  k_true <<"..."<<
  upper <<
  "]" << std::endl;
}

Teşekkürler, harika görünüyor. Sanırım aradığım cevap bu.
Statec

2

Bence güven aralıklarının amacını yanlış anladın. Güven aralıkları, parametrenin gerçek değerinin nerede olduğunu değerlendirmenizi sağlar. Yani, sizin durumunuzda, için bir güven aralığı oluşturabilirsiniz . Veriler için bir aralık oluşturmak mantıklı değildir.p

Bunu söyledikten sonra, tahminine sahip olduktan sonra binom pdf kullanarak 14, 15 vb. Gibi farklı gerçekleşmeleri gözlemleme olasılığını hesaplayabilirsiniz.p


Ben zaten biliyorum s. Ayrıca tespit edilen olayların miktarını da biliyorum: k. Yani toplam olaylar k / p civarında bir yerdedir. K / p etrafında bir aralık bulmak istiyorum, böylece toplam olay sayısının içinde% 95 olduğundan emin olabilirim. Bu daha mantıklı mı?
Statec

Ben OP binom örnekleme, p bilinen N için bir aralık hesaplamaya çalışıyorum inanıyorum. Bunu yapmaya çalışmak mantıklı.
Glen_b
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.