scipy.stats.Uniform.

ilogcdf#

Uniform.ilogcdf(logp, /, *, method=None)[source]#

累積分布函數對數的反函數。

累積分布函數對數(“inverse log-CDF”)的反函數是自變數 \(x\),當累積分布函數的對數 \(\log(F(x))\) 的值為 \(\log(p)\) 時。

在數學上,它等價於 \(F^{-1}(\exp(y))\),其中 \(y = \log(p)\),但與直接實作(計算 \(p = \exp(y)\),然後 \(F^{-1}(p)\))相比,它在數值上可能更佳。

ilogcdf 接受 logp,適用於 \(\log(p) ≤ 0\) 的情況。

參數:
logparray_like

inverse log-CDF 的自變數。

method{None, ‘formula’, ‘complement’, ‘inversion’}

用於評估 inverse log-CDF 的策略。 預設情況下(None),基礎架構會從以下選項中選擇,並按優先順序排列。

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

  • 'complement':在 logp 的對數補數處評估 inverse log-CCDF(請參閱「註解」)

  • 'inversion':以數值方式求解 log-CDF 等於 logp 時的自變數

並非所有 method 選項都適用於所有分布。 如果選定的 method 不可用,則會引發 NotImplementedError

回傳值:
outarray

在提供的自變數處評估的 inverse log-CDF。

另請參閱

icdf
logcdf

註解

假設一個連續機率分布具有 support \([l, r]\)。 inverse log-CDF 在 \(\log(p) = \log(0) = -\infty\) 時傳回其最小值 \(l\),在 \(\log(p) = \log(1) = 0\) 時傳回其最大值 \(r\)。 由於 log-CDF 的範圍為 \([-\infty, 0]\),因此 inverse log-CDF 僅在負實數上定義;對於 \(\log(p) > 0\)ilogcdf 會傳回 nan

有時,需要找到 CDF 的自變數,使其產生的機率非常接近 01,以至於太接近而無法用浮點運算準確表示。 然而,在許多情況下,此結果機率的對數可以用浮點運算表示,在這種情況下,可以使用此函數來找到 CDF 的自變數,使其結果機率的對數\(y = \log(p)\)

數字 \(z\) 的「對數補數」在數學上等價於 \(\log(1-\exp(z))\),但其計算目的是為了避免在 \(\exp(z)\) 接近 \(0\)\(1\) 時損失精確度。

範例

使用所需的參數實例化一個分布

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

在所需的自變數處評估 inverse log-CDF

>>> X.ilogcdf(-0.25)
0.2788007830714034
>>> np.allclose(X.ilogcdf(-0.25), X.icdf(np.exp(-0.25)))
True