scipy.stats.Mixture.

logccdf#

Mixture.logccdf(x, y=None, /, *, method=None)[源代码]#

互补累积分布函数的对数

互补累积分布函数(“CCDF”),表示为 \(G(x)\),是累积分布函数 \(F(x)\) 的补数;即,随机变量 \(X\) 将采用大于 \(x\) 的值的概率

\[ \begin{align}\begin{aligned} G(x) = 1 - F(x) = P(X > x)\\此函数的双参数变体是:\end{aligned}\end{align} \]
\[G(x, y) = 1 - F(x, y) = P(X < x \quad \text{或} \quad X > y)\]

logccdf 计算互补累积分布函数的对数(“log-CCDF”),\(\log(G(x))\)/\(\log(G(x, y))\),但与朴素实现(计算 CDF 并取对数)相比,它在数值上可能更有利。

logccdf 接受 x 作为 \(x\)y 作为 \(y\)

参数:
x, yarray_like

log-CCDF 的参数。x 是必需的;y 是可选的。

method{None, ‘formula’, ‘logexp’, ‘complement’, ‘quadrature’, ‘addition’}

用于评估 log-CCDF 的策略。默认情况下(None),函数的单参数形式在以下选项之间进行选择,并按优先级顺序排列。

  • 'formula':使用 log CCDF 本身的公式

  • 'logexp':评估 CCDF 并取对数

  • 'complement':评估 log-CDF 并取对数补数(参见注释)

  • 'quadrature':数值积分 log-PDF(或者,在离散情况下,对 log-PMF 求对数和)

双参数形式在以下两者之间选择

  • 'formula':使用 log CCDF 本身的公式

  • 'addition':计算 x 处的 log-CDF 和 y 处的 log-CCDF,然后取对数和(参见注释)

并非所有发行版都提供所有 method 选项。如果选择的 method 不可用,则会引发 NotImplementedError

返回:
outarray

在提供的参数处评估的 log-CCDF。

另请参阅

ccdf
logcdf

注释

假设连续概率分布支持 \([l, r]\)。对于 \(x ≥ r\),log-CCDF 返回其最小值 \(\log(0)=-\infty\),对于 \(x ≤ l\),返回其最大值 \(\log(1) = 0\)。对于离散分布,可以做出类似的陈述,但控制最大值的不等式是严格的。

对于具有无限支持的分布,当参数在理论上处于支持范围内时,ccdf 通常会返回值 0;发生这种情况的原因可能是 CCDF 的真实值太小,无法用选定的 dtype 表示。但是,CCDF 的对数通常在更大的域上是有限的(不是 -inf)。同样,logccdf 可能会提供严格的负结果,其参数为 ccdf 将返回 1.0。因此,可能更喜欢使用概率的对数,以避免下溢以及浮点数的其他相关限制。

数字 \(z\) 的“对数补数”在数学上等效于 \(\log(1-\exp(z))\),但在 \(\exp(z)\) 接近 \(0\)\(1\) 时,可以避免精度损失来计算它。类似地,\(w\)\(z\) 的“对数和”在此处用于表示 \(\log(\exp(w)+\exp(z))\),又名 \(\text{LogSumExp}(w, z)\)

参考文献

示例

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

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

在所需的参数处评估 log-CCDF

>>> X.logccdf(0.25)
-1.3862943611198906
>>> np.allclose(X.logccdf(0.), np.log(X.ccdf(0.)))
True