使用 IQR 或标准差确定异常值?

机器算法验证 标准差 异常值 疯狂的 四分位数
2022-03-29 22:30:10

类似于 ... 没有我正在寻找的答案。

数据集服从正态分布。

对于我正在进行的项目,必须根据育种数据的残差确定异常值。我们要删除最有可能由错误输入引起的数据。所有正确的值都是有价值的,因此我们希望将丢失这些值的风险降到最低。在异常值检测之后,数据将被发送给检查刚刚落在边界之外的异常值的人。

当谷歌搜索确定异常值时,它显示了如何使用Inter Quartile Range (IQR). 但是,我的主管和其他在我执行分析后必须处理数据的人对这种方法没有“感觉”。他们习惯于与之合作standard deviation并对此有“感觉”。

我想知道我们是否应该使用标准偏差的乘数或使用四分位数范围来计算边界。我需要能够证明我的选择是正确的。

确定异常值的常用方法是使用四分位间距 (IQR) 计算上下界线。这样做如下:

First Quartile = Q1
Third Quartile = Q3
IQR = Q3 - Q1

Multiplier: 
    This is usually a factor of 1.5 for normal outliers, or 3.0 for extreme outliers. 
    The multiplier would be determined by trial and error.

Lower fence = Q1 - (IQR * multiplier)
Upper fence = Q3 + (IQR * multiplier)

使用标准偏差计算边界将按以下方式完成:

Lower fence = Mean - (Standard deviation * multiplier)
Upper fence = Mean + (Standard deviation * multiplier)

We would be using a multiplier of ~5 to start testing with.

提前致谢 :)


更新我们是如何做到的

如果发现极端异常值(例如拼写错误),我们采用标准偏差方法。通过更改或删除他们的观察并再次运行分析来纠正它们。


编辑:或者 MAD 方法会更好地确定异常值吗?


Edit2,关于我的 Kjetil 数据的额外信息

我有育种数据,例如,我会坚持每天的收获。
收集数据的目的是获得更多关于猪的信息,并预测哪些血系可能有利于未来的繁殖。

目前,在将数据放入数据库之前应用了一些基本过滤器,这些过滤器可以解决最严重的拼写错误。但是有很多数据,比如说一头猪长了48公斤,这听起来并不奇怪。虽然如果你意识到这只是在农场呆了几天,你会突然发现这是不可能的。

我对每日收益执行线性回归,然后我想在残差上建立异常值并将它们标记为不符合要求。我所说的异常值是什么意思:不可能或极不可能的数据,由错误的测量或错误的输入引起


编辑:额外细节

我工作的公司根据许多不同的性状估计育种价值。目前,数据通过某些边界和协议进行预处理。例如,对于猪的体重,这些界限是最小 0 公斤和最大 999 公斤。我对协议了解不多。我相信其中一个是猪的第一次和最后一次测量的日期必须在 60-90 天之间。我被分配的任务是使用统计模型来获取残差列表。对于这些残差,我必须确定异常值以删除错误的数据点。我们不希望人为错误产生的数据影响育种值的确定过程。示例:猪平均每天长 900 克。猪A一天长1450克,有50克的差异,可以用性别来解释,种系150克,其他因素100克。这留下了 225 克的每日增重,我们无法直接解释。猪 A 将获得该性状日增重的正育种值。这些细节对我的公司来说很有趣。

这些是特征每日增益的当前异常值。蓝线是 Q3 顶部四分位距的 3.5 倍,红线是 Q1 减去四分位距的 1.5 倍。 注意:在与我的主管讨论后,我们同意底部和顶部的范围应该相同。因为目标不仅是要获得最好的猪,还要获得产量较低的猪。数据集应尽可能完整。我在最新版本中对此进行了更改。

在此处输入图像描述


这是与上图相同数据集的 qqnorm() 图

在此处输入图像描述


属于上述两个图的数据,如您所见,有 1327 个底部和 1000 个顶部栅栏异常值:

Residuals:
       Min.     1st Qu.      Median     3rd Qu.        Max. 
-10689.0000    -70.2550      3.3494     75.0470   8832.6000 


Residual standard error: 143.7 on 823393 degrees of freedom
Multiple R-squared: 0.3154, Adjusted R-squared: 0.3149
[1] "Standard deviation outliers:"
[1] "Lower Fence:  -430.990996984795      Upper fence:  430.984517801475"
[1] "Bottom outliers: 2347"
[1] "Top outliers   : 1767"
[1] "Interquartile range outliers:"
[1] "Lower Fence:  -506.16394780146     Upper fence:  510.955797895144"
[1] "Bottom outliers: 1327"
[1] "Top outliers   : 1000"
[1] "Mean           : -0.00323959165997404"
[1] "Median         : 3.34938945228498"
[1] "IQR            : 145.302820813801"
[1] "Standard dev.. : 143.662585797712"
1个回答

似乎您有太多异常值,以至于仅在使用普通最小二乘法拟合后才查看残差可能会产生误导——某些样本点可能具有如此高的影响(或“杠杆”)以至于拟合发生了变化,也许误导,只是为了让那些高杠杆点对应的残差变小。所以你可能需要强大的拟合方法!

您可以先查看如何通过删除 10% 的“最差”数据点来优化回归? 也许在这个网站上搜索强大的标签:https ://stats.stackexchange.com/questions/tagged/robust