logccdf#
- Mixture.logccdf(x, y=None, /, *, method=None)[source]#
互補累積分布函數的對數
互補累積分布函數(“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]\)。log-CCDF 對於 \(x ≥ r\) 返回其最小值 \(\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