2

我正在尝试使用 MATLAB 从箱线图中识别异常值。该函数的默认晶须值为 1.5,可提供 +- 2.7*sigma 或 99.3 的覆盖率。但是,我想要 99.7 或 3*sigma 覆盖率。在这种情况下,晶须的价值是多少?我不想随意猜测,所以需要你们的帮助。谢谢

4

1 回答 1

6

一般来说,让:

Q1 = icdf('norm',0.25,0,1);
Q3 = icdf('norm',0.75,0,1);
IQR = Q3-Q1;
  • 现在,如果您有一个常数k(默认情况下BOXPLOTk=1.5具有胡须长度),那么IQR 异常值测试会将范围之外的值识别[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)
    

这是从维基百科借来的插图:

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

于 2012-07-29T01:48:16.493 回答