cramervonmises_2samp#
- scipy.stats.cramervonmises_2samp(x, y, method='auto', *, axis=0, nan_policy='propagate', keepdims=False)[source]#
执行两样本克拉默-冯·米塞斯拟合优度检验。
这是克拉默-冯·米塞斯检验 ([1]) 的两样本版本:对于两个独立样本 \(X_1, ..., X_n\) 和 \(Y_1, ..., Y_m\),原假设是样本来自相同的(未指定的)连续分布。
- 参数:
- xarray_like
随机变量 \(X_i\) 的观测值的 1-D 数组。必须包含至少两个观测值。
- yarray_like
随机变量 \(Y_i\) 的观测值的 1-D 数组。必须包含至少两个观测值。
- method{‘auto’, ‘asymptotic’, ‘exact’}, 可选
用于计算 p 值的方法,请参阅备注以获取详细信息。默认值为“auto”。
- axisint 或无,默认:0
若为 int,则为计算统计数据的输入轴。输入的每个轴切片(例如行)的统计数据将显示在输出的相应元素中。若为
None
,则会在计算统计数据前对输入进行还原。- nan_policy{‘propagate’,‘omit’,‘raise’}
定义如何处理输入 Nan。
propagate
:若在计算统计数据的轴切片(例如行)中存在 NaN,则输出的相应条目将为 NaN。omit
:在执行计算时将省略 NaN。若在计算统计数据的轴切片中保留的数据不足,则输出的相应条目将为 NaN。raise
:若存在 NaN,则会引发ValueError
。
- keepdimsbool,默认:False
如果将其设置为 True,则缩小的轴会作为大小为一的维度保留在结果中。使用此选项,结果将针对输入数组正确广播。
- 返回值:
- res具有以下属性的对象
- statisticfloat
Cramér-von Mises 统计数据。
- pvaluefloat
p 值。
注释
在版本 1.7.0 中添加。
统计数据根据 [2] 中的公式 9 计算。p 值的计算取决于关键字 method
asymptotic
:使用检验统计量的极限分布估算 p 值。exact
:通过枚举检验统计量的所有可能组合计算精确 p 值,请参见 [2]。
若
method='auto'
,则在两个样本均包含 20 个或更少的观察值时使用精确方法,否则使用渐近分布。如果底层分布不是连续的,则 p 值可能是保守的([3] 第 6.2 节)。当对数据进行排名以计算检验统计量时,如果有并列值,则使用中值排名。
从 SciPy 1.9 开始,在执行计算操作之前,
np.matrix
输入(不建议用于新代码)会转换为np.ndarray
。在此情况下,输出将是标量或形状适当的np.ndarray
,而不是 2Dnp.matrix
。类似地,虽然会忽略掩码数组的掩码元素,但输出将是标量或np.ndarray
,而不是带有mask=False
的掩码数组。引用
[3]康诺弗,W.J.,实用非参数统计,1971。
示例
假设我们希望测试由
scipy.stats.norm.rvs
生成的两个样本是否具有相同的分布。我们选择显著性水平 alpha=0.05。>>> import numpy as np >>> from scipy import stats >>> rng = np.random.default_rng() >>> x = stats.norm.rvs(size=100, random_state=rng) >>> y = stats.norm.rvs(size=70, random_state=rng) >>> res = stats.cramervonmises_2samp(x, y) >>> res.statistic, res.pvalue (0.29376470588235293, 0.1412873014573014)
p 值超过我们选择的显著性水平,因此我们不拒绝观测样本从相同分布中抽取的零假设。
对于小样本量,可以计算精确 p 值
>>> x = stats.norm.rvs(size=7, random_state=rng) >>> y = stats.t.rvs(df=2, size=6, random_state=rng) >>> res = stats.cramervonmises_2samp(x, y, method='exact') >>> res.statistic, res.pvalue (0.197802197802198, 0.31643356643356646)
即使样本量小,基于渐近分布的 p 值也是一个很好的近似值。
>>> res = stats.cramervonmises_2samp(x, y, method='asymptotic') >>> res.statistic, res.pvalue (0.197802197802198, 0.2966041181527128)
无论采用何种方法,在这个示例中都不会在所选显著性水平拒绝零假设。