如何计算累积正态分布?
我在找一个可以在Python中使用的函数,这个函数来自Numpy或Scipy(或者其他可靠的Python库),它能帮我计算累积正态分布函数。
8 个回答
55
从 Python 3.8
开始,标准库里新增了一个叫 NormalDist
的对象,它是 statistics
模块的一部分。
这个对象可以用来计算累积分布函数(cdf
),也就是一个随机样本 X 小于或等于某个值 x 的概率。你只需要提供一个均值(mu
)和一个标准差(sigma
):
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
59
可能现在回答这个问题有点晚了,但因为谷歌还是把人们引导到这里,所以我决定在这里写下我的解决方案。
从Python 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
165
这里有个例子:
>>> from scipy.stats import norm
>>> norm.cdf(1.96)
0.9750021048517795
>>> norm.cdf(-1.96)
0.024997895148220435
换句话说,大约95%的标准正态分布的数值都落在以零为中心的两个标准差范围内。
如果你需要反向的累积分布函数(CDF):
>>> norm.ppf(norm.cdf(1.96))
array(1.9599999999999991)