我有一个带有一串值的数据框,我想要识别某些异常读数。我想在我的数据框中创建第三列,将某些读数标记为“异常”,其余为“正常”。查看我的数据图,当我得到这些奇怪的下降时,通过眼睛看起来非常明显,但我无法弄清楚如何让R识别奇数读数,因为基线平均值随时间变化。我能想出的最好的东西是用来将某些东西归类为“异常”的三条规则。
1:从第二个值开始,如果第二个值在第一个值的近距离范围内,则在第三列中标记为“N”表示正常。依此类推其他数据集。
2:如果第二个值表示从第一个值开始大幅增加或减少,则在第三列中将异常标记为“A”。
3:如果某个值标记为“A”,如果它在前一个异常值的小范围内,则以下值也将标记为“A”。如果以下值表示从先前的异常值开始大幅增加或减少,则将其标记为“N”。
这是我能提出的最好的逻辑,但是如果你能想出更好的主意,那么看下面的数据就是我的全部。
给定一个虚拟数据集:
SampleNum<-1:50
Value <- c(1, 2, 2, 2, 23, 22, 2, 3, 2, -23, -23, 4, 4, 5, 5, 25, 24,
6, 7, 6, 35, 38, 20, 21, 22, -22, 2, 2, 6, 7, 7, 6, 30, 31,
6, 6, 6, 5, 22, 22, 4, 5, 4, 5, 30, 39, 18, 18, 19, 18)
DF<-data.frame(SampleNum,Value)
这是我可能会看到最终数据的方式,第三列标识哪些值是异常的。
SampleNum Value Name
1 1 N
2 2 N
3 2 N
4 2 N
5 23 A
6 22 A
7 2 N
8 3 N
9 2 N
10 -23 A
11 -23 A
12 4 N
13 4 N
14 5 N
15 5 N
16 25 A
17 24 A
18 6 N
19 7 N
20 6 N
21 35 A
22 38 A
23 20 N
24 21 N
25 22 N
26 -22 A
27 2 N
28 2 N
29 6 N
30 7 N
31 7 N
32 6 N
33 30 A
34 31 A
35 6 N
36 6 N
37 6 N
38 5 N
39 22 A
40 22 A
41 4 N
42 5 N
43 4 N
44 5 N
45 30 A
46 39 A
47 18 N
48 18 N
49 19 N
50 18 N
答案 0 :(得分:1)
您需要将异常与不同分布的混合物区分开来。这通常不是一个统计问题,而是来自特定领域知识的东西。如果您根据您的数据绘制了desnity估计值:
png(); plot( density(DF$Value)) ; dev.off()
那么我们怎么知道零下的两个值不是真的呢?它们是样本的4%,因此应用规则:&#34;异常==项目超出99%置信区间&#34;不会将它们定义为&#34;异常。这些活动测量是否在某种情况下 应该给出正值?根据任何合理的定义,在20处达到更大的凸起肯定不是异常。
你应该对统计控制的主题进行一些搜索。 R包中有SPC导向功能。