scipy.stats.levy_stable#
- scipy.stats.levy_stable = <scipy.stats._levy_stable.levy_stable_gen object>[原始碼]#
Levy-stable 連續隨機變數。
作為
rv_continuous
類別的一個實例,levy_stable
物件繼承了它的一系列通用方法(完整列表請見下方),並以針對此特定分佈的詳細資訊來完善它們。筆記
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
1/2
1
1
0
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 的方法(預設)。
上面的機率密度以「標準化」形式定義。若要移動和/或縮放分佈,請使用
loc
和scale
參數。一般來說,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')
檢查
cdf
和ppf
的準確性>>> 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()
方法
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)
中位數周圍具有相等面積的信賴區間。