scipy.stats.

shapiro#

scipy.stats.shapiro(x, *, axis=None, nan_policy='propagate', keepdims=False)[源代码]#

执行 Shapiro-Wilk 正态性检验。

Shapiro-Wilk 检验用于检验数据是否来自正态分布的零假设。

参数:
xarray_like

样本数据数组。必须包含至少三个观测值。

axisint 或 None,默认值:None

如果为 int,则为计算统计量的输入轴。输入的每个轴切片(例如,行)的统计量将显示在输出的相应元素中。如果为 None,则在计算统计量之前将输入展平。

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

定义如何处理输入 NaN。

  • propagate:如果计算统计量的轴切片(例如,行)中存在 NaN,则输出的相应条目将为 NaN。

  • omit:执行计算时将忽略 NaN。如果计算统计量的轴切片中剩余数据不足,则输出的相应条目将为 NaN。

  • raise:如果存在 NaN,则会引发 ValueError

keepdimsbool,默认值:False

如果设置为 True,则缩减的轴将保留在结果中,作为大小为 1 的维度。使用此选项,结果将与输入数组正确广播。

返回:
statisticfloat

检验统计量。

p-valuefloat

假设检验的 p 值。

另请参阅

anderson

用于正态性的 Anderson-Darling 检验

kstest

用于拟合优度的 Kolmogorov-Smirnov 检验。

Shapiro-Wilk 正态性检验

扩展示例

注释

所使用的算法在 [4] 中进行了描述,但未实现所述的删失参数。对于 N > 5000,W 检验统计量是准确的,但 p 值可能不准确。

从 SciPy 1.9 开始,np.matrix 输入(不建议用于新代码)在执行计算之前会转换为 np.ndarray。在这种情况下,输出将是标量或具有适当形状的 np.ndarray,而不是 2D np.matrix。类似地,虽然会忽略掩码数组的掩码元素,但输出将是标量或 np.ndarray,而不是具有 mask=False 的掩码数组。

参考文献

[2]

Shapiro, S. S. & Wilk, M.B, “An analysis of variance test for normality (complete samples)”, Biometrika, 1965, Vol. 52, pp. 591-611, DOI:10.2307/2333709

[3]

Razali, N. M. & Wah, Y. B., “Power comparisons of Shapiro-Wilk, Kolmogorov-Smirnov, Lilliefors and Anderson-Darling tests”, Journal of Statistical Modeling and Analytics, 2011, Vol. 2, pp. 21-33.

[4]

Royston P., “Remark AS R94: A Remark on Algorithm AS 181: The W-test for Normality”, 1995, Applied Statistics, Vol. 44, DOI:10.2307/2986146

示例

>>> import numpy as np
>>> from scipy import stats
>>> rng = np.random.default_rng()
>>> x = stats.norm.rvs(loc=5, scale=3, size=100, random_state=rng)
>>> shapiro_test = stats.shapiro(x)
>>> shapiro_test
ShapiroResult(statistic=0.9813305735588074, pvalue=0.16855233907699585)
>>> shapiro_test.statistic
0.9813305735588074
>>> shapiro_test.pvalue
0.16855233907699585

有关更详细的示例,请参阅 Shapiro-Wilk 正态性检验