【问题标题】:Identifying anomalous readings in a data set with R使用 R 识别数据集中的异常读数
【发布时间】:2014-05-06 01:46:09
【问题描述】:

我有一个包含一串值的数据框,其中包含我想要识别的某些异常读数。我想在我的数据框中制作第三列,将某些读数标记为“异常”,其余为“正常”。查看我的数据图,当我得到这些奇怪的下降时,肉眼看起来很明显,但是由于基线平均值随时间变化,我无法弄清楚如何让 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

【问题讨论】:

  • 按照您的规则,第 2 行应该是异常,因为值 2 表示(至少)从值 1 增加/减少 50%(即增加 100%) .
  • 你是对的。也许百分比增加或减少并不是表征数据大幅跳跃的最佳方式。编辑问题以删除对 % 的引用

标签: r if-statement


【解决方案1】:

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

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

那么我们应该如何知道低于零的两个值不是真实的?它们占您样本的 4%,因此应用规则:“异常 == 超出 99% 置信区间的项目”不会将它们定义为“异常”。这些活动测量是否是某种仪器应该 给出了一个正值?在 20 处达到峰值的更大的凸起从任何合理的定义来看肯定不是异常。

您应该对统计过程控制的主题进行一些搜索。其中有带有面向 SPC 功能的 R 包。

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 2016-06-10
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 2021-12-10
    • 2019-09-30
    • 1970-01-01
    • 2019-07-27
    相关资源
    最近更新 更多