python趋势检验_基于Python的19种假设检验实现

假设检验(Hypothesis testing),作为统计学的一项重要模块,是用来判断样本与总体的差异是由抽样误差引起还是本质差别造成的统计推断方法。假设检验需要事先对总体参数或分布形式作出某种假设,然后利用样本信息来判断原假设是否成立。一般假设检验分为参数检验和非参数检验,其运用逻辑上的反证法,依据统计上的小概率原理来实现。假设检验分为原假设H0和备择假设H1。

本文将借助Python的Scipy模块,实现目前主流的19种假设检验方法,主要包括:

1.正态分布检验Shapiro-Wilk Test (W检验)

D'Agostino's K2 Test (normal Test)

Anderson-Darling Test

2. 相关性检验Pearson 相关系数

Spearman 等级相关系数

Kendall 等级相关系数

Chi-square Test 卡方检验

3. 参数检验单样本t检验

两样本t检验 (方差齐性使用levene检验)

配对样本t检验

方差分析(Anasis Of Variance, ANOVA)

4. 非参数检验Mann-Whitney U Test (曼惠特尼U检验)

Wilcoxon Signed-Rank Test

Kruskal-Wallis H Test (K-W检验)

Friedman Test (弗里德曼检验)

Kolmogorv-Smirnov Test (K-S检验)

5. 时间序列平稳性检验Augmented Dickey-Fuller Unit Root Test (单位根检验)

Kwiatkowski-Phillips-Schmidt-Shin Test

6. Q-Q图

1 正态分布检验

1.1 Shapiro-Wilk Test (W检验)

Shapiro-Wilk检验,用于检验样本数据是否来自服从正态分布的总体。 在实际应用中,W 检验被认为是一个可靠的正态性检验,但是也有人认为该检验更适用于较小的数据样本(数千个观测值以内)。

使用前提:各样本观察值为独立同分布(iid)的。

原假设H0:样本数据服从正态分布

结果解释:当p值小于某个显著性水平α(如0.05),则认为样本不是来自正态分布的总体,否则承认样本来自正态分布的总体。方法包:from scipy.stats import shapiro

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('不服从正态分布')

# output

stat=0.895, p=0.193

不能拒绝原假设,样本数据服从正态分布

shapiro(np.random.randn(10))

stat, p = shapiro(np.random.randn(10))

print('stat=%.3f, p=%.3f' % (stat, p))

if p > 0.05:

print('不能拒绝原假设,样本数据服从正态分布')

else:

print('不服从正态分布')

# output

stat=0.958, p=0.767

不能拒绝原假设,样本数据服从正态分布

1.2 D'Agostino's K2 Test (normal Test)

D'Agostino's K2检验,用于检验样本数据是否来自服从正态分布的总体。是通过计算样本数据的峰度和偏度,来判断其分布是否偏离正态分布。偏度是对数据分布对称性的测度,衡量数据分布是否左偏或右偏。峰度是对数据分布平峰或尖峰程度的测度,它是一种简单而常用的正态性统计检验量。

使用前提:各样本观察值为独立同分布(iid)的。

原假设H0:样本数据服从正态分布。

结果解释:当p值小于某个显著性水平α(如0.05),则认为样本不是来自正态分布的总体,否则承认样本来自正态分布的总体。方法包:from scipy.stats import normaltest

# 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('不服从正态分布')

# output

stat=3.392, p=0.183

不能拒绝原假设,样本数据服从正态分布

1.3 Anderson-Darling Test

Anderson检验,用于检验样本数据是否服从某一已知分布。该检验修改自一种更复杂的非参数的拟合良好的检验统计(Kolmogorov-Smirnov Test)。SciPy中的anderson()函数实现了Anderson-Darling检验,函数参数为样本数据及要检验的分布名称,默认情况下,为'norm'正态分布,还支持对'expon'指数分布,'logistic'分布,以及'gumbel'耿贝尔分布的检验,它会返回一个包含不同显著性水平下的p值的列表,而不是一个单一的p值,因此这可以更全面地解释结果。

使用前提:各样本观察值为独立同分布的。

原假设H0:样本数据服从某一已知分布。

结果解释:当p值小于某个显著性水平α(如0.05),则认为样本不是来自正态分布的总体,否则承认样本来自正态分布的总体。方法包:from scipy.stats import anderson

# Anderson-Darling Normality Test

from scipy.stats import anderson

data = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]

result = anderson(data)

print('stat=%.3f' % (result.statistic)) # 统计量

print("临界值:",result.critical_values) # P值

print("显著性水平:",result.significance_level) # 显著性水平

for i in range(len(result.critical_values)):

sl, cv = result.significance_level[i], result.critical_values[i]

if result.statistic < result.critical_values[i]: #统计量小于临界值

print('显著性水平为%.2f时,P值为%.1f,不能拒绝原假设,样本数据服从正态分布' % (sl/100, cv))

else:

print('显著性水平为%.2f时,P值为%.1f, 拒绝原假设,样本数据不服从正态分布' % (sl/100, cv))

# output

stat=0.424

临界值: [0.501 0.57 0.684 0.798 0.95 ]

显著性水平: [15. 10. 5. 2.5 1. ]

显著性水平为0.15时,P值为0.5,不能拒绝原假设,样本数据服从正态分布

显著性水平为0.10时,P值为0.6,不能拒绝原假设,样本数据服从正态分布

显著性水平为0.05时,P值为0.7,不能拒绝原假设,样本数据服从正态分布

显著性水平为0.03时,P值为0.8,不能拒绝原假设,样本数据服从正态分布

显著性水平为0.01时,P值为0.9,不能拒绝原假设,样本数据服从正态分布

2 相关性检验

2.1 Pearson 相关系数

Pearson相关系数,用

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值