scipy.stats.levy_stable#

scipy.stats.levy_stable = <scipy.stats._levy_stable.levy_stable_gen object>[原始碼]#

Levy-stable 連續隨機變數。

作為 rv_continuous 類別的一個實例,levy_stable 物件繼承了它的一系列通用方法(完整列表請見下方),並以針對此特定分佈的詳細資訊來完善它們。

另請參閱

levylevy_lcauchynorm

筆記

levy_stable 的分佈具有特徵函數

\[\varphi(t, \alpha, \beta, c, \mu) = e^{it\mu -|ct|^{\alpha}(1-i\beta\operatorname{sign}(t)\Phi(\alpha, t))}\]

其中支援兩種不同的參數化方式。第一種 \(S_1\)

\[\begin{split}\Phi = \begin{cases} \tan \left({\frac {\pi \alpha }{2}}\right)&\alpha \neq 1\\ -{\frac {2}{\pi }}\log |t|&\alpha =1 \end{cases}\end{split}\]

第二種 \(S_0\)

\[\begin{split}\Phi = \begin{cases} -\tan \left({\frac {\pi \alpha }{2}}\right)(|ct|^{1-\alpha}-1) &\alpha \neq 1\\ -{\frac {2}{\pi }}\log |ct|&\alpha =1 \end{cases}\end{split}\]

levy_stable 的機率密度函數為

\[f(x) = \frac{1}{2\pi}\int_{-\infty}^\infty \varphi(t)e^{-ixt}\,dt\]

其中 \(-\infty < t < \infty\)。此積分沒有已知的封閉形式。

levy_stable 推廣了幾種分佈。在可能的情況下,應改用它們。特別是,當形狀參數採用下表中的值時,應使用對應的等效分佈。

alpha

beta

等效

1/2

-1

levy_l

1/2

1

levy

1

0

cauchy

2

任何值

norm (使用 scale=sqrt(2))

pdf 的評估預設使用 Nolan 的分段積分方法和 Zolotarev \(M\) 參數化。也可以選擇使用特徵函數的標準參數化的直接數值積分,或透過取得特徵函數的 FFT 來評估。

預設方法可以透過將類別變數 levy_stable.pdf_default_method 設定為以下其中之一來變更:'piecewise'(用於 Nolan 的方法)、'dni'(用於直接數值積分)或 'fft-simpson'(用於基於 FFT 的方法)。為了向後相容性,方法 'best' 和 'zolotarev' 等同於 'piecewise',而方法 'quadrature' 等同於 'dni'。

參數化可以透過將類別變數 levy_stable.parameterization 設定為 'S0' 或 'S1' 來變更。預設值為 'S1'。

為了提高分段和直接數值積分的效能,可以指定 levy_stable.quad_eps(預設為 1.2e-14)。這既用作直接數值積分的絕對和相對求積容差,也用作分段方法的相對求積容差。也可以指定 levy_stable.piecewise_x_tol_near_zeta(預設為 0.005),用於設定 x 在多接近 zeta 時才被視為與 x [NO] 相同。確切的檢查是 abs(x0 - zeta) < piecewise_x_tol_near_zeta*alpha**(1/alpha)。也可以指定 levy_stable.piecewise_alpha_tol_near_one(預設為 0.005),用於設定 alpha 在多接近 1 時才被視為等於 1。

為了提高 FFT 計算的準確性,可以指定 levy_stable.pdf_fft_grid_spacing(預設為 0.001)和 pdf_fft_n_points_two_power(預設為 None,表示將計算一個足以涵蓋輸入範圍的值)。

透過設定 pdf_fft_interpolation_degree(預設為 3,用於 spline 階數)和 pdf_fft_interpolation_level(用於決定在使用 Newton-Cotes 公式逼近特徵函數時要使用的點數,被認為是實驗性的)可以進一步控制 FFT 計算。

cdf 的評估預設使用 Nolan 的分段積分方法和 Zolotarev \(S_0\) 參數化。也可以選擇透過積分由 FFT 方法計算出的 pdf 的內插 spline 來評估。影響 FFT 計算的設定與 pdf 計算相同。預設 cdf 方法可以透過將 levy_stable.cdf_default_method 設定為 'piecewise' 或 'fft-simpson' 來變更。對於 cdf 計算,Zolotarev 方法在準確性方面更勝一籌,因此預設情況下停用 FFT。

擬合估計使用 [MC] 中的分位數估計方法。fit 方法中參數的 MLE 估計最初使用此分位數估計。請注意,如果使用 FFT 進行 pdf 計算,MLE 並非總是收斂;如果 alpha <= 1,則會發生這種情況,其中 FFT 方法無法提供良好的近似值。

如果未另行設定有效的預設方法,則屬性 levy_stable.pdf_fft_min_points_threshold 的任何非遺失值都將 levy_stable.pdf_default_method 設定為 'fft-simpson'。

警告

對於 pdf 計算,FFT 計算被認為是實驗性的。

