SciPy 统计显着性检验
什么是统计显着性检验?
在统计学中,统计显着性意味着产生的结果是有原因的,它不是随机产生的,也不是偶然产生的。
SciPy 为我们提供了一个名为 scipy.stats
的模块,它具有执行统计显着性检验的功能。
以下是一些在执行此类测试时很重要的技术和关键字:
统计假设
假设是关于总体参数的假设。
零假设
假设观察结果在统计上不显着。
替代假设
假设观察是由于某种原因造成的。
它是零假设的替代品。
示例:
对于我们将采取的学生评估:
"学生比平均水平差" - 作为零假设,并且:
"学生优于平均水平" - 作为替代假设。
单尾检验
当我们的假设只检验值的一侧时,它被称为"单尾检验"。
示例:
对于原假设:
"均值等于k",我们可以有备择假设:
"均值小于k", 或:
"均值大于k"
双尾检验
当我们的假设同时检验两个值时。
示例:
对于原假设:
"均值等于k",我们可以有备择假设:
"均值不等于k"
在这种情况下,均值小于或大于 k,两边都要检查。
Alpha 阿尔法值
Alpha 值是显着性水平。
示例:
要拒绝零假设,数据必须有多接近极端值。
通常取 0.01、0.05 或 0.1。
P值
P 值说明数据实际与极端的接近程度。
比较P值和alpha值以确定统计学意义。
如果 p 值 <= alpha,我们拒绝原假设并说数据具有统计显着性。 否则我们接受原假设。
T-Test
T-tests 用于确定两个变量的均值之间是否存在显着差异。并让我们知道它们是否属于同一分布。
这是一个双尾测试。
函数 ttest_ind()
获取两个大小相同的样本,并生成一个 t-statistic 和 p-value 的元组。
实例
查找给定值 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-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)
结果:
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)亲自试一试 »