关于R中的异常值检测的grubbs测试

时间:2015-11-25 14:27:04

标签: r outliers

我按照How to repeat the Grubbs test and flag the outliers网站上的程序代码,测试了数据向量中的异常值。我的数据向量包含更多44000个项目。

输出如下:

grubbs.result = grubbs.test(test_data)

pvalue = grubbs.result$p.value

grubbs.result

Grubbs test for one outlier
data:  test_data
G = 3.79551464153584561, U = 0.99967764032789053, p-value = 1
alternative hypothesis: highest value -48.70000076 is an outlier

pvalue

[1] 1

grubbs.result$alternative

[1] "highest value -48.70000076 is an outlier"

我的问题是为什么pvalue为1,但程序检测到值-48.70000076是一个异常值??? -48.70000076测试是否检测到grubbs异常值?如果是,那么如何解释pvalue是1,而不是像0.01这样的小值?

因为我是这个领域的新学习者,有人可以给我任何帮助吗?非常感谢你提前。

1 个答案:

答案 0 :(得分:5)

这是CV的更多问题,但我会提供快速统计课程。在寻找异常值时最重要的事情是,除非你有一个有效的,非统计的原因,否则没有数据点,无论与其他数据有多么不同,都是真正的异常值。这些极端数据点是您数据的一部分 - 它们属于。

有些数据确实是异常值,但并不是因为Grubb的测试就是这么说的。例如,你正在接受人们的温度,一个人把他的温度计放在灯泡旁边,他们的温度可能被认为是一个异常值。如果其他人只是喝了一杯冷水并且这是口服测量,那么它们也可能被视为异常值。但如果有人和刚刚喝了一杯冷水的人温度相同,那就不一定有资格作为异常值。我们不会仅仅因为统计原因而说是一个异常值。

除了免责声明之外,我们可以解决这里的核心问题,这是统计数据。该测试说明了替代假设是什么,即最极端的数据点是异常值。在这种情况下,`-48.70000076'恰好比其他任何数据点都远离其他数据点,所以我们的零假设是没有数据点是异常值 - 包括最极端点。如果我们拒绝零假设,我们将得出结论的另一种假设是,至少最极端的点是异常值(统计上)。

在这种情况下,p值表示您没有任何证据表明您的任何数据都是异常值,因为p值为1:

set.seed(123)
test0 <- runif(1000) 
test_data <- test0-max(test0)-48.70000076
grubbs.test(test_data)

#     Grubbs test for one outlier

# data:  test_data
# G = 1.74660, U = 0.99694, p-value = 1
# alternative hypothesis: highest value -48.70000076 is an outlier