對於 cdf 計算,FFT 計算被認為是實驗性的。請改用 Zolotarev 的方法(預設)。

上面的機率密度以「標準化」形式定義。若要移動和/或縮放分佈,請使用 locscale 參數。一般來說,levy_stable.pdf(x, alpha, beta, loc, scale)levy_stable.pdf(y, alpha, beta) / scale 完全等效,其中 y = (x - loc) / scale,但在 S1 參數化中,如果 alpha == 1 則例外。在這種情況下,levy_stable.pdf(x, alpha, beta, loc, scale)levy_stable.pdf(y, alpha, beta) / scale 完全等效,其中 y = (x - loc - 2 * beta * scale * np.log(scale) / np.pi) / scale。有關更多資訊,請參閱 [NO2] 定義 1.8。請注意,移動分佈的位置並不會使其成為「非中心」分佈。

參考文獻

[MC]

McCulloch, J., 1986. Stable distribution parameters 的簡單一致估計器。統計通訊 - 模擬與計算 15, 1109-1136。

[WZ]

Wang, Li 和 Zhang, Ji-Hong, 2008. 基於 Simpson 規則的 FFT 方法,用於計算穩定分佈的密度。

[NO]

Nolan, J., 1997. 穩定密度和分佈函數的數值計算。

[NO2]

Nolan, J., 2018. 穩定分佈:重尾數據模型。

[HO]

Hopcraft, K. I., Jakeman, E., Tanner, R. M. J., 1999. 步數波動和多尺度行為的 Lévy 隨機遊走。

範例

>>> import numpy as np
>>> from scipy.stats import levy_stable
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(1, 1)

計算前四個動差

>>> alpha, beta = 1.8, -0.5
>>> mean, var, skew, kurt = levy_stable.stats(alpha, beta, moments='mvsk')

顯示機率密度函數 (pdf)

>>> x = np.linspace(levy_stable.ppf(0.01, alpha, beta),
...                 levy_stable.ppf(0.99, alpha, beta), 100)
>>> ax.plot(x, levy_stable.pdf(x, alpha, beta),
...        'r-', lw=5, alpha=0.6, label='levy_stable pdf')

或者,可以呼叫分佈物件(作為函數)來修正形狀、位置和尺度參數。這會傳回一個「凍結的」RV 物件,其中保存了給定的固定參數。

凍結分佈並顯示凍結的 pdf

>>> rv = levy_stable(alpha, beta)
>>> ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')

檢查 cdfppf 的準確性

>>> vals = levy_stable.ppf([0.001, 0.5, 0.999], alpha, beta)
>>> np.allclose([0.001, 0.5, 0.999], levy_stable.cdf(vals, alpha, beta))
True

產生隨機數字

>>> r = levy_stable.rvs(alpha, beta, size=1000)

並比較直方圖

>>> ax.hist(r, density=True, bins='auto', histtype='stepfilled', alpha=0.2)
>>> ax.set_xlim([x[0], x[-1]])
>>> ax.legend(loc='best', frameon=False)
>>> plt.show()
../../_images/scipy-stats-levy_stable-1.png

方法

rvs(alpha, beta, loc=0, scale=1, size=1, random_state=None)

隨機變量。

pdf(x, alpha, beta, loc=0, scale=1)

機率密度函數。

logpdf(x, alpha, beta, loc=0, scale=1)

機率密度函數的對數。

cdf(x, alpha, beta, loc=0, scale=1)

累積分布函數。

logcdf(x, alpha, beta, loc=0, scale=1)

累積分布函數的對數。

sf(x, alpha, beta, loc=0, scale=1)

生存函數(也定義為 1 - cdf,但 sf 有時更準確)。

logsf(x, alpha, beta, loc=0, scale=1)

生存函數的對數。

ppf(q, alpha, beta, loc=0, scale=1)

百分點函數(cdf 的反函數 — 百分位數)。

isf(q, alpha, beta, loc=0, scale=1)

反生存函數(sf 的反函數)。

moment(order, alpha, beta, loc=0, scale=1)

指定階數的非中心動差。

stats(alpha, beta, loc=0, scale=1, moments=’mv’)

平均值 ('m')、變異數 ('v')、偏度 ('s') 和/或峰度 ('k')。

entropy(alpha, beta, loc=0, scale=1)

RV 的(微分)熵。

fit(data)

通用資料的參數估計。有關關鍵字引數的詳細文件,請參閱 scipy.stats.rv_continuous.fit

expect(func, args=(alpha, beta), loc=0, scale=1, lb=None, ub=None, conditional=False, **kwds)

函數(一個引數)相對於分佈的期望值。

median(alpha, beta, loc=0, scale=1)

分佈的中位數。

mean(alpha, beta, loc=0, scale=1)

分佈的平均值。

var(alpha, beta, loc=0, scale=1)

分佈的變異數。

std(alpha, beta, loc=0, scale=1)

分佈的標準差。

interval(confidence, alpha, beta, loc=0, scale=1)

中位數周圍具有相等面積的信賴區間。