用R识别数据集中的异常读数

用R识别数据集中的异常读数,r,if-statement,R,If Statement,我有一个数据框,里面有一串值,还有一些我想识别的异常读数。我想在我的数据框中做第三列,将某些读数标记为“异常”,其余为“正常”。从我的数据图来看,当我得到这些奇怪的下降时,用肉眼看似乎很明显,但我很难弄清楚如何让R识别这些奇怪的读数,因为基线平均值随时间而变化。我能想出的最好的办法就是用三条规则来将某些东西归类为“异常” 1:从第二个值开始,如果第二个值在第一个值的近范围内,则在第三列中标记为“N”表示正常。等等,通过数据集的其余部分 2:如果第二个值表示比第一个值大幅度增加或减少,则在第三列中

我有一个数据框,里面有一串值,还有一些我想识别的异常读数。我想在我的数据框中做第三列,将某些读数标记为“异常”,其余为“正常”。从我的数据图来看,当我得到这些奇怪的下降时,用肉眼看似乎很明显,但我很难弄清楚如何让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)

您需要将异常与不同分布的混合物区分开来。这通常不是一个统计问题,而是来自特定领域知识的rahter soemthing。如果根据您的数据绘制desnity估计值,您将得到:

png(); plot( density(DF$Value)) ; dev.off()

那么我们怎么知道零下的两个值不是真的呢?它们是样本的4%,因此应用规则:“异常==超出99%置信区间的项目”不会将它们定义为“异常”。这些活动测量是某种仪器应该给出正值的类型吗?根据任何合理的定义,更大的峰值在20时肯定不是异常


您应该在统计过程控制主题上进行一些搜索。其中有R个软件包具有面向SPC的功能。

按照您的规则,第2行应该是异常情况,因为值2表示(至少)比值1增加/减少50%(即,增加100%)。您是对的。也许%增加或减少不是描述数据中大跳跃的最佳方式。编辑此问题是为了删除对%的引用
png(); plot( density(DF$Value)) ; dev.off()