1. 介绍
KS(Kolmogorov-Smirnov)检验是一种非参数检验方法,常用于比较两个样本或者样本与理论分布的拟合程度。通过计算两个累积分布函数的最大差值来进行比较。在统计学中被广泛应用于样本分布的拟合检验、变量的分布检验等领域。
2. KS检验原理
KS检验的原理基于两个假设:原假设H0即两个样本(或样本与理论分布)没有显著差异,备择假设H1即两个样本(或样本与理论分布)有显著差异。
KS统计量为:
KS = max|F1(x) - F2(x)|
其中,F1(x)和F2(x)分别代表两个样本(或样本与理论分布)的累积分布函数,x为随机变量。
当KS值越大,说明两个样本(或样本与理论分布)之间的差异越大,拒绝原假设的可能性越高。
3. Python计算KS的步骤
3.1 导入依赖库
import numpy as np
import scipy.stats as stats
3.2 生成样本数据
为了演示KS检验的计算过程,我们假设有两组样本数据,样本1和样本2。样本1服从正态分布,样本2服从指数分布。
sample1 = np.random.normal(loc=0, scale=1, size=1000)
sample2 = np.random.exponential(scale=1, size=1000)
3.3 计算KS值
使用scipy库中的stats.ks_2samp函数来计算两个样本的KS值。
KS_statistic, p_value = stats.ks_2samp(sample1, sample2)
3.4 结果解释
KS_statistic为计算得到的KS值,p_value为对应的p值。通常情况下,我们会使用p值来判断两个样本是否有显著差异。
当p_value小于预设的显著性水平(通常取0.05),则可以拒绝原假设,认为两个样本有显著差异。反之,无法拒绝原假设。
4. 示例
4.1 示例1:两个正态分布样本的KS检验
# 生成两个正态分布样本
sample1 = np.random.normal(loc=0, scale=1, size=1000)
sample2 = np.random.normal(loc=0, scale=1, size=1000)
# 计算KS值
KS_statistic, p_value = stats.ks_2samp(sample1, sample2)
print("KS统计量:", KS_statistic)
print("p值:", p_value)
上述代码中,我们生成了两个均值为0,标准差为1的正态分布样本,然后计算了它们的KS值,并输出了结果。
4.2 示例2:正态分布样本与指数分布样本的KS检验
# 生成正态分布样本和指数分布样本
sample1 = np.random.normal(loc=0, scale=1, size=1000)
sample2 = np.random.exponential(scale=1, size=1000)
# 计算KS值
KS_statistic, p_value = stats.ks_2samp(sample1, sample2)
print("KS统计量:", KS_statistic)
print("p值:", p_value)
上述代码中,我们生成了一个均值为0,标准差为1的正态分布样本,以及一个参数为1的指数分布样本,然后计算了它们的KS值,并输出了结果。
5. 结论
本文介绍了使用Python计算KS值的方法,通过导入numpy和scipy.stats库,生成样本数据,并使用stats.ks_2samp函数计算KS值。通过分析KS值得出样本之间的差异程度,并使用p值判断差异是否显著。