Python:最常用的的17种假设检验

目录:

  • 1. 正态分布检验
    • 1.1 Shapiro-Wilk Test(W 检验)
    • 1.2 D’Agostino’s  Test
    • 1.3 Anderson-Darling Test
  • 2. 相关性检验
    • 2.1 Pearson相关系数
    • 2.2 Spearman等级相关
    • 2.3 Kendall等级相关
    • 2.4 Chi-Squared Test卡方检验
  • 3. 参数检验
    • 3.1 学生t检验
    • 3.2 配对样本的t检验
    • 3.3 方差分析ANOVA
    • 3.4 重复观测的方差分析
  • 4. 非参数检验
    • 4.1 Mann-Whitney U Test
    • 4.2 Wilcoxon Signed-Rank Test
    • 4.3 Kruskal-Wallis H Test
    • 4.4 Friedman Test
  • 5. 时间序列的平稳性检验
    • 5.1 Augmented Dickey-Fuller Unit Root Test
    • 5.2 Kwiatkowski-Phillips-Schmidt-Shin

选择重要部分列出来:

1.1 Shapiro-Wilk Test(W 检验):

用于检验样本数据是否来自服从正态分布的总体。在实际应用中,W 检验被认为是一个可靠的正态性检验,但是也有人认为该检验更适用于较小的数据样本(数千个观测值以内)。使用前提:各样本观察值为独立同分布的。原假设:样本数据服从正态分布。

# Shapiro-Wilk Normality Test
from scipy.stats import shapiro
data = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
stat, p = shapiro(data)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
    print('不能拒绝原假设,样本数据服从正态分布')
else:
    print('不服从正态分布')

1.2 D’Agostino’s K2 Test

用于检验样本数据是否来自服从正态分布的总体。D’Agostino’s K2 Test是通过计算样本数据的峰度和偏度,来判断其分布是否偏离正态分布。偏度是对数据分布对称性的测度,衡量数据分布是否左偏或右偏。峰度是对数据分布平峰或尖峰程度的测度,它是一种简单而常用的正态性统计检验量。使用前提:各样本观察值为独立同分布的。原假设:样本数据服从正态分布。

# D'Agostino's K^2 Normality Test
from scipy.stats import normaltest
data = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
stat, p = normaltest(data)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
    print('不能拒绝原假设,样本数据服从正态分布')
else:
    print('不服从正态分布')

2.1 Pearson相关系数

用于检验两样本数据之间线性关系的强度。该检验将两个变量之间的协方差进行归一化处理以给出可解释的分数,为一个介于-1到1之间的值,-1表示完全负相关,1表示完全正相关,0表示没有相关性。

使用前提:各样本观察值为独立同分布的;样本数据服从正态分布;每个样本观测值的方差相等。原假设:两变量相互独立

# Pearson's Correlation test
from scipy.stats import pearsonr
data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
data2 = [0.353, 3.517, 0.125, -7.545, -0.555, -1.536, 3.350, -1.578, -3.537, -1.579]
stat, p = pearsonr(data1, data2)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
    print('两变量相互独立')
else:
    print('两变量可能存在线性相关关系')

2.2 Spearman等级相关

用于检验两变量是否具有单调关系。当两变量因非线性关系相关,或者不服从正态分布时,Spearman相关系数可以用来反映变量间的相关性强度。如果存在线性关系,也可以使用这种方法来检验,但是可能导致计算出的相关系数较低。

Spearman不是使用样本数据本身的协方差和标准差来计算相关系数的,而是根据样本值的相对秩次来计算统计量,这是非参数统计中常用的方法。使用前提: 各样本观察值为独立同分布的;各样本数据可定序。原假设:两变量相互独立

# Spearman's Rank Correlation Test
from scipy.stats import spearmanr
data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
data2 = [0.353, 3.517, 0.125, -7.545, -0.555, -1.536, 3.350, -1.578, -3.537, -1.579]
stat, p = spearmanr(data1, data2)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
    print('两变量相互独立')
else:
    print('两变量可能存在相关关系')

3.2 配对样本的t检验

用于检验两配对样本的均值是否存在显著差异。使用前提: 各样本观察值为独立同分布的;样本数据服从正态分布;每个样本观测值的方差相等;样本的数据是一一对应的关系。原假设:各样本集的均值相同

# Paired Student's t-test
from scipy.stats import ttest_rel
data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169]
stat, p = ttest_rel(data1, data2)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
    print('不能拒绝原假设,两样本集分布相同')
else:
    print('拒绝原假设,两样本集分布可能不同')

4.2 Wilcoxon Signed-Rank Test

用于检验两配对样本分布是否相同。样本不独立,因此不能使用Mann-Whitney U检验,而是使用Wilcoxon符号秩检验。这相当于配对样本的学生t检验,但是适用于定序数据,而不是服从正态分布的实测数据。

使用前提:各样本观察值为独立同分布的;各样本集中数据可定序;样本的数据是一一对应的关系。原假设:两样本集分布相同

# Wilcoxon Signed-Rank Test
from scipy.stats import wilcoxon
data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169]
stat, p = wilcoxon(data1, data2)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
    print('不能拒绝原假设,两样本集分布相同')
else:
    print('拒绝原假设,样本集分布可能不同')

4.4 Friedman Test

用于检验两个及以上配对样本的分布是否相同。Friedman Test是重复测量方差分析的非参数版本,需要每组至少有10个样本,当得出显著性结果,表明至少有一个样本与其他样本存在差异。

使用前提:各样本观察值为独立同分布的;各样本集中数据可定序;样本的数据是一一对应的关系。原假设:各样本集的分布相同

# Friedman Test
from scipy.stats import friedmanchisquare
data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169]
data3 = [-0.208, 0.696, 0.928, -1.148, -0.213, 0.229, 0.137, 0.269, -0.870, -1.204]
stat, p = friedmanchisquare(data1, data2, data3)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
    print('不能拒绝原假设,样本集分布相同')
else:
    print('拒绝原假设,样本集分布可能不同')

    特别申明:本文为转载文章,转载自未期 数据管道,不代表贪吃的夜猫子立场,如若转载,请注明出处:https://mp.weixin.qq.com/s/svORY_s-Gk87hpEa7lOsdA

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    xujunzju管理者
    上一篇 2023年9月19日 21:45
    下一篇 2023年12月23日 15:15

    相关推荐

    发表回复

    登录后才能评论
    联系我们
    邮箱:
    xujunzju@gmail.com
    公众号:
    xujunzju6174
    捐赠本站
    捐赠本站
    分享本页
    返回顶部