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 统计量。
注释
对于样本大小 \(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