全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6084 6
2013-03-13

前些天看了同事转发的一篇介绍R奇异值(outlier)探查方法的文章,获益良多。文章介绍了如下四种常用探查方法,

·        TheESD identifier, more commonly known asthe “three-sigma edit rule,” well known but unreliable;
·        TheHampel identifier, a more reliableprocedure based on the median and the MADM scale estimate;
·        Thestandard boxplot rule,based on the upper and lower quartiles of the data distribution;
·        Anadjusted boxplot rule,based on the upper and lower quartiles, along with a robust Skewness estimatorcalled the medcouple.

有兴趣的可以到这里看一下,
http://www.r-bloggers.com/finding-outliers-in-numerical-data/?utm_source=feedburner&utm_medium=email&utm_campaign=Feed:+RBloggers+(R+bloggers)
上述方法中所使用到的统计量可以分为两类,一类是描述数据的集中趋势(estimators of location),一类是描述数据的离散程度(estimators of scale)。

Estimators of location 包括:
·        均值(Mean)
·        中位数 (Median)
Estimators of scale包括:
·        标准差 (Standard Deviation)
·        IQR (Theinterquartile range)
·        MAD (medianabsolute difference)

因此,上面的方法可以抽象成下面这样的一个公式:
[(Estimators of location -scale multiplier * Estimators of scale), (Estimators of location+ scale multiplier * Estimators of scale)]

所有位于这个区间外的值,从统计学角度讲,将被视为outliers  
SAS中如何计算这些统计量并实现上述方法呢?
其实在SAS中有一个很好用的统计过程,proc univariate(单变量分析),它可以帮助我们。这里以SAS 示例数据库中的HMEQ数据集进行演示,计算变量loan的各种统计量,代码如下:
1

proc univariate data= sampsio.hmeq outtable= stats(rename=(_VAR_=VarName)) ;                                                                                                                                                            
      varloan;                                                                                                                                                                                                                                    
run;

proc transpose data= stats out=_stats;
run;

proc print data=_stats;
run;

输出数据集stats中存储了上述我们所需要的统计量,将需要的统计量代入上面的公式当中

·        The ESD identifier
Estimator oflocation= _MEAN_
Estimators ofscale = _STD_
Scale multiplier =3
·        The Hampel identifier
Estimator oflocation= _MEDIAN_
Estimators ofscale = _MAD_
Scale multiplier =3
·        The standard boxplot rule
Estimator oflocation= _Q1_ and _Q3_
Estimators ofscale = _QRANGE_
Scale multiplier =1.5
·        An adjusted boxplot rule
Estimator oflocation= _Q1_ and _Q3_
Estimators ofscale = _QRANGE_
Scale multiplier = c* exp (a * MC) and c * exp (b * MC)
(目前SAS中没有内置计算medcouple的统计过程,有兴趣的可研究一下。)

由于ESD identifier方法中的统计量,均值(MEAN)和标准差(STD),对outlier十分敏感,当所探查变量中含有较多outliers的时候,这种方法很容易失效。从这个角度看,其余三种方法可以看作是对它的优化和扩展,他们都是通过使用robustestimator, 来尽可能地降低outlier带来的影响。SASunivariate过程对此也提供了相应的支持,可以计算各种robust estimator。
例如,
Robust estimatorof location中除MEDIAN外,还有Trimmed mean和 Winsorized mean。
·        Trimmed Mean - 通过去掉数据中最大和最小的一部分数据后,计算剩余数据的MEAN得到的。
·       Winsorized Mean - 通过使用第 (k-1) 个最大和最小值替换数据中第k个最大和最小值后,再计算数据的MEAN得到的。 
实现代码如下:
2
ods output TrimmedMeans = trimmedmean;
ods output WinsorizedMeans =winsorizedmean;

proc univariate data=sampsio.hmeq trimmed=10
                winsorized=10  robustscale out=_stats;
   var loan;
run;

上面的那个例子不同,由于univariate的输出数据_stats里面没有trimmed mean和winsorized mean,因此这里我们需要使用ods output将其输出到数据集trimmedmean和winsorizedmean中。
Robust estimator of scale中除了IQR和MAD外,还包括:
§  Gini’s meandifference
§  SN
§  QN
其中SN和QN可以看作是对MAD的扩展。除了IQR, MAD, Gini’s mean difference, SN, QN, 这五个robust estimator外,proc univariate还分别计算出了基于这五个robust estimator的标准差(_STDGINI_,_STDQRANGE_,_STDMAD_,_STDSN_,_STDQN_)。
上述的这些robust estimator默认存储在procunivariate的输出数据集中,有了这些robust estimators,我们就可以使用他们来替换ESDidentifier中的均值和标准差,如,
Estimator of location= TRIMMED MEAN
Estimators of scale = _STDMAD_
这将有助于提高ESD identifier探查方法的准确性和稳定性。
最后,我还想补充两点(R的那篇文章已经强调过了)
·        Outlier和bad data完全不同的概念,应该正确区分,outlier有可能帮助我们发现新的模式和规则。bad data好比沙滩上随意丢弃的废弃物,而outlier则是沙土下埋藏的贝壳,它里面有可能孕育着宝库的珍珠。
·        统计学或统计方法中发现的Outlier,在商业实践是否有实际价值,需要结合实际的商业环境来进行解释,切勿过于依赖和迷信这些“神奇”的符号和数字,它们只是工具,商业直觉和经验能帮你更好的驾驭它们。
以下是一些SAS online doc中的参考文档
关于Robust Estimator的介绍
http://support.sas.com/documentation/cdl/en/procstat/63963/HTML/default/viewer.htm#procstat_univariate_sect031.htm
关于proc univariate 输出数据集的介绍
http://support.sas.com/documentation/cdl/en/procstat/63963/HTML/default/viewer.htm#procstat_univariate_sect049.htm
关于IML Studio中outlierdetection的方法
http://support.sas.com/documentation/cdl/en/imlsug/63546/HTML/default/viewer.htm#imlsug_ugdistoutliers_sect001.htm

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-3-13 12:28:45
多谢lz
我也在考虑outliers这个问题,也不知道有什么权威些的办法

在金融领域,我想用来删除基金建仓初期诸如仓位、行业配置等奇异值
比如一支基金长期以来仓位保持在80%左右,但有时建仓初期会有一两个月在30~40%的范围,这在研究中是要剔除的
我现在是用人肉剔除,希望有好的办法可以救我于水火
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-5-30 12:05:27
perfect post!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-5-30 14:39:57
great!!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-5-31 06:30:18
学习了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-6-24 23:22:18
playmore 发表于 2013-3-13 12:28
多谢lz
我也在考虑outliers这个问题,也不知道有什么权威些的办法
我也做时间序列的项目也遇到这个问题 就是outlier 客户需要自动化 对于序列开始数据的不稳定 我做的是连续删除前三个月的数据 感觉outlier统计诊断只是一方面 还是需要结合field knowledge来判断
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群