Matlab Boxplot:使用特定的百分位数作为上须或在手动上须编辑后删除多余的异常值
Matlab Boxplot: Use a specific percentile as the upper whisker OR remove redundant outliers after manual upper whisker edit
对于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 在胡须内?还是上胡须的价值?
我已经使用以下代码调整了上部和下部晶须(尽管本例中不需要下部晶须);但是此代码不会删除晶须中的异常值,从而使结果看起来不清楚。
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
任何帮助将不胜感激!
谢谢!
您需要添加以下内容:
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
我尝试了一段时间来理解 Matlab 中的 "standard" 或 "default" 箱线图,更具体地说,胡须长度是多少。
当然,手册在声明 "whiskers are drawn from the ends of the interquartile ranges to the furthest observations within the whisker length"
时给出了一个完全无用的递归定义
不过,我认为你说 "MATLAB has a whisker length of 1.5 IQR" 是不正确的。默认情况下,它所做的是查找所有低于 (Q25 - 1.5 IQR) 和高于 (Q75 + 1.5 IQR) 的样本数据,并将这些数据称为 "outliers"。 THEN 上面的胡须是样本中不是上离群值的最大值,下胡须是不是下离群值的最小样本值。
换句话说,胡须之间的总距离不是固定的,等于4 IQR,而是样本中非异常值的最大值和最小值之间的距离。
对于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 在胡须内?还是上胡须的价值?
我已经使用以下代码调整了上部和下部晶须(尽管本例中不需要下部晶须);但是此代码不会删除晶须中的异常值,从而使结果看起来不清楚。
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
任何帮助将不胜感激!
谢谢!
您需要添加以下内容:
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
我尝试了一段时间来理解 Matlab 中的 "standard" 或 "default" 箱线图,更具体地说,胡须长度是多少。
当然,手册在声明 "whiskers are drawn from the ends of the interquartile ranges to the furthest observations within the whisker length"
时给出了一个完全无用的递归定义不过,我认为你说 "MATLAB has a whisker length of 1.5 IQR" 是不正确的。默认情况下,它所做的是查找所有低于 (Q25 - 1.5 IQR) 和高于 (Q75 + 1.5 IQR) 的样本数据,并将这些数据称为 "outliers"。 THEN 上面的胡须是样本中不是上离群值的最大值,下胡须是不是下离群值的最小样本值。
换句话说,胡须之间的总距离不是固定的,等于4 IQR,而是样本中非异常值的最大值和最小值之间的距离。