SciPy 统计显著性检验
什么是统计显著性检验?
在统计学中,统计显著性意味着产生的结果是有原因的,它不是随机产生的,也不是偶然产生的。
SciPy 为我们提供了一个名为 scipy.stats
的模块,其中包含用于执行统计显著性检验的函数。
以下是一些在执行此类检验时很重要的技术和关键字
统计中的假设
假设是对总体中参数的假设。
零假设
它假设观察结果在统计上不显著。
备择假设
它假设观察结果是由于某些原因造成的。
它是零假设的替代方案。
示例
对于学生的评估,我们将采用
“学生比平均水平差” - 作为零假设,以及
“学生比平均水平好” - 作为备择假设。
单尾检验
当我们的假设只检验值的单边时,它被称为“单尾检验”。
示例
对于零假设
“均值等于 k”,我们可以有备择假设
“均值小于 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
属性
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()
函数。
它返回以下描述
- 观察次数 (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)亲自尝试 »