logccdf#
- Uniform.logccdf(x, y=None, /, *, method=None)[源代码]#
互补累积分布函数的对数
互补累积分布函数(“CCDF”),表示为 \(G(x)\),是累积分布函数 \(F(x)\) 的补集;即随机变量 \(X\) 取大于 \(x\) 的值的概率
\[G(x) = 1 - F(x) = P(X > x)\]此函数的双参数变体是
\[G(x, y) = 1 - F(x, y) = P(X < x \quad \text{or} \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 进行对数积分
双参数形式在以下选项之间进行选择
'formula'
:使用 log CCDF 本身的公式'addition'
:计算 x 处的 log-CDF 和 y 处的 log-CCDF,然后取对数和(参见注释)
并非所有分布都提供所有 method 选项。如果所选的 method 不可用,将引发
NotImplementedError
。
- 返回:
- outarray
在提供的参数处评估的 log-CCDF。
注释
假设连续概率分布的支持为 \([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)\)。
参考
[1]累积分布函数,Wikipedia,https://en.wikipedia.org/wiki/Cumulative_distribution_function#Derived_functions
示例
使用所需的参数实例化分布
>>> 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