2024-04-25 13:42:48 发布
网友
假设我们有正态分布n(x):平均值=0和{-a}^{a}n(x)=p
计算这种分布的标准差最简单的方法是什么?可能有适合于python或C的标准库吗?
Pr(-a<;X<;a)=p的平均零高斯分布的标准差是
a/(sqrt(2)*inverseErf(P))
这是您要查找的表达式,其中inverse erf是错误函数(通常称为erf)的逆函数。
对于C来说,Gnu科学图书馆(GSL)是一个很好的资源。但是它只有erf,而不是inverseErf,所以您必须自己反转它(简单的二进制搜索就可以做到这一点)。或者,这里有一个很好的方法来近似erf和inverseErf:
http://homepages.physik.uni-muenchen.de/~Winitzki/erf-approx.pdf
对于Python,inverseErf作为erfinv在SciPy库中可用,因此下面给出了标准偏差:
erfinv
a/(math.sqrt(2)*erfinv(P))
注意:Stackoverflow的URL呈现中存在某种错误,它不允许我链接到上面的GSL:http://www.gnu.org/software/gsl。 当我把上面带有pdf的URL变成一个正确的链接时,它也会呈现错误。
如果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是正态变量的累积分布函数(cdf),均值为0,stddev为1。现在我们需要逆正态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(在this figure中的深蓝色区域)。如果设置P=0.682和a=1.0,则得到sigma~1.0,这确实是标准差。
SciPy有一个stats子包。
Pr(-a<;X<;a)=p的平均零高斯分布的标准差是
这是您要查找的表达式,其中inverse erf是错误函数(通常称为erf)的逆函数。
对于C来说,Gnu科学图书馆(GSL)是一个很好的资源。但是它只有erf,而不是inverseErf,所以您必须自己反转它(简单的二进制搜索就可以做到这一点)。或者,这里有一个很好的方法来近似erf和inverseErf:
http://homepages.physik.uni-muenchen.de/~Winitzki/erf-approx.pdf
对于Python,inverseErf作为
erfinv
在SciPy库中可用,因此下面给出了标准偏差:注意:Stackoverflow的URL呈现中存在某种错误,它不允许我链接到上面的GSL:http://www.gnu.org/software/gsl。 当我把上面带有pdf的URL变成一个正确的链接时,它也会呈现错误。
如果X是正态的,平均值为0,标准差为sigma,则它必须保持
其中N为正态分布,平均值为0,标准差为1。因此
其中Phi是正态变量的累积分布函数(cdf),均值为0,stddev为1。现在我们需要逆正态cdf(或“百分点函数”),在Python中是scipy.stats.norm.ppf()。示例代码:
例如,我们知道N(0,1)变量在区间[-1.1]内下降的概率是~0.682(在this figure中的深蓝色区域)。如果设置P=0.682和a=1.0,则得到sigma~1.0,这确实是标准差。
SciPy有一个stats子包。
相关问题 更多 >
编程相关推荐