2010-08-16 3 views
28

में सामान्य वितरण के लिए जे-स्कोर (जेड-वैल्यू, मानक स्कोर) को पी-वैल्यू में कनवर्ट करें Z-distribution (standard normal distribution, Gaussian distribution) से p-value पर Z-score कैसे परिवर्तित करता है? ऐसा करने के लिए मुझे अभी तक Scipy's stats module में जादुई फ़ंक्शन नहीं मिला है, लेकिन कोई वहां होना चाहिए।पाइथन

+0

मैं यहाँ http://statsandprobability.codeplex.com/ – user123976

उत्तर

30

मैं अस्तित्व समारोह (ऊपरी पूंछ संभावना) की तरह की पी मान प्राप्त कर सकते हैं सामान्य वितरण थोड़ा बेहतर है, क्योंकि फ़ंक्शन का नाम अधिक जानकारीपूर्ण है:

p_values = scipy.stats.norm.sf(abs(z_scores)) #one-sided 

p_values = scipy.stats.norm.sf(abs(z_scores))*2 #twosided 

सामान्य वितरण "आदर्श" scipy.stats में लगभग 90 वितरण में से एक

norm.sf भी gotgenes उदाहरण के रूप में scipy.special में इसी फ़ंक्शन को कॉल है

अस्तित्व समारोह, एस एफ के छोटे लाभ: cdf

8

आह! मैंने पाया: scipy.special.ndtr! यह scipy.stats.stats.zprob के साथ भी प्रतीत होता है (जो कि ndtr पर सिर्फ एक सूचक है)।

विशेष रूप

, एक आयामी numpy.array उदाहरण z_scores को देखते हुए, एक के रूप में

p_values = 1 - scipy.special.ndtr(z_scores) 

या वैकल्पिक रूप से

p_values = scipy.special.ndtr(-z_scores) 
+0

अजीब शब्दावली एक शुरू कर दिया है, के बजाय "सामान्य वक्र" "जेड वितरण"। जेड-स्कोर मैं शायद इस संदर्भ में मानक विचलन भी कहूंगा। –

+0

खैर, जेड-वितरण == "मानक सामान्य वितरण" == 'एन (0, 1)'। उस ने कहा, आपका बिंदु अच्छी तरह से लिया गया है। मैंने एक ही अवधारणाओं के लिए विभिन्न शब्दावली को दर्शाने के लिए प्रश्न को अद्यतन किया है। – gotgenes

12

का उपयोग करने के मुकाबले क्वांटाइल 1 के करीब संख्यात्मक सटीकता बेहतर होना चाहिए। मुझे लगता है कि संचयी वितरण फ़ंक्शन (सीडीएफ) को उत्तरजीवी कार्य को प्राथमिकता दी जाती है। उत्तरजीवी कार्य को 1-सीडीएफ के रूप में परिभाषित किया जाता है, और दिशात्मक प्रतिशत के लिए भाषा मॉडल का अनुचित आकलन गलत तरीके से संवाद कर सकता है। इसके अलावा, प्रतिशत बिंदु फ़ंक्शन (पीपीएफ) सीडीएफ के विपरीत है, जो बहुत सुविधाजनक है।

>>> import scipy.stats as st 
>>> st.norm.ppf(.95) 
1.6448536269514722 
>>> st.norm.cdf(1.64) 
0.94949741652589625 
1
सूत्र से

:

import numpy as np 
import scipy.special as scsp 
def z2p(z): 
    """From z-score return p-value.""" 
    return 0.5 * (1 + scsp.erf(z/np.sqrt(2))) 
+0

यह सबसे अच्छा समाधान नहीं है; यह उपर्युक्त उत्तर की तरह वेक्टरकृत नहीं है। – hlin117

+1

आप 'math.erf' और 'math.sqrt' को' erf' और' sqrt' से scipy से बदलकर बस एक सदिशित संस्करण प्राप्त कर सकते हैं। – NullSpace