【数据异常校验】皮尔士准则(Peirce Criterion)处理异常数据

在稳健的统计数据中,Peirce准则是消除数据集异常值的规则,这是由Benjamin Peirce设计的。

 

简介

 

稳健统计数据

对从各种概率分布中提取的数据具有良好性能的统计数据,尤其是对于不正常的分布。已经针对许多常见问题开发了稳健的统计方法,例如估计位置,比例和回归参数。一个动机是产生不受异常值过度影响的统计方法。另一个动机是当参数分布偏离很小时,提供具有良好性能的方法。例如,鲁棒方法适用于具有不同标准偏差的两个正态分布的混合; 在这个模型下,像t检验这样的非鲁棒方法效果很差。

 

在包含实数测量的数据集中,可疑的异常值是看起来位于大多数其他数据值的聚类之外的测量值。如果将算术平均值用作位置的汇总统计量,则异常值将极大地改变位置估计。问题是算术平均值对包含任何异常值非常敏感; 在统计术语中,算术平均值不稳健。

 

在存在异常值的情况下,统计学家有两种选择:

  • 首先,统计学家可以从数据集中删除可疑的异常值,然后使用算术平均值来估计位置参数。
  • 其次,统计学家可以使用稳健的统计量,例如中位数统计量。

 

Peirce准则是消除异常值的统计程序。

 

Peirce的标准来源于高斯分布的统计分析。与删除异常值的其他一些标准不同,Peirce的方法可用于识别两个或更多异常值。

 

应用

Peirce准则的应用是从观察对中去除不良数据点,以便在两个观察之间执行回归(例如,线性回归)。Peirce准则不依赖于观测数据(仅观测数据的特征),因此使其成为一个高度可重复的过程,可以独立于其他过程进行计算。此功能使Peirce成为识别计算机应用中理想异常值的标准,因为它可以编写为调用函数。

 

使用

为了使用Peirce的标准,必须首先理解输入和返回值。回归分析(或曲线与数据的拟合)导致残差(或拟合曲线与观察点之间的差异)。因此,每个观察点都具有与拟合曲线相关的残余误差。通过取平方(即残余误差增加到2的幂),残差可表示为正值。如果平方误差太大(即,由于观察不良),则可能导致从曲线拟合中检索的回归参数(例如,线性曲线的斜率和截距)出现问题。

Peirce的想法是统计地确定什么构成错误“太大”,因此被识别为“异常值”,可以从观察中删除以改善观察与曲线之间的拟合。K. Thomsen确定需要三个参数来执行计算:观察对的数量(N),要移除的异常值的数量(n)以及曲线中使用的回归参数(例如系数)的数量 - 拟合得到残差(m)。该过程的最终结果是计算一个阈值(平方误差),其中应保持平方误差小于该阈值的观测值,并应消除大于该值的平方误差的观测值(即为异常值) 。

由于Peirce的标准不将观察,拟合参数或残差作为输入,因此输出必须与数据重新关联。取所有平方误差的平均值(即均方误差)并将其乘以阈值平方误差(即该函数的输出)将得到用于识别异常值的数据特定阈值。

 

下面的Python代码为表1(m=1)和古尔德1855的表2(m=2)的给定N(第一列)和N(顶级行)返回x平方值。由于牛顿法的迭代方法,如N与log Q(古尔德,1855年的表III)和x对log R(Peirce,1852和古尔德,1855年的表IV)的查找表不再是必需的。

import numpy
import scipy.special

#### FUNCTION ####
def peirce_dev(N, n, m):
   """
   Name:     peirce_dev
   Input:    - int, 总观测数 (N)
             - int, 要删除的离群值 (n)
             - int, 模型未知数 (m)
   Output:   float, 平方误差阈值 (x2)
   Features: 返回离群值的平方阈值偏差
             使用Peirce基于古尔德的标准进行识别方法
   """

   # 将浮点数分配给输入变量:
   N = float(N)
   n = float(n)
   m = float(m)
   
   # 检查次数:
   if N > 1:
      # Calculate Q (Nth root of Gould's equation B):
      Q = (n**(n/N)*(N - n)**((N - n)/N))/N
      
      # 初始化R值(作为浮点数)
      Rnew = 1.0  
      Rold = 0.0  # <- Necessary to prompt while loop
      
      # 开始迭代在R上收敛:
      while ( abs(Rnew - Rold) > (N*2.0e-16) ):
         # 计算 Lamda 
         # (1/(N-n)th root of Gould's equation A'):
         ldiv = Rnew**n
         if ldiv == 0:
            ldiv = 1.0e-6
         Lamda = ((Q**N)/(ldiv))**(1.0/(N - n))
         
         # 计算x平方(Gould的方程C):
         x2 = 1.0 + (N - m - n)/n*(1.0 - Lamda**2.0)
         
         # 如果x2是负的,返回0:
         if x2 < 0:
            x2 = 0.0
            Rold = Rnew
         else:
            # 用x平方来更新R(古尔德的方程D):
            Rold = Rnew
            Rnew = (
               numpy.exp((x2 - 1)/2.0)*
               scipy.special.erfc(numpy.sqrt(x2)/numpy.sqrt(2.0))
               )
         #
   else:
      x2 = 0.0
   return x2

 

参考:https://en.wikipedia.org/wiki/Peirce%27s_criterion

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值