当前位置:  开发笔记 > 编程语言 > 正文

标准C或Python库,用于计算正态分布的标准偏差

如何解决《标准C或Python库,用于计算正态分布的标准偏差》经验,为你挑选了2个好方法。

假设我们有正态分布n(x):mean = 0和\ int _ { - a} ^ {a} n(x)= P.

计算此类分布的标准偏差的最简单方法是什么?可能有python或C的标准库,适合该任务吗?



1> Federico A. ..:

如果X是正常的,平均值为0,标准偏差为sigma,则必须保持

P = Prob[ -a <= X <= a ] = Prob[ -a/sigma <= N <= a/sigma ]
  = 2 Prob[ 0 <= N <= a/sigma ]
  = 2 ( Prob[ N <= a/sigma ] - 1/2 )

其中N是正常的,平均值为0,标准差为1

P/2 + 1/2 = Prob[ N <= a/sigma ] = Phi(a/sigma)

其中Phi是具有均值0和stddev 1的正常变量的累积分布函数(cdf).现在我们需要正常cdf(或"百分点函数"),它在Python中是scipy.stats.norm.ppf( ).示例代码:

from scipy.stats import norm
P = 0.3456
a = 3.0

a_sigma = float(norm.ppf(P/2 + 0.5))   # a/sigma
sigma = a/a_sigma   # Here is the standard deviation

例如,我们知道N(0,1)变量落入区间[-1.1]的概率是~0.682(该图中的深蓝色区域).如果设置P = 0.682且a = 1.0,则获得sigma~1.0,这确实是标准偏差.



2> dreeves..:

具有Pr(-a

a/(sqrt(2)*inverseErf(P))

这是你正在寻找的表达式,其中inverseErf是误差函数的反函数(通常称为erf).

对于C,Gnu科学图书馆(GSL)是一个很好的资源.然而它只有erf,而不是inverseErf,所以你必须自己反转它(一个简单的二进制搜索就可以了).或者,这是一个近似erf和inverseErf的好方法:

http://homepages.physik.uni-muenchen.de/~Winitzki/erf-approx.pdf

对于Python,可以erfinv在SciPy库中使用inverseErf ,因此以下给出了标准偏差:

a/(math.sqrt(2)*erfinv(P))

PS:Stackoverflow的URL渲染中存在某种错误,它不允许我链接到上面的GSL:http: //www.gnu.org/software/gsl.当我使用pdf正确的链接制作上面的URL时,它也会出错.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有