วิธีค้นหาช่วงความมั่นใจสำหรับจำนวนกิจกรรมทั้งหมด


9

ฉันมีเครื่องตรวจจับที่จะตรวจสอบเหตุการณ์ที่มีบางส่วนน่าจะเป็นพี หากเครื่องตรวจจับบอกว่ามีเหตุการณ์เกิดขึ้นแสดงว่าเป็นกรณีเสมอดังนั้นจึงไม่มีผลบวกปลอม หลังจากที่ฉันเรียกใช้บางครั้งฉันก็พบเหตุการณ์k ฉันต้องการคำนวณจำนวนเหตุการณ์ทั้งหมดที่เกิดขึ้นตรวจพบหรืออื่น ๆ ด้วยความมั่นใจ 95%

ตัวอย่างเช่นสมมติว่าฉันพบเหตุการณ์ 13 เหตุการณ์ ฉันต้องการที่จะสามารถคำนวณว่ามีระหว่างวันที่ 13 และ 19 เหตุการณ์ที่มีความเชื่อมั่น 95% ขึ้นอยู่กับพี

นี่คือสิ่งที่ฉันได้ลองมา:

ความน่าจะเป็นในการตรวจจับเหตุการณ์kหากมีทั้งหมดnคือ:

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

ผลรวมของส่วนที่มากกว่าnจากkถึงอนันต์คือ:

1/p

ซึ่งหมายความว่าความน่าจะเป็นของการมีเหตุการณ์ทั้งหมดnเหตุการณ์คือ:

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

ดังนั้นถ้าผมต้องการที่จะเป็น 95% แน่ใจว่าฉันควรจะหาผลรวมบางส่วนแรกf(k) + f(k+1) + f(k+2) ... + f(k+m)ซึ่งเป็นอย่างน้อย 0.95 [k, k+m]และคำตอบคือ นี่เป็นวิธีที่ถูกต้องหรือไม่? มีสูตรปิดสำหรับคำตอบด้วยหรือไม่

คำตอบ:


11

ฉันเลือกที่จะใช้การแจกแจงแบบทวินามลบซึ่งจะคืนความน่าจะเป็นที่จะมีความล้มเหลว X ก่อนที่จะประสบความสำเร็จ k_th เมื่อความน่าจะเป็นคงที่ของความสำเร็จคือ p

ใช้เป็นตัวอย่าง

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

มีการกำหนดค่าเฉลี่ยและ sd สำหรับความล้มเหลว

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

การกระจายตัวของความล้มเหลว X จะมีรูปร่างประมาณนั้น

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

ดังนั้นจำนวนความล้มเหลวจะเป็น (ด้วยความมั่นใจ 95%) ประมาณระหว่าง

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

และ

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

ดังนั้นคุณจะใช้ความไม่ลงรอยกันคือ [k + qnbinom (.025, k, p), k + qnbinom (.975, k, p)] (ใช้หมายเลขตัวอย่าง [21,38])


5

สมมติว่าคุณต้องการเลือกการแจกแจงสำหรับ n, p (n) คุณสามารถใช้กฎหมายของเบย์

คุณรู้ว่าความน่าจะเป็นของเหตุการณ์ k ที่เกิดขึ้นเนื่องจาก n ได้เกิดขึ้นจริงถูกควบคุมโดยการแจกแจงแบบทวินาม

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

สิ่งที่คุณอยากรู้คือความน่าจะเป็นของเหตุการณ์ n ที่เกิดขึ้นจริงเนื่องจากคุณสังเกต k โดย Bayes นอน:

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

โดยการใช้ทฤษฎีความน่าจะเป็นทั้งหมดเราสามารถเขียน:

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

ดังนั้นหากไม่มีข้อมูลเพิ่มเติมเกี่ยวกับการกระจายของคุณจะไม่สามารถไปได้ไกลกว่านี้อีกp(n)

