在统计学中,统计显着性意味着产生的结果背后有原因,它不是随机产生的,也不是偶然产生的。
SciPy 为我们提供了一个名为scipy.stats
,它具有执行统计显着性检验的功能。
以下是执行此类测试时非常重要的一些技术和关键字:
假设是关于总体参数的假设。
它假设观察结果不具有统计显着性。
它假设观察结果是由于某种原因造成的。
它是原假设的替代。
例子:
为了对学生进行评估,我们将采取:
"student is worse than average"- 作为原假设,并且:
"student is better than average"- 作为替代假设。
当我们的假设仅测试值的一侧时,称为"one tailed test"。
例子:
对于原假设:
"the mean is equal to k",我们可以有替代假设:
"the mean is less than k",或者:
"the mean is greater than k"
当我们的假设正在检验两边的值时。
例子:
对于原假设:
"the mean is equal to k",我们可以有替代假设:
"the mean is not equal to k"
在这种情况下,平均值小于或大于 k,并且两侧都需要检查。
Alpha 值是显着性水平。
例子:
数据必须有多接近极端才能拒绝原假设。
通常取0.01、0.05或0.1。
P 值表明数据实际上与极值的接近程度。
比较 P 值和 alpha 值以确定统计显着性。
如果 p 值 <= alpha,我们拒绝零假设并说数据具有统计显着性。否则我们接受原假设。
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 检验用于检查给定值是否服从分布。
该函数将要测试的值和 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()
功能。
它返回以下描述:
显示数组中值的统计描述:
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 comes from a normal distribution".
数据对称性的度量。
对于正态分布,它是 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)亲自试一试 »