median_test#
- scipy.stats.median_test(*samples, ties='below', correction=True, lambda_=1, nan_policy='propagate')[source]#
执行 Mood 中位数检验。
检验两个或多个样本是否来自中位数相同的总体。
设
n = len(samples)
为样本数量。“总体中位数”是指所有数据的总中位数,通过将每个样本中的值分类为高于或低于总体中位数,形成一个列联表。列联表以及 correction 和 lambda_ 会传递给scipy.stats.chi2_contingency
,以计算检验统计量和 p 值。- 参数::
- sample1, sample2, …array_like
样本集。必须至少有两个样本。每个样本必须是一个至少包含一个值的单维序列。样本不需要具有相同的长度。
- tiesstr, 可选
确定在列联表中如何对等于总体中位数的值进行分类。字符串必须是以下之一:
"below": Values equal to the grand median are counted as "below". "above": Values equal to the grand median are counted as "above". "ignore": Values equal to the grand median are not counted.
默认值为“below”。
- correctionbool, 可选
如果为 True,并且 只有两个样本,则在计算与列联表相关的检验统计量时应用 Yates 连续性修正。默认值为 True。
- lambda_float 或 str, 可选
默认情况下,此测试中计算的统计量是皮尔森卡方统计量。 lambda_ 允许使用 Cressie-Read 幂散度族中的统计量。有关详细信息,请参阅
power_divergence
。默认值为 1(皮尔森卡方统计量)。- nan_policy{‘propagate’, ‘raise’, ‘omit’}, 可选
定义如何处理输入中包含 NaN 的情况。‘propagate’ 返回 NaN,‘raise’ 抛出错误,‘omit’ 在忽略 NaN 值的情况下执行计算。默认值为 ‘propagate’。
- 返回::
- resMedianTestResult
包含属性的对象
- statisticfloat
检验统计量。返回的统计量由 lambda_ 决定。默认值为皮尔森卡方统计量。
- pvaluefloat
检验的 p 值。
- medianfloat
总体中位数。
- tablendarray
列联表。表的形状为 (2, n),其中 n 是样本数量。第一行保存高于总体中位数的值的计数,第二行保存低于总体中位数的值的计数。该表允许使用其他方法进行进一步分析,例如
scipy.stats.chi2_contingency
,或者如果只有两个样本,则使用scipy.stats.fisher_exact
,而无需重新计算表格。如果nan_policy
为 “propagate” 并且输入中存在 NaN,则table
的返回值为None
。
另请参阅
kruskal
计算独立样本的 Kruskal-Wallis H 检验。
mannwhitneyu
计算样本 x 和 y 的 Mann-Whitney 秩检验。
备注
在版本 0.15.0 中添加。
参考文献
[1]Mood, A. M., Introduction to the Theory of Statistics. McGraw-Hill (1950), pp. 394-399.
[2]Zar, J. H., Biostatistical Analysis, 5th ed. Prentice Hall (2010). See Sections 8.12 and 10.15.
示例
一位生物学家进行了一项实验,其中有三组植物。第 1 组有 16 株植物,第 2 组有 15 株植物,第 3 组有 17 株植物。每株植物会产生一定数量的种子。每组的种子数量如下:
Group 1: 10 14 14 18 20 22 24 25 31 31 32 39 43 43 48 49 Group 2: 28 30 31 33 34 35 36 40 44 55 57 61 91 92 99 Group 3: 0 3 9 22 23 25 25 33 34 34 40 45 46 48 62 67 84
以下代码将 Mood 中位数检验应用于这些样本。
>>> g1 = [10, 14, 14, 18, 20, 22, 24, 25, 31, 31, 32, 39, 43, 43, 48, 49] >>> g2 = [28, 30, 31, 33, 34, 35, 36, 40, 44, 55, 57, 61, 91, 92, 99] >>> g3 = [0, 3, 9, 22, 23, 25, 25, 33, 34, 34, 40, 45, 46, 48, 62, 67, 84] >>> from scipy.stats import median_test >>> res = median_test(g1, g2, g3)
中位数为
>>> res.median 34.0
列联表为
>>> res.table array([[ 5, 10, 7], [11, 5, 10]])
p 太大,无法得出中位数不相同的结论
>>> res.pvalue 0.12609082774093244
可以通过将
lambda_="log-likelihood"
传递给median_test
来执行“G 检验”。>>> res = median_test(g1, g2, g3, lambda_="log-likelihood") >>> res.pvalue 0.12224779737117837
中位数在数据中出现多次,因此,如果例如使用
ties="above"
,我们将得到不同的结果>>> res = median_test(g1, g2, g3, ties="above") >>> res.pvalue 0.063873276069553273
>>> res.table array([[ 5, 11, 9], [11, 4, 8]])
此示例表明,如果数据集不大且存在等于中位数的值,则 p 值可能会对 ties 的选择很敏感。