SciPy 统计显著性检验
什么是统计显著性检验?
在统计学中,统计显著性意味着产生的结果是有原因的,不是随机或偶然产生的。
SciPy 提供了一个名为 scipy.stats
的模块,其中包含执行统计显著性检验的函数。
以下是执行此类测试时一些重要的技术和关键词:
统计假设
假设是对总体参数的一种推测。
零假设(Null Hypothesis)
它假设观察结果不具有统计显著性。
备择假设(Alternate Hypothesis)
它假设观察结果是由于某些原因造成的。
它是零假设的替代。
示例
对于学生的评估,我们会这样考虑:
“学生比平均水平差”——作为零假设,和
“学生比平均水平好”——作为备择假设。
单尾检验(One tailed test)
当我们的假设只检验数值的一侧时,称为“单尾检验”。
示例
对于零假设
“均值等于 k”,我们可以有备择假设
“均值小于 k”,或者
“均值大于 k”
双尾检验(Two tailed test)
当我们的假设检验数值的两侧时。
示例
对于零假设
“均值等于 k”,我们可以有备择假设
“均值不等于 k”
在这种情况下,均值小于或大于 k,并且需要检查两侧。
Alpha 值(Alpha value)
Alpha 值是显著性水平。
示例
在拒绝零假设之前,数据必须接近什么程度的极端值。
通常取值为 0.01、0.05 或 0.1。
P 值(P value)
P 值告诉我们数据实际接近极端值的程度。
P 值和 Alpha 值进行比较,以确定统计显著性。
如果 p 值 <= alpha,我们拒绝零假设,并认为数据在统计上是显著的。否则,我们接受零假设。
T 检验(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)
结果
Ttest_indResult(statistic=0.40833510339674095, pvalue=0.68346891833752133)自己动手试一试 »
如果您只想返回 p 值,请使用 pvalue
属性
KS 检验(KS-Test)
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 来自正态分布”.
偏度(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))
结果
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)自己动手试一试 »