SciPy 统计显著性检验

什么是统计显着性检验(Statistical Significance Test)?

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

SciPy 提供名为 scipy.stats 的模块,其中包含用于执行统计显著性检验的函数。

执行此类测试时,以下技术和关键词很重要:

统计学中的假设

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

零假设(Null Hypothesis)

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

替代假设(Alternate Hypothesis)

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

它是零假设的替代。

例如:

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

“学生比平均水平差” - 作为零假设,以及:

“学生比平均水平好” - 作为替代假设。

单侧检验

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

例如:

对于原假设:

“平均值等于 k”,我们可以有替代假设:

“平均值小于 k”,或:

“平均值大于 k”

双侧检验

当我们的假设测试值的两侧时。

例如:

对于零假设:

“平均值等于 k”,我们可以有替代假设:

“平均值不等于 k”

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

Alpha 值

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 作为 "two-sided"、"less" 或 "greater" 的字符串传递。

实例

判断给定的值是否遵循正态分布:

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. 最小值和最大值 = minmax
  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 来自正态分布”。

偏度:

数据对称性的度量。

对于正态分布,它是 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)