मान लें कि आप n, p (n) के लिए वितरण चुनना चाहते हैं, तो आप Bayes कानून लागू कर सकते हैं।
तुम्हें पता है कि कश्मीर घटनाओं की संभावना दी गई है कि n वास्तव में हुई है एक द्विपद विकर्षण द्वारा नियंत्रित किया जाता है
p ( k | n ) = (nक)पीक( 1 - पी)( n - k )
वह चीज जिसे आप वास्तव में जानना चाहते हैं, वास्तव में होने वाली n घटनाओं की संभावना है, जिसे देखते हुए आपने k किया। बायस द्वारा
p ( n | k ) =p ( k | n ) p ( n )पी ( के )
कुल संभाव्यता के प्रमेय को लागू करके, हम लिख सकते हैं:
p ( n | k ) =p ( k | n ) p ( n )Σn'p ( के |n') पी (n')
तो आगे की जानकारी के बिना, के वितरण के बारे में आप वास्तव में आगे नहीं जा सकते।पी ( एन )
हालाँकि, यदि आप लिए वितरण चुनना चाहते हैं, जिसके लिए से अधिक मूल्य , या पर्याप्त रूप से शून्य के करीब है, तो आप थोड़ा बेहतर कर सकते हैं। उदाहरण के लिए, मान लें कि का वितरण रेंज में समान है । ये मामला:पी ( एन )np ( n ) = 0n[ ० ,nमी ए एक्स]
p ( n ) =1nमी ए एक्स
बायेसियन सूत्रीकरण सरल है:
p ( n | k ) =पी ( के | एन )Σn'p ( के |n')
समस्या के अंतिम भाग के रूप में, मैं सहमत हूं कि संचयी संभाव्यता वितरण समारोह उत्पन्न करने के लिए, और 0.95 की सीमा तक पहुंचने तक इटर्मेट, पर संचयी योग करने के लिए सबसे अच्छा तरीका है ।p ( n | k )
यह देखते हुए कि यह प्रश्न एसओ से चला गया, अजगर में खिलौना नमूना कोड नीचे संलग्न है
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]