2014-05-06 55 views
0

我有一個包含一串值的數據框,其中包含某些我想識別的異常讀數。我想在我的數據框中創建第三欄,標記某些讀數爲「異常」,其餘爲「正常」。回顧一下我的數據情況,當我看到這些奇怪的下跌時,看起來很明顯,但我無法弄清楚如何讓R識別奇數讀數,因爲基線平均值隨時間變化。我能想出的最好的方法是使用三條規則將某些事情歸類爲「異常」。使用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 
+1

按照你的規則,第2行應該是一個異常,因爲值2代表(至少)從1增加/減少50%(即增加100%) – jbaums

+0

你是對的,也許%增加或減少不是最好的表徵數據中大跳躍的方式。編輯問題以刪除對% – Vinterwoo

回答

1

您需要區分不同分佈混合的異常。這通常不是一個統計問題,而是來自特定於領域的知識。如果您從您繪製desnity估計數據你:

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

enter image description here

那麼,我們應該如何知道零度以下兩個值不實?他們是你樣本的4%,所以應用一個規則:「異常==項目在99%置信區間之外」不會將它們定義爲「異常」。這些活動的測量是某種儀器應該給出正值值嗎?更大的隆起在20調峯肯定是沒有任何合理的定義異常。

你應該這樣做統計prcess控制的話題一些搜索。有R封裝與SPC在他們導向功能。