我按照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这样的小值?
因为我是这个领域的新学习者,有人可以给我任何帮助吗?非常感谢你提前。
答案 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