อย่างไรก็ตามถ้าคุณต้องการเลือกการแจกแจงสำหรับซึ่งมีค่ามากกว่าที่หรือใกล้เคียงกับศูนย์เพียงพอคุณสามารถทำได้ดีขึ้นเล็กน้อย ตัวอย่างเช่นสมมติว่าการกระจายของเป็นชุดในช่วงสูงสุด] กรณีนี้:p(n)np(n)=0n[0,nmax]

p(n)=1nmax

สูตรแบบเบย์ทำให้ง่ายต่อการ:

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

สำหรับส่วนสุดท้ายของปัญหาฉันยอมรับว่าวิธีที่ดีที่สุดคือการรวมยอดรวมเหนือเพื่อสร้างฟังก์ชั่นการแจกแจงความน่าจะเป็น cummulative และซ้ำจนกว่าจะถึงขีด จำกัด 0.95p(n|k)

เนื่องจากคำถามนี้ถูกโยกย้ายจาก SO ตัวอย่างโค้ดของเล่นในไพ ธ อนจะถูกแนบไว้ด้านล่าง

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

ถ้าคุณวัดเหตุการณ์และรู้ว่าการตรวจสอบประสิทธิภาพของคุณอยู่คุณจะสามารถแก้ไขผลการวัดของคุณขึ้นอยู่กับ "ความจริง" นับ pkpktrue=k/p

คำถามของคุณเกี่ยวกับการหาช่วงของซึ่งการสังเกต 95% จะลดลง คุณสามารถใช้วิธีเฟลด์แมน - ลูกพี่ลูกน้องเพื่อประมาณช่วงเวลานี้ หากคุณมีสิทธิ์เข้าถึงROOTมีคลาสสำหรับทำการคำนวณนี้ให้คุณktrue

คุณจะคำนวณขีด จำกัด บนและล่างกับเฟลด์แมน-ญาติจาก ไม่ได้แก้ไขจำนวนของเหตุการณ์แล้วขนาดพวกเขาขึ้นไป 100% p วิธีนี้จำนวนการวัดจริงจะกำหนดความไม่แน่นอนของคุณไม่ใช่จำนวนสเกลที่ไม่ได้วัด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;
}

ขอบคุณที่ดูดี ฉันคิดว่านี่เป็นคำตอบที่ฉันกำลังมองหา
Statec

2

ฉันคิดว่าคุณเข้าใจผิดเกี่ยวกับวัตถุประสงค์ของช่วงความมั่นใจ ช่วงความเชื่อมั่นช่วยให้คุณประเมินตำแหน่งที่แท้จริงของพารามิเตอร์ ดังนั้นในกรณีของคุณคุณสามารถสร้างความเชื่อมั่นสำหรับพีมันไม่สมเหตุสมผลที่จะสร้างช่วงเวลาสำหรับข้อมูลp

ต้องบอกว่าเมื่อคุณมีค่าประมาณของคุณสามารถคำนวณความน่าจะเป็นที่คุณจะสังเกตเห็นการรับรู้ที่แตกต่างกันเช่น 14, 15 ฯลฯ โดยใช้ pdf แบบทวินามp


ฉันรู้แล้ว p ฉันยังรู้จำนวนของเหตุการณ์ที่ตรวจพบ: k ดังนั้นเหตุการณ์ทั้งหมดจึงอยู่ที่ประมาณ k / p ฉันต้องการค้นหาช่วงเวลาประมาณ k / p ดังนั้นฉันจึงสามารถพูดได้ 95% ว่าจำนวนกิจกรรมทั้งหมดอยู่ในนั้น นั่นทำให้รู้สึกมากขึ้น?
Statec

ฉันเชื่อว่า OP พยายามคำนวณช่วงเวลาสำหรับ N ในการสุ่มตัวอย่างแบบทวินามโดยที่ p เป็นที่รู้จัก มันสมเหตุสมผลที่จะลองทำเช่นนั้น
Glen_b
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.