如何在 r 中运行 grubbs 测试器
格拉布斯检验是一种统计检验,可用于识别数据集中是否存在异常值。
要使用此检验,数据集必须具有近似正态分布并包含至少 7 个观测值。
本教程介绍如何在 R 中执行 Grubbs 测试来检测数据集中的异常值。
示例:R 中的格拉布斯检验
要在 R 中执行 Grubbs 测试,我们可以使用Outliers包中的grubbs.test()函数,该函数使用以下语法:
grubbs.test(x,类型 = 10,相反 = FALSE,双面 = FALSE)
金子:
- x:数据值的数值向量
- 类型: 10 = 测试最大值是否为离群值,11 = 测试最小值和最大值是否为离群值,20 = 测试尾部是否有两个离群值
- 相反:逻辑指示您是否要检查的不是与平均值差异最大的值,而是相反的值(最低的,如果最可疑的是最高的,等等)
- 双边:指示是否应将测试视为双边的逻辑值
该测试使用以下两个假设:
H 0 (零假设):数据中没有异常值。
H A (替代假设):数据中存在异常值。
以下示例说明如何执行 Grubbs 检验来确定数据集中的最大值是否为离群值:
#load Outliers package library(Outliers) #createdata data <- c(5, 14, 15, 15, 14, 13, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29, 40) #perform Grubbs' Test to see if '40' is an outlier grubbs.test(data) # Grubbs test for one outlier # #data:data #G = 2.65990, U = 0.55935, p-value = 0.02398 #alternative hypothesis: highest value 40 is an outlier
该检验的检验统计量为G = 2.65990 ,相应的 p 值为p = 0.02398 。由于该值小于 0.05,因此我们将拒绝原假设并得出结论:最大值 40 是异常值。
如果我们想测试最小值“5”是否是异常值,我们可以使用相反=TRUE命令:
#perform Grubbs' Test to see if '5' is an outlier grubbs.test(data, opposite= TRUE ) # Grubbs test for one outlier # #data:data #G = 1.4879, U = 0.8621, p-value = 1 #alternative hypothesis: lowest value 5 is an outlier
检验统计量为G = 1.4879 ,相应的 p 值为p = 1 。由于该值不小于 0.05,因此我们无法拒绝原假设。我们没有足够的证据表明最小值“5”是异常值。
最后,假设我们在数据集的一端有两个较大的值:40 和 42。为了测试这两个值是否为异常值,我们可以执行 Grubbs 测试并指定type=20 :
#create dataset with two large values at one end: 40 and 42 data <- c(5, 14, 15, 15, 14, 13, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29, 40, 42) #perform Grubbs' Test to see if both 40 and 42 are outliers grubbs.test(data, type=20) # Grubbs test for two outliers # #data: data #U = 0.38111, p-value = 0.01195 #alternative hypothesis: highest values 40, 42 are outliers
检验的 p 值为0.01195 。由于该值小于 0.05,因此我们可以拒绝原假设并得出结论:我们有足够的证据表明值 40 和 42 都是异常值。
如何处理异常值
如果 Grubbs 检验识别出数据集中的异常值,您有多种选择:
1. 仔细检查该值是否有拼写错误或数据输入错误。有时,数据集中显示为异常值的值只是个人在数据输入过程中输入的拼写错误。在做出进一步决定之前,返回并验证输入的值是否正确。
2. 为离群值指定一个新值。如果异常值是由拼写错误或数据输入错误造成的,您可以决定为其分配一个新值,例如数据集的平均值或中位数。
3. 删除异常值。如果该值确实是异常值,并且会对您的整体分析产生重大影响,则您可以选择将其删除。