首页 > 技术文章 > 曼-惠特尼U检验以及Python实现

cgmcoding 2020-11-20 09:53 原文

一、曼-惠特尼U检验的含义

曼-惠特尼U检验又称“曼-惠特尼秩和检验”,英文(Mann-Whitney U test),是由H.B.Mann和D.R.Whitney于1947年提出的。它假设两个样本分别来自除了总体均值以外完全相同的两个总体,目的是检验这两个总体的均值是否有显著的差别,简单来说就是AB小样本(样本数不一定相等)分别来自于不同的总体,且AB二者的均值不相等,我们目的是要通过AB去检验一下两个总体的均值是否有显著的差异

二、曼-惠特尼U检验和T检验差别

简单来说,t检验和Mann-Whitney U检验的区别:

  • t检验是参数检验,需要满足正态性和方差齐性
  • Mann-Whitney U检验是非参数检验,没有上面的要求

三、Python实现

1.我们知道这两组的值

#知道这两组的值
import scipy.stats as stats
weight_high=[134,146,104,119,124,161,107,83,113,129,97,123]
weight_low=[70,118,101,85,112,132,94]
stats.mannwhitneyu(weight_high,weight_low,alternative='two-sided')

#MannwhitneyuResult(statistic=62.0,pvalue=0.0993422478534652) 
#大于0.05,也就是接受原假设

2.我们只知道均值,比如说我们分箱时,得到两个不同的badrate,这样我们首先按照badrate生成不同

import pycard as pc
help(pc.generate_samples)
'''
generate_samples(good=None, bad=None, total=None)
    生成仅由 0,1 值组成的样本,以便于进行各种统计检验
    参数:
    -----------
    good: int, 好样本的个数,即 0 的个数
    bad: int, 坏样本的个数, 即 1 的个数
    total: int, 总样本的个数。 good, bad, total 三个参数只能 3选 2个传进来
    返回:
    -----------
    sample: 1darray, 生成的样本
'''
#然后下面的步骤基本一样

下面介绍参数

scipy.stats.mannwhitneyu( x, y, use_continuity = True, alternative = None )
  • x, y:array_like,样本数据数组
  • use_continuity:bool, optional,是否需要0.5的连续性校正,建议小样本需要。默认值为 True 。
  • alternative:{None, ‘less’, ‘two-sided’, ‘greater’}, optional,‘two-sided’ 表示双侧检验,‘greater’ 为备择假设是大于的单边检验,‘less’ 为备择假设是小于的单边检验,None 表示双侧检验 p 值的一半。默认值为 None 。

推荐阅读