2
我想用MATLAB来识别boxplot的异常值。该函数的默认whisker值为1.5,提供+ - 2.7 * sigma或99.3覆盖。 但是,我想要99.7或3 *西格玛覆盖率。在这种情况下晶须的价值是什么? 我不想随机猜测,所以需要你们的帮助。 由于boxplot中晶须的价值为99.7覆盖
我想用MATLAB来识别boxplot的异常值。该函数的默认whisker值为1.5,提供+ - 2.7 * sigma或99.3覆盖。 但是,我想要99.7或3 *西格玛覆盖率。在这种情况下晶须的价值是什么? 我不想随机猜测,所以需要你们的帮助。 由于boxplot中晶须的价值为99.7覆盖
一般而言,让:
Q1 = icdf('norm',0.25,0,1);
Q3 = icdf('norm',0.75,0,1);
IQR = Q3-Q1;
现在如果你具有恒定k
(BOXPLOT默认具有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借来的一个例证:
谢谢你,这是真的很有帮助。 – Shehroz 2012-07-30 16:49:26