使用R代码从excel中删除异常值

时间:2016-03-18 04:47:17

标签: r

以下数据表来自excel文件

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 by by函数对大量数据进行编码呢?

1 个答案:

答案 0 :(得分:0)

您可能希望根据中位数和MAD(绝对偏差的中位数)计算稳健的Z分数,而不是非稳健的标准均值和SD。然后使用Z评估您的数据,Z = 0表示中位数,Z = 1表示MAD输出等等。

假设我们有以下数据,其中一组是异常值:

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

然后Z:

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波段的那些是来自异常社区的那些)。