Cara menemukan interval kepercayaan untuk jumlah total peristiwa

9

Saya memiliki detektor yang akan mendeteksi suatu peristiwa dengan beberapa probabilitas p . Jika detektor mengatakan bahwa suatu peristiwa terjadi, maka itu selalu terjadi, jadi tidak ada positif palsu. Setelah saya menjalankannya untuk beberapa waktu, saya mendapatkan k terdeteksi peristiwa. Saya ingin menghitung berapa jumlah kejadian yang terjadi, terdeteksi atau sebaliknya, dengan kepercayaan diri, katakan 95%.

Jadi misalnya, katakanlah saya mendeteksi 13 peristiwa. Saya ingin dapat menghitung bahwa ada antara 13 dan 19 peristiwa dengan kepercayaan 95% berdasarkan hal .

Inilah yang saya coba sejauh ini:

Probabilitas mendeteksi peristiwa k jika ada n total adalah:

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

Jumlah yang lebih dari n dari k hingga tak terbatas adalah:

1/p

Yang berarti, bahwa probabilitas ada n peristiwa total adalah:

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

Jadi jika saya ingin menjadi 95% yakin saya harus menemukan jumlah parsial pertama f(k) + f(k+1) + f(k+2) ... + f(k+m)yang setidaknya 0,95 dan jawabannya adalah [k, k+m]. Apakah ini pendekatan yang benar? Apakah ada formula tertutup untuk jawabannya?

Statec
sumber

Jawaban:

11

Saya akan memilih untuk menggunakan distribusi binomial negatif , yang mengembalikan probabilitas bahwa akan ada kegagalan X sebelum keberhasilan k_th, ketika probabilitas konstan keberhasilan adalah p.

Menggunakan contoh

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

mean dan sd untuk kegagalan diberikan oleh

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

Distribusi kegagalan X, akan memiliki kira-kira bentuk itu

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

Jadi, jumlah kegagalan akan (dengan kepercayaan 95%) sekitar antara

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

dan

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

Jadi inerval Anda adalah [k + qnbinom (.025, k, p), k + qnbinom (.975, k, p)] (menggunakan nomor contoh [21,38])

George Dontas
sumber
5

Dengan asumsi Anda ingin memilih distribusi untuk n, p (n) Anda dapat menerapkan hukum Bayes.

Anda tahu bahwa kemungkinan kejadian k terjadi mengingat bahwa n sebenarnya telah terjadi diatur oleh distribusi binomial

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

Hal yang benar-benar ingin Anda ketahui adalah probabilitas n peristiwa telah benar-benar terjadi, mengingat Anda mengamati k. By Bayes berbaring:

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

Dengan menerapkan teorema probabilitas total, kita dapat menulis:

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

Jadi tanpa informasi lebih lanjut, tentang distribusi Anda tidak dapat benar-benar melangkah lebih jauh.p(n)

Namun, jika Anda ingin memilih distribusi untuk yang ada nilai lebih besar dari yang , atau cukup dekat dengan nol, maka Anda dapat melakukan sedikit lebih baik. Sebagai contoh, asumsikan bahwa distribusi seragam dalam kisaran . kasus ini:p(n)np(n)=0n[0,nmax]

p(n)=1nmax

Formulasi Bayesian menyederhanakan untuk:

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

Adapun bagian akhir dari masalah, saya setuju bahwa pendekatan terbaik adalah dengan melakukan penjumlahan kumulatif atas , untuk menghasilkan fungsi distribusi probabilitas kumulatif, dan beralih sampai batas 0,95 tercapai.p(n|k)

Mengingat bahwa pertanyaan ini bermigrasi dari SO, kode sampel mainan dengan python terlampir di bawah ini

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]
Andrew Walker
sumber
3

Jika Anda mengukur peristiwa dan mengetahui efisiensi deteksi Anda adalah Anda dapat secara otomatis memperbaiki hasil pengukuran hingga "benar", .kpktrue=k/p

Pertanyaan Anda kemudian tentang menemukan kisaran mana 95% pengamatan akan jatuh. Anda dapat menggunakan metode Feldman-Cousins untuk memperkirakan interval ini. Jika Anda memiliki akses ke ROOT, ada kelas untuk melakukan perhitungan ini untuk Anda.ktrue

Anda akan menghitung batas atas dan bawah dengan Feldman-Sepupu dari jumlah kejadian yang tidak dikoreksi dan kemudian skala hingga 100% dengan . Dengan cara ini, jumlah pengukuran aktual menentukan ketidakpastian Anda, bukan angka yang diukur yang tidak diukur.1 / pk1/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;
}
Benjamin Bannier
sumber
Terima kasih, itu terlihat hebat. Saya pikir ini adalah jawaban yang saya cari.
Statec
2

Saya pikir Anda salah memahami tujuan interval kepercayaan. Interval kepercayaan memungkinkan Anda menilai di mana nilai sebenarnya dari parameter tersebut berada. Jadi, dalam kasus Anda, Anda dapat membuat interval kepercayaan untuk . Tidak masuk akal untuk membuat interval untuk data.p

Karena itu, setelah Anda memiliki perkiraan Anda dapat menghitung probabilitas bahwa Anda akan mengamati realisasi yang berbeda seperti 14, 15 dll menggunakan pdf binomial.p


sumber
Yah aku sudah tahu hal. Saya juga tahu jumlah kejadian yang terdeteksi: k. Jadi total peristiwa ada di sekitar k / p. Saya ingin mengetahui interval sekitar k / p sehingga saya dapat mengatakan 95% yakin bahwa jumlah total kejadian di dalamnya. Apakah itu lebih masuk akal?
Statec
Saya percaya OP sedang mencoba untuk menghitung interval untuk N dalam pengambilan sampel binomial, di mana p diketahui. Masuk akal untuk mencoba melakukan itu.
Glen_b -Reinstate Monica