你會想根據中位數和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帶,是來自異常羣體的)。
歡迎來到SO。請先閱讀如何在SO上提出問題。這將最大限度地獲得幫助的機會。 – MaxPD
什麼是MAD?中位數絕對偏差我猜?什麼是't'?你如何界定這些措施的異常點?我們需要一些細節繼續。 – thelatemail