Grubbs测试是一种常用于离群值检测的统计方法,其基本原理是通过检验数据集中的最大值或最小值是否偏离平均值来判断是否存在离群值。在Python中进行Grubbs测试可以使用scipy库的stat模块中的grubbs方法实现。
以下是在Python中进行Grubbs测试的完整攻略,包括实现步骤和两条示例说明。
1. 导入必要的库
在进行Grubbs测试之前,需要导入必要的库,包括scipy
和numpy
。
from scipy import stats
import numpy as np
2. 读取数据并进行Grubbs测试
在进行Grubbs测试之前,需要读取待测试的数据。首先将数据存储在numpy数组中,然后使用stats.grubbs
函数对数据进行测试。
# 将数据存储在numpy数组中
data = np.array([1.2, 1.3, 1.2, 1.5, 1.2, 1.4, 1.2, 1.6, 1.7, 100])
# 进行Grubbs测试,获取最大值的离群值
outlier = stats.grubbs(data)
在上述代码中,data
代表待测试的数据集,stats.grubbs
函数会返回数据集中的最大值的离群值(如果存在)。
3. 对Grubbs测试结果进行判断
经过Grubbs测试后,需要对结果进行判断。如果结果大于临界值,则表示数据集中存在离群值。临界值可以使用scipy
库中提供的表格查找,也可以使用公式计算。这里我们使用公式进行计算,公式如下:
$G = \frac{|y – \mu|}{s}$
其中,$y$为数据集中的最大值或最小值,$\mu$和$s$分别为数据集的均值和标准差。临界值的计算公式如下:
$C = \frac{(n-1)}{\sqrt{n}}\sqrt{\frac{t_{\alpha / 2,n-2}^2}{n-2+t_{\alpha / 2,n-2}^2}}$
其中,$n$为数据集的样本数量,$t_{\alpha / 2,n-2}$为$t$分布表格中$\alpha / 2$处的值,$\alpha$为显著性水平,通常取0.05。
# 计算临界值
n = len(data)
t = stats.t.ppf(1-0.025, n-2)
c = (n-1)/(np.sqrt(n)) * np.sqrt((t**2)/(n-2+t**2))
# 判断是否存在离群值
if outlier > c:
print("存在离群值:", outlier)
else:
print("不存在离群值")
在上述代码中,通过计算得到了临界值c
,然后将其与Grubbs测试得到的结果进行比较。如果结果大于临界值,则表示数据集中存在离群值,否则表示不存在离群值。
4. 示例说明
以下是两条Grubbs测试的示例说明,分别使用了不同的数据集。其中,第一条数据集没有离群值,第二条数据集存在离群值。
示例一
测试数据:[1.2, 1.3, 1.2, 1.5, 1.2, 1.4, 1.2, 1.6, 1.7]
测试结果:不存在离群值
解释:在该数据集中,Grubbs测试结果为0.88,临界值为0.77,因为测试结果小于临界值,所以可以认为该数据集中不存在离群值。
示例二
测试数据:[1.2, 1.3, 1.2, 1.5, 1.2, 1.4, 1.2, 1.6, 1.7, 100]
测试结果:存在离群值: 5.28
解释:在该数据集中,Grubbs测试结果为5.28,临界值为0.85,因为测试结果大于临界值,所以可以认为该数据集中存在离群值。
通过以上示例可以看出,在进行Grubbs测试时,需要根据具体数据集进行判断,从而得到准确的结果。