Python 2.7 Python(Scipy):查找高斯分布的尺度参数(标准偏差)

Python 2.7 Python(Scipy):查找高斯分布的尺度参数(标准偏差),python-2.7,scipy,statistics,Python 2.7,Scipy,Statistics,在概率密度函数(PDF)中计算值的概率密度是很常见的。假设我们有一个平均值为40的高斯分布,标准偏差为5,现在我们想要得到概率密度值32。我们想: In [1]: import scipy.stats as stats In [2]: print stats.norm.pdf(32, loc=40, scale=5) Out [2]: 0.022 -->概率密度为2.2% 但是现在让我们考虑逆问题。我有平均值,概率密度为0.05时的值,我想得到标准偏差(即标度参数) 我可以实现的是一种数值方法

在概率密度函数(PDF)中计算值的概率密度是很常见的。假设我们有一个平均值为40的高斯分布,标准偏差为5,现在我们想要得到概率密度值32。我们想:

In [1]: import scipy.stats as stats
In [2]: print stats.norm.pdf(32, loc=40, scale=5)
Out [2]: 0.022
-->概率密度为2.2%

但是现在让我们考虑逆问题。我有平均值,概率密度为0.05时的值,我想得到标准偏差(即标度参数)

我可以实现的是一种数值方法:创建stats.norm.pdf多次,并逐步增加scale参数,然后使用该方法,结果越接近越好

在我的例子中,我将值30指定为5%标记。所以我需要解这个“方程”:

有一个称为“ppf”的scipy函数,它是PDF的逆函数,因此它将返回特定概率密度的值,但我还没有找到一个函数来返回scale参数

实现迭代将花费太多的时间(包括创建和计算)。我的脚本将是巨大的,所以我应该节省计算时间。lambda函数在这种情况下有帮助吗?我大致知道它在做什么,但到目前为止我还没有用过。有什么想法吗


谢谢大家!

将有两种解决方案,因为正常PDF是围绕平均值对称的。 现在,你有一个单变量方程要解。它没有封闭形式的解决方案,因此您可以使用例如
scipy.optimize.fsolve
来解决它

编辑:关于Lambert W函数的闭式解,请参见@unutbu的答案。

函数,
f


给定
f
x
我们希望解决
这不是编程问题。正如问题中所指出的,反函数原则上可以是蛮力强迫的,但更好的是得到解析逆。因此,我投票决定关闭它,因为它更适合我,我认为可能有一个scipy函数。这就是为什么我在这里问firstppf是CDF的倒数,而不是PDF——你在倒数哪一个?如果是cdf,那么你可以直接从ppf和loc比例变换`(x-loc)/scaleYes中得到答案,正常PDF是对称的,我有两个,下(5%)和上(95%)边界(30和50),所以这不会是问题。我确实偶然发现了scipy.optimize.fsolve,但还不知道如何使用它。但总的来说,这似乎归结为一个最小化问题。虽然scipy中可能有一个预实现的函数,但似乎没有:-/
stats.norm.pdf(30, loc=40, scale=X) = 0.05