scipy.stats.

median_test#

scipy.stats.median_test(*samples, ties='below', correction=True, lambda_=1, nan_policy='propagate')[source]#

执行 Mood 中位数检验。

检验两个或多个样本是否来自具有相同中位数的总体。

n = len(samples) 为样本的数量。 计算所有数据的“总中位数”,并通过将每个样本中的值分类为高于或低于总中位数来形成列联表。列联表以及 correctionlambda_ 传递给 scipy.stats.chi2_contingency 以计算检验统计量和 p 值。

参数:
sample1, sample2, …array_like

样本集。 必须至少有两个样本。 每个样本必须是一维序列,其中至少包含一个值。 样本不需要具有相同的长度。

tiesstr, optional

确定如何在列联表中对等于总中位数的值进行分类。 字符串必须是以下之一

"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, optional

如果为 True 并且只有两个样本,则在计算与列联表关联的检验统计量时,应用 Yates 连续性校正。 默认为 True。

lambda_float or str, optional

默认情况下,此检验中计算的统计量是 Pearson 的卡方统计量。 lambda_ 允许使用来自 Cressie-Read 幂散度族的一个统计量来代替。 有关详细信息,请参阅 power_divergence。 默认为 1(Pearson 的卡方统计量)。

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

定义在输入包含 nan 时如何处理。 ‘propagate’ 返回 nan,‘raise’ 引发错误,‘omit’ 执行计算时忽略 nan 值。 默认值为 ‘propagate’。

返回:
resMedianTestResult

一个包含属性的对象

statisticfloat

检验统计量。 返回的统计量由 lambda_ 确定。 默认值为 Pearson 的卡方统计量。

pvaluefloat

检验的 p 值。

medianfloat

总中位数。

tablendarray

列联表。 表的形状为 (2, n),其中 n 是样本的数量。 第一行包含高于总中位数的值的计数,第二行包含低于总中位数的值的计数。 该表允许使用例如 scipy.stats.chi2_contingencyscipy.stats.fisher_exact (如果存在两个样本)进行进一步分析,而无需重新计算表。 如果 nan_policy 是“propagate”并且输入中存在 nans,则 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 的选择敏感。