如何在Python中给出mean,std给出正态分布的概率?我总是可以根据像这个问题中的OP这样的定义显式编写我自己的函数:Calculating Probability of a Random Variable in a Distribution in Python
只是想知道是否有一个库函数调用将允许你这样做 . 在我的想象中它会这样:
nd = NormalDistribution(mu=100, std=12)
p = nd.prob(98)
Perl中有一个类似的问题:How can I compute the probability at a point given a normal distribution in Perl? . 但我没有在Python中看到一个 .
Numpy
有 random.normal
功能,但它就像采样,不完全是我想要的 .
6 回答
scipy.stats中有一个:
[要注意的一件事 - 只是一个提示 - 是参数传递有点宽泛 . 由于代码的设置方式,如果你不小心写了
scipy.stats.norm(mean=100, std=12)
而不是scipy.stats.norm(100, 12)
或scipy.stats.norm(loc=100, scale=12)
,那么它会接受它,但是会默默地丢弃那些额外的关键字参数并给你默认值(0,1) .Scipy.stats是一个很棒的模块 . 只是提供另一种方法,您可以直接使用它来计算
这使用此处找到的公式:http://en.wikipedia.org/wiki/Normal_distribution#Probability_density_function
去测试:
这是more info . 首先,您正在处理冻结分布(在这种情况下冻结意味着其参数设置为特定值) . 要创建冻结分布:
答案中提到的维基百科引用的公式不能用于计算正常概率 . 您必须使用该公式编写数值积分近似函数,以便计算概率 .
该公式计算概率密度函数的值 . 由于正态分布是连续的,因此必须计算积分以获得概率 . 维基百科网站提到了CDF,它没有正常分发的封闭形式 .
我写了这个程序来为你做数学运算 . 只需输入摘要统计信息即可 . 无需提供数组:
One-Sample Z-Test for a Population Proportion:
要为平均值而不是比例执行此操作,请相应地更改z的公式
你可以使用内置于数学库的错误函数,如website所述 .