K-S检验可以用来检验一组样本是否符合某种特定的分布(如正态分布),也可以用来检验两组样本分布的匹配程度。
有两组样本 :A:1,2,3,4,5,6,7,8,9,10
B:2,4,6,8,10,11,12,13,14,15
零假设是两种分布相同,拒绝零假设就是两种分布不同
合在一起从小到大排序为:
1,2,2,3,4,4,5,6,6,7,8,8,9,10,10,11,12,13,14
第一个数1,A中小于等于1的值有1个,除以样本数10,得0.1
第二个数2,A中小于等于2的值有2个,除以样本数10,得0.2
......
得到A的经验分布函数:
0.1,0.2,0.2,0.3,0.4,0.4,0.5,0.6,0.6,0.7,0.8,0.8,0.9,1,1,1,1,1,1,1
B的经验分布函数:
0.0,0.1,0.1,0.1,0.2,0.2,0.2,0.3,0.3,0.3,0.4,0.4,0.4,0.5,0.5,0.6,0.7,0.8,0.9,1
D值就是这两个经验分布函数的最大差值,这个例子中是0.5。
在python中,可以用scipy.stats,ks_2samp实现两样本的K-S检验:
import numpy as np
from scipy.stats import ks_2samp
data0 = [1,2,3,4,5,6,7,8,9,10]
data1 = [2,4,6,8,10,11,12,13,14,15]
#scipy.stats.ks_2samp(data1, data2, alternative='two-sided', mode='auto')
#date1,date2是要进行比较的两个数据集,alternative默认是'two-sided',mode默认是'auto'
ks_2samp(data0, data1)
得到 Ks_2sampResult(statistic=0.5, pvalue=0.1108403374132281)
其中statistic就是之前所说的D值,pvalue即p值是用于判断原始假设是否正确的重要证据。这里p值表示如果认为两组样本分布不一致(即拒绝两样品分布相同的零假设)有大约0.11的概率是错的。一般如果它>0.05,就认为不能认为两组样本分布不一致。也就是认为两组样品分布是一致的。