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 統計量。
註解
對於樣本大小 \(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
,而不是 2Dnp.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