scipy.stats.

kstat#

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

返回第 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,则缩减的轴将保留在结果中,作为大小为 1 的维度。使用此选项,结果将正确地广播到输入数组。

返回:
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