2016-03-18 93 views
-2

從Excel卸下離羣以下數據表是從excel文件,使用R代碼

Part A B C D E F G H I J K L 
XXX 0 1 1 2 0 1 2 3 1 2 1 0 
YYY 0 1 2 2 0 30 1 1 0 1 10 0 
.... 

所以,我想顯示包含的

[median – t * MAD, median + t * MAD] 

具有邏輯異常值的那些部分,以便如何編碼此使用R功能獲取大量數據?

+2

歡迎來到SO。請先閱讀如何在SO上提出問題。這將最大限度地獲得幫助的機會。 – MaxPD

+0

什麼是MAD?中位數絕對偏差我猜?什麼是't'?你如何界定這些措施的異常點?我們需要一些細節繼續。 – thelatemail

回答

0

你會想根據中位數和MAD(絕對偏差的中位數)而不是非穩健的標準平均值和標準差來計算穩健的Z值。然後,使用Z,以Z = 0意思就是中位數,Z = 1個一個狂掉,等評估數據

假設我們有以下數據,其中一組是異常值:

df <- rbind(data.frame(tag='normal', res=rnorm(1000)*2.71), data.frame(tag='outlier', res=rnorm(20)*42)) 

然後ž它:

df$z <- with(df, (res - median(res))/mad(res)) 

這給了我們這樣的:

> head(df) 
    tag res  z 
1 normal -3.097 -1.0532 
2 normal -0.650 -0.1890 
3 normal 1.200 0.4645 
4 normal 1.866 0.6996 
5 normal -6.280 -2.1774 
6 normal 1.682 0.6346 

然後切成Z帶,例如。

df$band <- cut(df$z, breaks=c(-99,-3,-1,1,3,99)) 

即可以以簡單的方式來分析:

> addmargins(xtabs(~band+tag, df)) 
      tag 
band  normal outlier Sum 
    (-99,-3]  1  9 10 
    (-3,-1]  137  0 137 
    (-1,1]  719  2 721 
    (1,3]  143  1 144 
    (3,99]  0  8 8 
    Sum  1000  20 1020 

如可以看到的,很明顯,與最大ZS的那些(在(-99是的那些,-3)和( 3,99)Z帶,是來自異常羣體的)。