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] 的唯一、无偏、对称估计。- 参数:
- data类数组
输入数组。
- 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,则将 reduce 的轴留在结果中,作为大小为一的维度。使用此选项,结果将针对输入数组正确地广播。
- 返回:
- 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