scipy.stats.Normal.

logccdf#

Normal.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。

另請參閱

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