对于任何一个频率派的数据科学家而言,日常做数据分析难免还是会用到一些假设检验方法做一个数据探索和相关性、差异性分析,并且这也是做后续统计模型(机器学习类预测模型可以略过)预测的第一步。
这篇博文目的就是整理基本的假设检验方法、适用条件和调用Python(主要是scipy
模块)的哪些方法。
正态性检验
这个是很多统计建模的第一步,例如,普通线性回归就对残差有正态性要求。
K-S检验
特点是比较严格,基于的原理是CDF,理论上可以检验任何分布。
scipy.stats.kstest(a_vector_like_data, 'norm')
Shapiro检验
专门用来检验正态分布。
scipy.stats.shapiro(a_vector_like_data)
Normal检验
原理是基于数据的skewness和kurtosis,如不明白这两个意思,自行百度。
scipy.stats.normaltest(a_vector_like_data)
Anderson检验
是ks检验的正态检验加强版。
scipy.stats.anderson(a_vector_like_data, dist='norm')
检验方差是否齐
Bartlett检验
对数据有正态性要求
scipy.stats.bartlett(a, b)
Levene检验
在数据非正态的情况下,精度比Bartlett检验好,可调中间值的度量
scipy.stats.levene(a, b, center = 'trimmed')
Fligner-Killeen检验
非参检验,不依赖于分布
scipy.stats.fligner(a, b, center='mean')
两组数之间的比较
参数方法
# 独立两样本t检验
scipy.stats.ttest_ind(a, b, equal_var=True, nan_policy='omit')
# 成对两样本t检验
scipy.stats.ttest_rel(a, b, equal_var=True, nan_policy='omit')
# 通过基本统计量来做独立两样本检验
scipy.stats.ttest_ind_from_stats(20.06, 2.902, 50, 13.26, 1.977, 50, equal_var=False)
非参数方法
# wilcox秩序和检验,n < 20时独立样本效果比较好
scipy.stats.ranksums(a, b)
# Mann-Whitney U检验, n > 20时独立样本,比wilcox秩序和检验更稳健
scipy.stats.mannwhitneyu(a, b)
# Wilcox检验,成对数据
scipy.stats.wilcoxn(a, b, zero_method='wilcox', correction=False)
多组数之间的比较
参数方法(1-way anova)
scipy.stats.f_oneway(a, b, c, ...)
非参数方法(Kruskal-Wallis H方法)
scipy.stats.kruskal(a, b, c,..., nan_policy='omit')
(附送)相关性
相关性可以做简单的特征工程(特征筛选)来做监督学习以及作为相似度(1 - 距离)来做非监督学习。
参数(Pearson相关系数)
scipy.stats.pearsonr(a, b)
非参数(Spearman相关系数)
scipy.stats.spearmanr(a, b)
二元值和连续值之间的关系(Point-biserial相关系数)
scipy.stats.pointbiserialr(a, b)
分参数的Kendall's Tau
理论上是检验两个变量是否具有单调关系
scipy,stats.kendalltau(a, b, initial_lexsort=None, nan_policy='omit')