首页 文章

Matlab Boxplot:使用特定的百分位数作为上部胡须或在手动上部胡须编辑后删除多余的异常值

提问于
浏览
3

对于MATLAB中的箱形图,我想问一下特定的百分位数是否可以用作上部晶须 . 我想将第95百分位数用作上部胡须,将第5百分位数用作下部胡须 .

MATLAB的默认行为是使晶须长度= 1.5 * IQR(第75百分位数 - 第25百分位数),并且这个晶须长度可以更改为IQR的另一倍数,但不能更改为特定的百分位数 . 请解释一下改变这个的方法 .

例如,对于以下100个数据:

50(重复80次),76次(重复10次),91,92,93,94,95,96,97,98,99,100

或在MATLAB中:

A([1:80],1) = 50; A([81:90],1) = 76; A([91:100],1) = [91:100]; boxplot(A)

有没有办法指定95或甚至76在胡须内?或上晶须的 Value ?

我已经使用以下代码调整了上部和下部胡须(尽管在这个例子中不需要更低的胡须);但是,此代码不会删除晶须内的异常值,导致结果看起来不清楚 .

p([1:2],1) =prctile(A,[5,95])
h = flipud(findobj(gca,'Tag','Upper Whisker'));
for j=1:length(h);
ydata = get(h(j),'YData');
ydata(2) = p(2,j);
set(h(j),'YData',ydata);
end
% Replace all y values of adjacent value
h = flipud(findobj(gca,'Tag','Upper Adjacent Value'));
for j=1:length(h);
ydata = get(h(j),'YData');
ydata(:) = p(2,j);
set(h(j),'YData',ydata);
end
% Replace lower end y value of whisker
h = flipud(findobj(gca,'Tag','Lower Whisker'));
for j=1:length(h);
ydata = get(h(j),'YData');
ydata(1) = p(1,j);
set(h(j),'YData',ydata);
end
% Replace all y values of adjacent value
h = flipud(findobj(gca,'Tag','Lower Adjacent Value'));
for j=1:length(h);
ydata = get(h(j),'YData');
ydata(:) = p(1,j);
set(h(j),'YData',ydata);
end

任何帮助将非常感谢!

谢谢!

2 回答

  • 0

    您需要添加以下内容:

    h = flipud(findobj(gca,'Tag','Outliers'));
    for j=1:length(h);
      ydata = get(h(j),'YData');
      xdata = get(h(j),'XData');
      remdata = (ydata >= p(1,j)) & (ydata <= p(2,j));
      ydata(remdata) = [];
      xdata(remdata) = [];
      set(h(j),'XData',xdata,'YData',ydata);
    end
    
  • 0

    我已经尝试了一段时间来理解Matlab中的“标准”或“默认”箱图,更具体地说,是胡须长度是多少 .

    当然,当手册指出“从四分位数范围的末端到晶须长度内的最远观察值”时,手册给出了一个完全无用的递归定义 .

    但是,当我说“MATLAB的晶须长度为1.5 IQR”时,我认为你是不正确的 . 默认情况下,它会查找低于(Q25 - 1.5 IQR)及以上(Q75 1.5 IQR)的所有样本数据,并将这些数据称为“异常值” . 那么,上部晶须是样品中不是上部异常值的最大值,而较低的晶须是不是较低异常值的最小样品值 .

    换句话说,晶须之间的总距离不是固定的并且等于4 IQR,而是样品中最大值和最小值之间的距离不是异常值 .

相关问题