Cách tìm khoảng tin cậy cho tổng số sự kiện


9

Tôi có máy dò sẽ phát hiện một sự kiện với một số xác suất p . Nếu máy dò nói rằng một sự kiện đã xảy ra, thì đó luôn là trường hợp, do đó không có kết quả dương tính giả. Sau khi tôi chạy nó một thời gian, tôi nhận được k sự kiện được phát hiện. Tôi muốn tính toán tổng số sự kiện đã xảy ra, được phát hiện hay nói cách khác, với độ tin cậy, nói 95%.

Vì vậy, ví dụ, giả sử tôi nhận được 13 sự kiện được phát hiện. Tôi muốn có thể tính toán rằng có từ 13 đến 19 sự kiện với độ tin cậy 95% dựa trên p .

Đây là những gì tôi đã thử cho đến nay:

Xác suất phát hiện k sự kiện nếu có tổng n là:

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

Tổng của hơn n từ k đến vô cùng là:

1/p

Điều đó có nghĩa là, xác suất có tổng số n sự kiện là:

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

Vì vậy, nếu tôi muốn chắc chắn 95%, tôi nên tìm tổng một phần đầu tiên f(k) + f(k+1) + f(k+2) ... + f(k+m)ít nhất là 0,95 và câu trả lời là [k, k+m]. Đây có phải là cách tiếp cận chính xác? Ngoài ra có một công thức đóng cho câu trả lời?

Câu trả lời:


11

Tôi sẽ chọn sử dụng phân phối nhị thức âm , trả về xác suất sẽ có X thất bại trước thành công thứ k, khi xác suất thành công không đổi là p.

Sử dụng một ví dụ

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

giá trị trung bình và sd cho các lỗi được đưa ra bởi

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

Sự phân bố của các thất bại X, sẽ có hình dạng xấp xỉ

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

Vì vậy, số lượng thất bại sẽ là (với độ tin cậy 95%) khoảng giữa

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

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

Vì vậy, inerval của bạn sẽ là [k + qnbinom (.025, k, p), k + qnbinom (.975, k, p)] (sử dụng các số của ví dụ [21,38])


5

Giả sử bạn muốn chọn một bản phân phối cho n, p (n), bạn có thể áp dụng luật Bayes.

Bạn biết rằng xác suất của k sự kiện xảy ra do n thực sự đã xảy ra bị chi phối bởi sự phân phối nhị thức

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

Điều bạn thực sự muốn biết là xác suất của n sự kiện đã thực sự xảy ra, với điều kiện bạn quan sát thấy k. Bởi Bayes nằm:

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

Bằng cách áp dụng định lý về tổng xác suất, chúng ta có thể viết:

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

Vì vậy, không có thêm thông tin, về việc phân phối bạn thực sự không thể tiến xa hơn.p(n)

Tuy nhiên, nếu bạn muốn chọn phân phối cho có giá trị lớn hơn hoặc gần bằng 0, thì bạn có thể làm tốt hơn một chút. Ví dụ: giả sử rằng phân phối của là đồng nhất trong phạm vi . trường hợp này:p(n)np(n)=0n[0,nmax]

p(n)=1nmax

Công thức Bayes đơn giản hóa để:

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

Đối với phần cuối cùng của vấn đề, tôi đồng ý rằng cách tiếp cận tốt nhất là thực hiện tổng cộng tích lũy trên , để tạo hàm phân phối xác suất giả và lặp lại cho đến khi đạt đến giới hạn 0,95.p(n|k)

Cho rằng câu hỏi này được di chuyển từ SO, mã mẫu đồ chơi trong python được đính kèm bên dưới

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

Nếu bạn đo sự kiện và biết hiệu quả phát hiện của bạn là bạn có thể tự động sửa kết quả đo được của mình cho đến số "đúng" .p k t r u e = k / pkpktrue=k/p

Câu hỏi của bạn là về việc tìm phạm vi của trong đó 95% các quan sát sẽ rơi. Bạn có thể sử dụng phương pháp Feldman-Cousins để ước tính khoảng thời gian này. Nếu bạn có quyền truy cập vào ROOT, có một lớp để thực hiện phép tính này cho bạn.ktrue

Bạn sẽ tính giới hạn trên và dưới với Feldman-Cousins ​​từ số lượng sự kiện chưa được xử lý và sau đó chia tỷ lệ lên tới 100% với . Bằng cách này, số lượng phép đo thực tế xác định độ không chắc chắn của bạn, chứ không phải số lượng tỷ lệ không được đo.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;
}

Cảm ơn, điều đó có vẻ tuyệt vời. Tôi nghĩ rằng đây là câu trả lời tôi đang tìm kiếm.
Statec

2

Tôi nghĩ rằng bạn đã hiểu sai mục đích của khoảng tin cậy. Khoảng tin cậy cho phép bạn đánh giá vị trí của giá trị thực của tham số. Vì vậy, trong trường hợp của bạn, bạn có thể xây dựng khoảng tin cậy cho . Nó không có ý nghĩa để xây dựng một khoảng cho dữ liệu.p

Phải nói rằng, một khi bạn có ước tính bạn có thể tính xác suất bạn sẽ quan sát các thực hiện khác nhau, chẳng hạn như 14, 15, v.v ... bằng cách sử dụng pdf nhị thức.p


Vâng, tôi đã biết p. Tôi cũng biết số lượng sự kiện được phát hiện: k. Vì vậy, tổng số sự kiện là một nơi nào đó xung quanh k / p. Tôi muốn tìm hiểu một khoảng xung quanh k / p để tôi có thể chắc chắn 95% rằng tổng số sự kiện nằm trong đó. Điều đó có làm cho nó ý nghĩa hơn không?
Statec

Tôi tin rằng OP đang cố gắng tính một khoảng cho N trong lấy mẫu nhị thức, trong đó p được biết đến. Nó có ý nghĩa để cố gắng để làm điều đó.
Glen_b -Reinstate Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.