scipy.stats.

kstat#

scipy.stats.kstat(data, n=2, *, axis=None, nan_policy='propagate', keepdims=False)[source]#

返回第 n 個 k 統計量 (目前 1<=n<=4)。

n 個 k 統計量 k_n 是第 n 個累積量 \(\kappa_n\) 的唯一對稱不偏估計量 [1] [2]

參數:
dataarray_like (類陣列)

輸入陣列。

nint, {1, 2, 3, 4}, 選填

預設值為 2。

axisint 或 None,預設值:None

若為 int,則為計算統計量時沿輸入的軸。輸入的每個軸切片(例如,列)的統計量將出現在輸出的對應元素中。若為 None,則會在計算統計量之前將輸入展平。

nan_policy{‘propagate’, ‘omit’, ‘raise’}

定義如何處理輸入的 NaN。

  • propagate:若在計算統計量時沿軸切片(例如,列)中存在 NaN,則輸出的對應條目將為 NaN。

  • omit:執行計算時將省略 NaN。若在計算統計量時沿軸切片中剩餘的資料不足,則輸出的對應條目將為 NaN。

  • raise:若存在 NaN,將引發 ValueError

keepdimsbool,預設值:False

若設定為 True,則縮減的軸將保留在結果中,作為大小為一的維度。使用此選項,結果將針對輸入陣列正確廣播。

返回:
kstatfloat

n 個 k 統計量。

另請參閱

kstatvar

返回 k 統計量變異數的不偏估計量

moment

返回樣本的關於平均值的第 n 個中心動差。

註解

對於樣本大小 \(n\),前幾個 k 統計量由下式給出

\[\begin{split}k_1 &= \frac{S_1}{n}, \\ k_2 &= \frac{nS_2 - S_1^2}{n(n-1)}, \\ k_3 &= \frac{2S_1^3 - 3nS_1S_2 + n^2S_3}{n(n-1)(n-2)}, \\ k_4 &= \frac{-6S_1^4 + 12nS_1^2S_2 - 3n(n-1)S_2^2 - 4n(n+1)S_1S_3 + n^2(n+1)S_4}{n (n-1)(n-2)(n-3)},\end{split}\]

其中

\[S_r \equiv \sum_{i=1}^n X_i^r,\]

\(X_i\) 是第 \(i\) 個資料點。

從 SciPy 1.9 開始,np.matrix 輸入(不建議用於新程式碼)在執行計算之前會轉換為 np.ndarray。在這種情況下,輸出將是純量或具有適當形狀的 np.ndarray,而不是 2D np.matrix。同樣地,雖然遮罩陣列的遮罩元素會被忽略,但輸出將是純量或 np.ndarray,而不是具有 mask=False 的遮罩陣列。

參考文獻

範例

>>> from scipy import stats
>>> from numpy.random import default_rng
>>> rng = default_rng()

隨著樣本大小增加,第 n 個動差和第 n 個 k 統計量會收斂到相同的數字(雖然它們並不完全相同)。在常態分佈的情況下,它們會收斂到零。

>>> for i in range(2,8):
...     x = rng.normal(size=10**i)
...     m, k = stats.moment(x, 3), stats.kstat(x, 3)
...     print(f"{i=}: {m=:.3g}, {k=:.3g}, {(m-k)=:.3g}")
i=2: m=-0.631, k=-0.651, (m-k)=0.0194  # random
i=3: m=0.0282, k=0.0283, (m-k)=-8.49e-05
i=4: m=-0.0454, k=-0.0454, (m-k)=1.36e-05
i=6: m=7.53e-05, k=7.53e-05, (m-k)=-2.26e-09
i=7: m=0.00166, k=0.00166, (m-k)=-4.99e-09
i=8: m=-2.88e-06 k=-2.88e-06, (m-k)=8.63e-13