numpy

2013-02-11 20 views
7

के साथ पोइसन आत्मविश्वास अंतराल मैं मैटप्लॉटिब के साथ बना रहा एक हिस्टोग्राम पर पोइसन निरंतर त्रुटि बार डालने की कोशिश कर रहा हूं, लेकिन मुझे एक सुस्त कार्य नहीं मिल रहा है जो मुझे 9 5% आत्मविश्वास अंतराल को पोइसोनियन मानता है डेटा। आदर्श रूप से समाधान scipy पर निर्भर नहीं है, लेकिन कुछ भी काम करेगा। क्या ऐसा कोई कार्य मौजूद है? मुझे बूटस्ट्रैपिंग के बारे में बहुत कुछ मिला है लेकिन यह मेरे मामले में थोड़ा अधिक लगता है।numpy

उत्तर

7

scipy.stats.poisson, और interval पद्धति का उपयोग करना:

>>> scipy.stats.poisson.interval(0.95, [10, 20, 30]) 
(array([ 4., 12., 20.]), array([ 17., 29., 41.])) 

भले ही यह केवल गैर पूर्णांक मूल्यों के लिए प्वासों बंटन गणना करने के लिए सीमित समझ में आता है, ओपी द्वारा अनुरोध सटीक विश्वास के अंतराल गणना की जा सकती यह इस प्रकार के रूप में किया जा सकता है:

>>> data = np.array([10, 20, 30]) 
>>> scipy.stats.poisson.interval(0.95, data) 
(array([ 4., 12., 20.]), array([ 17., 29., 41.])) 
>>> np.array(scipy.stats.chi2.interval(.95, 2 * data))/2 - 1 
array([[ 3.7953887 , 11.21651959, 19.24087402], 
     [ 16.08480345, 28.67085357, 40.64883744]]) 

यह भी उपयोग करने के लिए संभव है ppf विधि:

>>> data = np.array([10, 20, 30]) 
>>> scipy.stats.poisson.ppf([0.025, 0.975], data[:, None]) 
array([[ 4., 17.], 
     [ 12., 29.], 
     [ 20., 41.]]) 

लेकिन क्योंकि वितरण वापसी मान पूर्णांक हो जाएगा असतत है, और विश्वास का अंतराल 95% वास्तव में अवधि नहीं होगा:

>>> scipy.stats.poisson.ppf([0.025, 0.975], 10) 
array([ 4., 17.]) 
>>> scipy.stats.poisson.cdf([4, 17], 10) 
array([ 0.02925269, 0.98572239]) 
+0

क्या आप सटीक वापसी मूल्य प्राप्त करने के तरीके के बारे में जानते हैं? – Shep

+0

@ शेप बस ची-स्क्वायर के आधार पर आपकी विधि का एक संस्करण जोड़ा, लेकिन मेरे उत्तर में 'अंतराल' का उपयोग कर। – Jaime

6

मैं अपने खुद के कार्य के आधार पर लेखन समाप्त हो गया some properties I found on Wikipedia

def poisson_interval(k, alpha=0.05): 
    """ 
    uses chisquared info to get the poisson interval. Uses scipy.stats 
    (imports in function). 
    """ 
    from scipy.stats import chi2 
    a = alpha 
    low, high = (chi2.ppf(a/2, 2*k)/2, chi2.ppf(1-a/2, 2*k + 2)/2) 
    if k == 0: 
     low = 0.0 
    return low, high 

यह निरंतर (असतत के बजाय) सीमाएं लौटाता है, जो मेरे क्षेत्र में अधिक मानक है।

1

यह समस्या खगोल विज्ञान में एक बहुत (मेरे खेत!) आता है और इस पत्र जाने के लिए इन विश्वास के अंतराल के लिए संदर्भ है: Gehrels 1980

यह साथ एक मनमाना विश्वास अंतराल के लिए उस में गणित का एक बहुत है पोइसन आंकड़े, लेकिन दो पक्षीय 95% आत्मविश्वास अंतराल (2-सिग्मा गॉसियन आत्मविश्वास अंतराल के अनुरूप, या इस पेपर के संदर्भ में एस = 2 के लिए) एन घटनाओं के लिए ऊपरी और निचले आत्मविश्वास सीमाओं के लिए कुछ सरल विश्लेषणात्मक सूत्र मापा जाता है

upper = N + 2. * np.sqrt(N + 1) + 4./3. 
lower = N * (1. - 1./(9. * N) - 2./(3. * np.sqrt(N))) ** 3. 

जहां मैंने उन्हें आपके लिए पायथन प्रारूप में रखा है eady। आपको केवल अजीब या अपने अन्य पसंदीदा वर्ग रूट मॉड्यूल की आवश्यकता है। ध्यान रखें कि ये आपको घटनाओं के लिए ऊपरी और निचली सीमाएं देंगे - +/- मान नहीं। आप इन दोनों को पाने के लिए बस इन दोनों से एन घटाएं।

कृपया आत्मविश्वास अंतराल के लिए इन सूत्रों की सटीकता के लिए पेपर से परामर्श लें, लेकिन ये अधिकांश व्यावहारिक अनुप्रयोगों के लिए पर्याप्त सटीक से अधिक होना चाहिए।

+0

संपादन @firelynx के लिए धन्यवाद। यह इस तरह से और अधिक पठनीय है। चूंकि मैं सॉफ्टवेयर इंजीनियरिंग से अधिक विज्ञान करता हूं, इसलिए मैं अक्सर पीईपी 8 का पालन करना भूल जाता हूं। –

 संबंधित मुद्दे