मैं Numpy या Scipy (या किसी भी कठोर पायथन लाइब्रेरी) में एक फ़ंक्शन की तलाश कर रहा हूं जो मुझे पायथन में संचयी सामान्य वितरण फ़ंक्शन देगा।
मैं Numpy या Scipy (या किसी भी कठोर पायथन लाइब्रेरी) में एक फ़ंक्शन की तलाश कर रहा हूं जो मुझे पायथन में संचयी सामान्य वितरण फ़ंक्शन देगा।
जवाबों:
यहाँ एक उदाहरण है:
>>> from scipy.stats import norm
>>> norm.cdf(1.96)
0.9750021048517795
>>> norm.cdf(-1.96)
0.024997895148220435
दूसरे शब्दों में, मानक सामान्य अंतराल का लगभग 95% दो मानक विचलन के भीतर है, शून्य के मानक अर्थ पर केंद्रित है।
यदि आपको उलटा सीडीएफ चाहिए:
>>> norm.ppf(norm.cdf(1.96))
array(1.9599999999999991)
loc
और scale
? मैंने इसका इस्तेमाल किया help(norm.ppf)
लेकिन फिर क्या बिल्ली है - loc
और scale
मदद के लिए मदद चाहिए ..
इस प्रश्न का उत्तर देने में बहुत देर हो सकती है लेकिन चूंकि Google अभी भी यहां लोगों का नेतृत्व करता है, इसलिए मैं यहां अपना समाधान लिखने का फैसला करता हूं।
यही है, पायथन 2.7 के बाद से, math
लाइब्रेरी ने त्रुटि फ़ंक्शन को एकीकृत किया हैmath.erf(x)
erf()
समारोह में इस तरह के संचयी मानक सामान्य वितरण के रूप में पारंपरिक सांख्यिकीय कार्यों की गणना करने के लिए इस्तेमाल किया जा सकता है:
from math import *
def phi(x):
#'Cumulative distribution function for the standard normal distribution'
return (1.0 + erf(x / sqrt(2.0))) / 2.0
संदर्भ:
https://docs.python.org/2/library/math.html
https://docs.python.org/3/library/math.html
त्रुटि फ़ंक्शन और मानक सामान्य वितरण फ़ंक्शन कैसे संबंधित हैं?
def phi(x, mu, sigma): return (1 + erf((x - mu) / sigma / sqrt(2))) / 2
।
यहाँ से अनुकूलित http://mail.python.org/pipermail/python-list/2000-June/03987.html.html
from math import *
def erfcc(x):
"""Complementary error function."""
z = abs(x)
t = 1. / (1. + 0.5*z)
r = t * exp(-z*z-1.26551223+t*(1.00002368+t*(.37409196+
t*(.09678418+t*(-.18628806+t*(.27886807+
t*(-1.13520398+t*(1.48851587+t*(-.82215223+
t*.17087277)))))))))
if (x >= 0.):
return r
else:
return 2. - r
def ncdf(x):
return 1. - 0.5*erfcc(x/(2**0.5))
शुरू Python 3.8
, मानक पुस्तकालय मॉड्यूल के NormalDist
हिस्से के रूप में वस्तु प्रदान करता है statistics
।
इसका उपयोग संचयी वितरण फ़ंक्शन को प्राप्त करने के लिए किया जा सकता है ( cdf
- संभावना है कि किसी दिए गए माध्य ( mu
) और मानक विचलन ( sigma
) के लिए एक यादृच्छिक नमूना X x से कम या उसके बराबर होगा ):
from statistics import NormalDist
NormalDist(mu=0, sigma=1).cdf(1.96)
# 0.9750021048517796
मानक सामान्य वितरण ( mu = 0
और sigma = 1
) के लिए सरलीकृत किया जा सकता है :
NormalDist().cdf(1.96)
# 0.9750021048517796
NormalDist().cdf(-1.96)
# 0.024997895148220428
अज्ञात के उदाहरण पर निर्माण करने के लिए, बहुत सारे पुस्तकालयों में लागू फ़ंक्शन मानदंड () के बराबर पायथन होगा:
def normcdf(x, mu, sigma):
t = x-mu;
y = 0.5*erfcc(-t/(sigma*sqrt(2.0)));
if y>1.0:
y = 1.0;
return y
def normpdf(x, mu, sigma):
u = (x-mu)/abs(sigma)
y = (1/(sqrt(2*pi)*abs(sigma)))*exp(-u*u/2)
return y
def normdist(x, mu, sigma, f):
if f:
y = normcdf(x,mu,sigma)
else:
y = normpdf(x,mu,sigma)
return y
एलेक्स का जवाब आपको मानक सामान्य वितरण (मतलब = 0, मानक विचलन = 1) के लिए एक समाधान दिखाता है। यदि आपके पास सामान्य वितरण है mean
और std
(जो है sqr(var)
) और आप गणना करना चाहते हैं:
from scipy.stats import norm
# cdf(x < val)
print norm.cdf(val, m, s)
# cdf(x > val)
print 1 - norm.cdf(val, m, s)
# cdf(v1 < x < v2)
print norm.cdf(v2, m, s) - norm.cdf(v1, m, s)
यहां cdf के बारे में अधिक पढ़ें और यहां कई फॉर्मूलों के साथ सामान्य वितरण को लागू करना है ।
ऊपर से लिया गया:
from scipy.stats import norm
>>> norm.cdf(1.96)
0.9750021048517795
>>> norm.cdf(-1.96)
0.024997895148220435
दो-पूंछ वाले परीक्षण के लिए:
Import numpy as np
z = 1.96
p_value = 2 * norm.cdf(-np.abs(z))
0.04999579029644087
इस तरह सरल:
import math
def my_cdf(x):
return 0.5*(1+math.erf(x/math.sqrt(2)))
मुझे इस पृष्ठ में सूत्र मिला https://www.danielsoper.com/statcalc/formulas.aspx?id=55
जैसा कि Google खोज netlogo pdf के लिए यह उत्तर देता है , यहाँ उपरोक्त पायथन कोड का netlogo संस्करण है
;; सामान्य वितरण संचयी घनत्व फ़ंक्शन to-report normcdf [x mu sigma] चलो tx - म्यू चलो y 0.5 * erfcc [- t / (सिग्मा * sqrt 2.0)] अगर (y> 1.0) [सेट y 1.0] रिपोर्ट y समाप्त ;; सामान्य वितरण संभावना घनत्व समारोह रिपोर्ट-रिपोर्ट मानदंड [x mu sigma] लेट यू = (एक्स - म्यू) / एब्स सिग्मा let y = 1 / (sqrt [2 * pi] * abs सिग्मा) * exp (- u * u / 2.0) रिपोर्ट y समाप्त ;; पूरक त्रुटि फ़ंक्शन ए-रिपोर्ट erfcc [x] Z एब्स एक्स करें चलो टी 1.0 / (1.0 + 0.5 * z) Let rt * exp (- z * z -1.26551223 + t * (1.00002368 + t * (0.37409196 +) t * (0.09678418 + t * (-0.18628806 + t * (.27886807 +) t * (-1.13520398 + t * (1.48851587 + t * (-0.82215223 +) t * .17087277))))))))) ifelse (x> = 0) [रिपोर्ट r] [रिपोर्ट 2.0 - r] समाप्त