scipy.stats.Normal.

ilogcdf#

Normal.ilogcdf(logp, /, *, method=None)[源代码]#

累积分布函数对数的逆函数。

累积分布函数对数的逆函数(“逆对数CDF”)是指使得累积分布函数对数 \(\log(F(x))\) 的值等于 \(\log(p)\) 的参数 \(x\)

数学上,它等价于 \(F^{-1}(\exp(y))\),其中 \(y = \log(p)\),但与朴素的实现(计算 \(p = \exp(y)\),然后计算 \(F^{-1}(p)\))相比,它可能在数值上更具优势。

ilogcdf 接受 logp,条件是 \(\log(p) ≤ 0\)

参数:
logparray_like

逆对数 CDF 的参数。

method{None, ‘formula’, ‘complement’, ‘inversion’}

用于计算逆对数 CDF 的策略。默认情况下(None),该基础设施会在以下选项中进行选择,按优先级顺序列出。

  • 'formula':使用逆对数 CDF 本身的公式

  • 'complement':在 logp 的对数补数处计算逆对数 CCDF(请参阅注释)

  • 'inversion':数值求解对数 CDF 等于 logp 的参数

并非所有分布都提供所有 method 选项。如果所选的 method 不可用,将引发 NotImplementedError

返回:
outarray

在提供的参数处计算的逆对数 CDF。

另请参阅

icdf
logcdf

注释

假设一个连续概率分布的支持度为 \([l, r]\)。逆对数 CDF 在 \(\log(p) = \log(0) = -\infty\) 时返回其最小值 \(l\),在 \(\log(p) = \log(1) = 0\) 时返回其最大值 \(r\)。由于对数 CDF 的范围为 \([-\infty, 0]\),因此逆对数 CDF 仅定义在负实数上;对于 \(\log(p) > 0\)ilogcdf 返回 nan

有时,需要找到 CDF 的参数,使得结果概率非常接近 01 - 太接近而无法用浮点算术精确表示。但是,在许多情况下,可以使用浮点算术表示此结果概率的对数,在这种情况下,可以使用此函数查找 CDF 的参数,该参数对应的结果概率的对数\(y = \log(p)\)

一个数 \(z\) 的“对数补数”在数学上等价于 \(\log(1-\exp(z))\),但是当 \(\exp(z)\) 接近 \(0\)\(1\) 时,计算它是为了避免精度损失。

示例

使用所需的参数实例化分布

>>> import numpy as np
>>> from scipy import stats
>>> X = stats.Uniform(a=-0.5, b=0.5)

在所需的参数处计算逆对数 CDF

>>> X.ilogcdf(-0.25)
0.2788007830714034
>>> np.allclose(X.ilogcdf(-0.25), X.icdf(np.exp(-0.25)))
True