今天来分享一下数据分析中的异常值处理办法
异常值的常见判定方法是:
均值±三个标准差,
这样的话异常值就只会出现在99.87%的值的范围之外。当然选择三个标准差有点太过保守,有的研究也选取了2个或2.5个标准差作为选择范围。
但是这种判定方法是存在一些问题的:
1.原始数据要满足正态分布
2.异常值会强烈的影响平均值 标准差
3.这个方法并不适用于小样本
接下来用一个列子说明:
x=c(1,3,3,6,8,10,10,1000)
平均值:130.13
标准差:351.50
那么范围就是(-856.27,1116.52)
所以结果就是没有异常值,这么大的1000愣是没识别出来。。。
下面就是今天分享的重点了:
MAD—median absolute deviation (绝对中位差)
创始人:Hampel 和 Carl Friedrich Gauss
绝对中位差是用原数据减去中位数后得到的新数据的绝对值的中位数。
In other words,中位数是想要表示一个数据集中间位置的数据,那么每个数据与中位数的差值,反映了这些数据偏离中间位置的程度,在这个偏离程度中取中位数得到的就是绝对中位差。
公式如下:
b为比例因子,通常是1.4826.(怎么来的我也没看太明白,感兴趣的同学参考后面的文献)
还是用刚才的例子还介绍这个方法的使用。
1.先从小到大排列刚才那组数据x= c(1,3,3,6,8,10,10,1000)
2.找出中值。(6+8)/2=7
3.原始数据减去中值(x1),再求绝对值(x2),再从小到大排序(x3),再计算中值。
x1=c(-6,-4,-4,-1,1,3,3,993)
x2=c(6,4,4,1,1,3,3,993)
x3=c(1,1,3,3,4,4,6,993)
median=3.5
4.用上面计算出来的中值3.5乘以b(1.4826)得到最后的mad值5.1891
5.再用原始数据的中值(7)加减3倍的mad值得到最终结果。(也可以是2倍或2.5倍)
7+(3*5.1891) = 22.57
7-(3*5.1891) = -8.57
最终正常值范围就在-8.57到22.57之间,因此原始数据中的1000就可以剔除了。
在R语言中呢,内置的核心包stats(不需要安装和library了)中有个函数mad就是用来求绝对中位差的
好了今天的分享就到这啦。