数据分析中的异常值处理

今天来分享一下数据分析中的异常值处理办法

异常值的常见判定方法是:
均值±三个标准差
这样的话异常值就只会出现在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就是用来求绝对中位差的
在这里插入图片描述好了今天的分享就到这啦,如果有对森林生态感兴趣的同学,可以关注我的个人微信公众号“森林生态小小圈”啊~

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值