2012-07-28 15 views
2

我想用MATLAB来识别boxplot的异常值。该函数的默认whisker值为1.5,提供+ - 2.7 * sigma或99.3覆盖。 但是,我想要99.7或3 *西格玛覆盖率。在这种情况下晶须的价值是什么? 我不想随机猜测,所以需要你们的帮助。 由于boxplot中晶须的价值为99.7覆盖

回答

4

一般而言,让:

Q1 = icdf('norm',0.25,0,1); 
Q3 = icdf('norm',0.75,0,1); 
IQR = Q3-Q1; 
  • 现在如果你具有恒定kBOXPLOT默认具有k=1.5为晶须长度),则IQR outlier test识别范围之外的值:[Q1 - k*IQR, Q3 + k*IQR]作为异常值,其对应于:

    >> k = 1.5; 
    >> sdCov = [Q1 - k*IQR, Q3 + k*IQR]  %# +/-2.698*sigma coverage 
    sdCov = 
         -2.698  2.698 
    

    或(根据曲线下面积):

    >> area = 2*normcdf(sdCov(2), 0, 1)-1 %# 99.3% coverage 
    area = 
         0.99302 
    
  • 在相反的方向,如果你想有一个sdCov*sigma覆盖,则:

    >> sdCov = 3; 
    >> k = (Q1+sdCov)/IQR 
    k = 
         1.7239 
    

    或:

    >> area = 0.9973; 
    >> sdCov = norminv(1-(1-area)/2); 
    >> k = (Q1+sdCov)/IQR 
    

    因此使用下面的你案例:

    boxplot(data, 'whisker',1.7239) 
    

这里是Wikipedia借来的一个例证:

http://en.wikipedia.org/wiki/Interquartile_range

+0

谢谢你,这是真的很有帮助。 – Shehroz 2012-07-30 16:49:26