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()
函数。
它返回以下描述:
- 观察次数(nobs)
- 最小值和最大值 = minmax
- 平均值
- 方差
- 偏度
- 峰度
实例
显示数组中值的统计描述:
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)