cramervonmises_2samp#
- scipy.stats.cramervonmises_2samp(x, y, method='auto', *, axis=0, nan_policy='propagate', keepdims=False)[源代码][源代码]#
执行两样本 Cramér-von Mises 拟合优度检验。
这是Cramér-von Mises检验的两样本版本([1]):对于两个独立样本 \(X_1, ..., X_n\) 和 \(Y_1, ..., Y_m\),零假设是这些样本来自同一个(未指定的)连续分布。
- 参数:
- xarray_like
随机变量 \(X_i\) 的观测值的一维数组。必须包含至少两个观测值。
- yarray_like
一个包含随机变量 \(Y_i\) 观测值的一维数组。必须包含至少两个观测值。
- 方法{‘auto’, ‘asymptotic’, ‘exact’}, 可选
用于计算p值的方法,详见注释。默认值为’auto’。
- 轴int 或 None, 默认值: 0
如果是一个整数,表示输入数据中要计算统计量的轴。输入数据的每个轴切片(例如行)的统计量将出现在输出的相应元素中。如果为
None
,则在计算统计量之前会将输入数据展平。- nan_policy{‘propagate’, ‘omit’, ‘raise’}
定义如何处理输入的 NaN。
propagate
: 如果在计算统计量的轴切片(例如行)中存在 NaN,则输出的相应条目将为 NaN。omit
: 在执行计算时,NaN 将被省略。如果在计算统计量的轴切片中剩余的数据不足,则输出的相应条目将为 NaN。raise
: 如果存在 NaN,将引发ValueError
。
- keepdimsbool, 默认值: False
如果设置为True,被减少的轴将作为尺寸为1的维度保留在结果中。通过此选项,结果将正确地与输入数组进行广播。
- 返回:
- res带有属性的对象
- 统计浮动
Cramér-von Mises 统计量。
- p值浮动
p值。
注释
Added in version 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
,而不是一个 2D 的np.matrix
。同样,虽然掩码数组的掩码元素被忽略,但输出将是一个标量或np.ndarray
,而不是一个mask=False
的掩码数组。参考文献
[1]https://en.wikipedia.org/wiki/Cramer-von_Mises_准则
[3]Conover, 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)
无论采用哪种方法,在这个例子中,人们不会在所选的显著性水平上拒绝原假设。