SciPy依赖于Numpy,SciPy包含的功能:最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等,SciPy是高端科学计算工具包,用于数学、科学、工程学等领域。本文主要介绍Python SciPy 统计显著性检验(Statistical Significance Tests)。

1、什么是统计显著性检验?

在统计中,统计意义是指产生的结果背后有原因,不是随机产生或偶然产生的。

SciPy为我们提供了一个名为scipy.stats的模块,该模块具有执行统计显着性检验的功能。

以下是执行此类测试时很重要的一些技术和关键字:

统计假说

假设是关于总体参数的假设。

零假设

它假定该观察值在统计上不显着。

替代假设

它假设这些观察是由于某种原因。

它替代零假设。

例如:

为了评估学生,我们将采取以下措施:

“学生比平均水平差”-作为无效假设,并且:

“学生胜于平均水平”-作为替代假设。

单尾检验

当我们的假设仅测试值的一侧时,称为“单尾检验”。

例如:

对于原假设:

“均值等于k”,我们可以有另一个假设:

“均值小于k”,或:

“平均值大于k”

两尾测试

当我们的假设正在测试两个值时。

例如:

对于原假设:

“均值等于k”,我们可以有另一个假设:

“平均值不等于k”

在这种情况下,平均值小于或大于k,并且需要检查双方。

Alpha值

阿尔法值是有意义的水平。

例如:

要拒绝零假设,数据必须接近极限。

通常取值为0.01、0.05或0.1。

P值

P值表明数据实际上有多接近极限。

比较P值和alpha值以建立统计显着性。

如果p值<= alpha,我们将拒绝原假设,并说该数据具有统计意义。否则,我们接受原假设。

2、T-Test

T检验用于确定两个变量的均值之间是否存在显着差异。 并让我们知道它们是否属于同一分布。

这是一条两尾测试。

函数ttest_ind()接受两个大小相同的样本,并生成t统计量和p值的元组。

例如:

查找给定值v1和v2是否来自同一分布:

import numpy as np
from scipy.stats import ttest_ind

v1 = np.random.normal(size=100)
v2 = np.random.normal(size=100)

res = ttest_ind(v1, v2)

print(res)

 Result:

Ttest_indResult(statistic=0.40833510339674095, pvalue=0.68346891833752133)

如果只想返回p值,请使用pvalue属性:

例如:

import numpy as np
from scipy.stats import ttest_ind

v1 = np.random.normal(size=100)
v2 = np.random.normal(size=100)
res = ttest_ind(v1, v2).pvalue

print(res)

 Result:

  0.68346891833752133

3、KS-Test

KS测试用于检查给定值是否遵循分布。

该函数将要测试的值和CDF作为两个参数。

CDF可以是返回概率的字符串或可调用函数。

它可以用作一尾或二尾测试。

默认情况下,它是两个尾部的。我们可以将参数Alternative传递为两侧,较小或较大之一的字符串。

例如: 

查找给定值是否遵循正态分布:

import numpy as np
from scipy.stats import kstest

v = np.random.normal(size=100)

res = kstest(v, 'norm')

print(res)

Result:

KstestResult(statistic=0.047798701221956841, pvalue=0.97630967161777515)

4、数据的统计描述

为了查看数组中值的摘要,我们可以使用describe()函数。

它返回以下描述:

  1. number of observations (nobs)
  2. minimum and maximum values = minmax
  3. mean
  4. variance
  5. skewness
  6. kurtosis

例如:

显示数组中值的统计描述:

import numpy as np
from scipy.stats import describe

v = np.random.normal(size=100)
res = describe(v)

print(res)

 Result:

  DescribeResult(
    nobs=100,
    minmax=(-2.0991855456740121, 2.1304142707414964),
    mean=0.11503747689121079,
    variance=0.99418092655064605,
    skewness=0.013953400984243667,
    kurtosis=-0.671060517912661
  )

5、正态性检验(Skewness和Kurtosis)

正态性检验基于偏态和峰度。

normaltest()函数为原假设返回p值:

“ x来自正态分布”。

Skewness(偏态):

数据对称性的度量。

对于正态分布,该值为0。

如果为负,则表示数据向左倾斜。

如果为正,则表示数据偏斜正确。

Kurtosis(峰度):

衡量数据是重还是轻尾到正态分布的度量。

正峰度意味着尾巴很重。

负峰度意味着轻微拖尾。

例如:

查找数组中值的偏度和峰度:

import numpy as np
from scipy.stats import skew, kurtosis

v = np.random.normal(size=100)

print(skew(v))
print(kurtosis(v))

 Result:

  0.11168446328610283
  -0.1879320563260931

例如:

查找数据是否来自正态分布:

import numpy as np
from scipy.stats import normaltest

v = np.random.normal(size=100)

print(normaltest(v))

 Result:

NormaltestResult(statistic=4.4783745697002848, pvalue=0.10654505998635538)