SciPy 统计显着性检验


什么是统计显着性检验?

在统计学中,统计显着性意味着产生的结果背后有原因,它不是随机产生的,也不是偶然产生的。

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

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


统计学中的假设

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


零假设

它假设观察结果不具有统计显着性。


替代假设

它假设观察结果是由于某种原因造成的。

它是原假设的替代。

例子:

为了对学生进行评估,我们将采取:

"student is worse than average"- 作为原假设,并且:

"student is better than average"- 作为替代假设。


一尾测试

当我们的假设仅测试值的一侧时,称为"one tailed test"。

例子:

对于原假设:

"the mean is equal to k",我们可以有替代假设:

"the mean is less than k",或者:

"the mean is greater than k"


二尾检验

当我们的假设正在检验两边的值时。

例子:

对于原假设:

"the mean is equal to k",我们可以有替代假设:

"the mean is not equal to k"

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


阿尔法值

Alpha 值是显着性水平。

例子:

数据必须有多接近极端才能拒绝原假设。

通常取0.01、0.05或0.1。


P值

P 值表明数据实际上与极值的接近程度。

比较 P 值和 alpha 值以确定统计显着性。

如果 p 值 <= alpha,我们拒绝零假设并说数据具有统计显着性。否则我们接受原假设。



T检验

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)

结果:


  Ttest_indResult(statistic=0.40833510339674095, pvalue=0.68346891833752133)

亲自试一试 »

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

示例

...
res = ttest_ind(v1, v2).pvalue

print(res)

结果:


  0.68346891833752133

亲自试一试 »

KS-测试

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)

结果:


  KstestResult(statistic=0.047798701221956841, pvalue=0.97630967161777515)

亲自试一试 »

数据统计描述

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

它返回以下描述:

  1. 观测值数量(nobs)
  2. 最小值和最大值 = 最小值最大值
  3. 意思是
  4. 方差
  5. 偏度
  6. 峰度

示例

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

import numpy as np
from scipy.stats import describe

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

print(res)

结果:


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

亲自试一试 »

正态性检验(偏度和峰度)

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

这个normaltest()函数返回原假设的 p 值:

"x comes from a normal distribution".


偏度:

数据对称性的度量。

对于正态分布,它是 0。

如果为负数,则表示数据左偏。

如果为正,则意味着数据向右倾斜。


峰度:

衡量数据是否重尾服从正态分布的度量。

正峰度意味着重尾。

负峰度意味着轻尾。


示例

求数组中值的偏度和峰度:

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

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

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

结果:


  0.11168446328610283
  -0.1879320563260931

亲自试一试 »

示例

判断数据是否服从正态分布:

import numpy as np
from scipy.stats import normaltest

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

print(normaltest(v))

结果:


  NormaltestResult(statistic=4.4783745697002848, pvalue=0.10654505998635538)

亲自试一试 »

通过练习测试一下

练习:

插入缺少的方法来测量数据中的 summetry:

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

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

print((v))

开始练习