📜  曼和惠特尼 U 检验

📅  最后修改于: 2022-05-13 01:58:09.005000             🧑  作者: Mango

曼和惠特尼 U 检验

Mann 和 Whitney 的 U 检验或 Wilcoxon 秩和检验 是非参数统计假设检验,用于分析序数数据的两个独立样本之间的差异。在这个测试中,我们提供了两个随机抽取的样本,我们必须验证这两个样本是否来自同一个群体。

Mann-Whitney U 检验的假设:

  • 两组的所有观察都是相互独立的。
  • 因变量的值应该是有序的(意味着它们可以相互比较并按从高到低的顺序排列)。
  • 自变量应该是两个独立的分类组。
  • 对于每个样本,推荐数量在 5 到 20 之间。
  • Mann-Whitney U 检验中的零假设始终相同,即两个样本之间没有显着差异。
  • Mann Whitney 检验适用于不需要正态分布但应具有相同曲线形状的两个分布。例如:如果(样本的)一条曲线的右尾较长,则另一条曲线(或其他样本)也应具有较长的右尾。

使用 Mann-Whitney U 检验的优点是它没有影响,因为它考虑的是中位数而不是平均值,因为存在异常值。

执行 Mann Whitney U 检验的步骤:

  • 收集两个样品和样品 1 和样品 2。
  • 从样本 1 中取出第一个观测值,并将其与样本 2 中的观测值进行比较。计算样本 2 中小于等于它的观测值的数量。例如,样本 2 中的 10 个观测值小于样本 1 和 2 中的第一个观测值,则等于该样本的 U 统计量:10 + 2(1/2) = 11
  • 对样本 1 中的所有观测值重复步骤 2
  • 将第 2 步和第 3 步的所有总数相加。这是我们的排名总和。
  • 现在,我们使用以下公式计算 U 统计量

U_1 = n_{1}n_{2} +\frac{n_{1}\left ( n_{1}+1 \right )}{2} - R_{1}


U_2 = n_{1}n_{2} +\frac{n_{2}\left ( n_{2}+1 \right )}{2} - R_{2}
  • 在哪里:
    • n 1 : 样本 1 中的样本数
    • n 2 : 样本 2 中的样本数
    • R 1 :样本 1 的秩和
    • R 2 : 样本 2 的秩和
  • 现在,我们的检验统计量 (U) 将小于 U 1和 U 2
  • 现在,我们查看表中关于 n 1和 n 2的临界值(取 U 0 )。
    • 如果 U <= U 0 :我们拒绝原假设。
    • 否则,我们不拒绝原假设。

例子:

  • 假设对两批学生进行测试,结果如下:
Batch 1Batch 2
39
47
25
610
28
56
  • 在这里,我们的原假设将是
    • H 0 :批次之间没有显着差异。
    • H A :批次之间存在显着差异。
  • 在这里,我们的显着性水平是 0.05
  • 现在,我们根据批次对样本进行排名,如果两个样本的排名相同,那么我们将平均排名
Batch 1Rank (Batch 1)Batch 2Rank (Batch 2)
21.555.5
21.567.5
3379
44810
55.5911
67.51012
Rank Sum23Rank Sum55
  • 现在,我们计算 U 统计量:

U_1 =  6*6 + 7*6/2 -23 = 34  [特克斯]U_2 = 6*6 +6*7/2 -55 = 2[/特克斯]

  • 所以,我们的测试统计量 U = min ( U 1 , U 2 ) = min (34,2) =2。
  • 现在,我们查看 n 1 = 6 和 n 2 = 6 的 U 统计表以及下表的显着性水平。在这里,我们的临界值是:

曼惠特尼二尾检验

U_0 = 5
  • 这里 U < U 0 ,那么我们拒绝原假设。

执行:

# code for Mann-Whitney U test
from scipy.stats import mannwhitneyu
# Take batch 1 and batch 2 data as per above example
batch_1 =[3, 4, 2, 6, 2, 5]
batch_2 =[9, 7, 5, 10, 8, 6]
  
# perform mann whitney test
stat, p_value = mannwhitneyu(batch_1, batch_2)
print('Statistics=%.2f, p=%.2f' % (stat, p_value))
# Level of significance
alpha = 0.05
# conclusion
if p_value < alpha:
    print('Reject Null Hypothesis (Significant difference between two samples)')
else:
    print('Do not Reject Null Hypothesis (No significant difference between two samples)')

输出:

Statistics=2.00, p=0.01
Reject Null Hypothesis (Significant difference between two samples)