scipy.stats.Binomial.

logcdf#

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

累积分布函数的对数

累积分布函数 (“CDF”),表示为 \(F(x)\),是随机变量 \(X\) 取小于或等于 \(x\) 的值的概率

\[F(x) = P(X ≤ x)\]

此函数的双参数变体也被定义为随机变量 \(X\)\(x\)\(y\) 之间值的概率。

\[F(x, y) = P(x ≤ X ≤ y)\]

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

logcdf 接受 x 作为 \(x\),接受 y 作为 \(y\)

参数:
x, yarray_like

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

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

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

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

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

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

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

代替 'complement',双参数形式接受

  • 'subtraction':计算每个参数处的 log-CDF,并取对数差(参见注释)

并非所有 method 选项都适用于所有分布。 如果选择的 method 不可用,则会引发 NotImplementedError

返回值:
outarray

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

另请参见

cdf
logccdf

注释

假设一个连续概率分布支持 \([l, r]\)。 log-CDF 评估为其最小值 \(\log(0) = -\infty\) 对于 \(x ≤ l\) 及其最大值 \(\log(1) = 0\) 对于 \(x ≥ r\)。 可以对离散分布进行类似的陈述,但控制最小值的不等式是严格的。

对于具有无限支持的分布,cdf 通常会在参数在理论上位于支持范围内时返回 0 值;发生这种情况是因为 CDF 的真实值太小,无法用所选的 dtype 表示。 然而,logcdf 通常会在更大的域上返回一个有限(非 -inf)结果。 类似地,logcdf 可能会提供一个严格的负数结果,参数的 cdf 将返回 1.0。 因此,可能更喜欢使用概率的对数,以避免浮点数的下溢和相关限制。

数字 \(z\) 的“对数补码”在数学上等同于 \(\log(1-\exp(z))\),但在计算时会避免 \(\exp(z)\) 接近 \(0\)\(1\) 时的精度损失。 类似地,\(w\)\(z\) 的“对数差”一词在此处用于表示 \(\log(\exp(w)-\exp(z))\)

如果 y < x,则 CDF 为负数,因此 log-CCDF 是具有虚部 \(\pi\) 的复数。 为了保持一致性,无论虚部的值如何,此函数的结果在提供 y 时始终具有复数 dtype。

参考

示例

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

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

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

>>> X.logcdf(0.25)
-0.287682072451781
>>> np.allclose(X.logcdf(0.), np.log(X.cdf(0.)))
True