Matlab IoSR Statistics Boxplot - 胡须显示分位数错误?

Matlab IoSR Statistics Boxplot - whisker showing quantiles wrong?

我在 Matlab 中有一些数据,我想使用箱线图绘制。由于标准箱线图的可定制性不够,我决定使用 IoSR Statistics Toolbox 中的箱线图功能。我希望箱线图具有显示 0.025 和 0.975 分位数的须线,而箱体本身显示四分位数间距和中位数(无论如何这是默认设置)。一个典型的数据集例如

p = [60.1 93 135.2 69 107.1 98.4 118.9 83.9 67 74.5 102.5 120.8 103.7 114.3 102.4 139.9 110.4 119.3 105.1 79.8 222.7 185.3 76.4 100.2 61.2 131.6 87.2 96 113.3 52.9 78.5 163.3 65.4 64.4];

我用标准的 Matlab 方法计算了 0.025 和 0.975 分位数 prctile() 以及箱线图方法应该使用的工具箱 quantile() 的分位数函数并得到完全相同的结果结果:

prctile(p,2.5,2) -> ans = 55.4200
prctile(p,97.5,2) -> ans = 209.6100
iosr.statistics.quantile(p,0.025,2,'R-5') -> ans = 55.4200
iosr.statistics.quantile(p,0.975,2,'R-5') -> ans = 209.6100

但是,当我使用下面的代码创建箱线图时,我得到的胡须不知何故太短了。上须线结束于 185.3,而不是 209.61,下须线延伸至 60.1,而不是 55.42。胡须现在正好在数据集的第二大/最小值处结束,而手动计算的分位数似乎利用某种插值方案来获得它们的值。

我在这里弄错了什么?如何让箱线图显示与手动计算相同的分位数?

iosr.statistics.boxPlot(["data"],p'...
    ,'limit',[2.5, 97.5],'boxColor',[0.5 0.5 0.5],'lineColor','k'...
    ,'medianColor',[0.2 0.2 0.2],'method','R-5','showOutliers',false...
    ,'xspacing','equal')

确实 prctile 函数 uses interpolation 计算了精确的百分位数值。

同时,根据 IoSR 箱线图函数的 source code

the whiskers extend to the most extreme data that are not considered outliers

所以选项 'limit' 不是设置胡须直接结束的位置,而是设置标记异常值的位置。

我去了 confirmed it with your example data. 这里红线是你想要的分位数,蓝点是你的数据。我已经标记了最远的数据点,果然,那是你的胡须结束的地方。


至于如何让它显示所需的百分位标记,我不确定,因为我没有工具箱,但我建议您查看他们添加百分位的选项;查看帮助或文档? (不确定文档在哪里) 可能相关的选项包括:

%       addPrctiles         - Show additional percentiles using markers and
%                             labels. The property should be a vector of
%                             percentiles; each percentile will be plotted
%                             for each box. The property is empty by
%                             default.
...
%       addPrctilesLabels   - Specify labels for the additional
%                             percentiles. The property should be a cell
%                             array of strings. By defualt no label
%                             is shown.
%       addPrctilesMarkers  - Specify markers for the additional
%                             percentiles. The property should be a cell
%                             array of strings indicating the shape of each
%                             percentile; the markers will be repeated for
%                             each box. The default is '*'.

或者,您可以使用对象句柄直接操作胡须:

%       handles             - Structure containing handles to the various
%                             objects that constitute the plot. The
%                             fields/handles are:
%                                 'axes'            : the parent axes of 
%                                                     the box plot
%                                 'fig'             : the parent figure of
%                                                     the box plot
%                                 'addPrctiles'     : chart line objects
%                                                     for each additional
%                                                     percentile marker
%                                 'addPrctilesTxt'  : text objects for each
%                                                     additional percentile
%                                                     marker
...
%                                 'upperWhiskers'   : line objects for each
%                                                     upper whisker line
%                                 'lowerWhiskers'   : line objects for each
%                                                     lower whisker line
%                                 'upperWhiskerTips': line objects for each
%                                                     upper whisker tip
%                                 'lowerWhiskerTips': line objects for each

可能使用这样的语法:

h = iosr.statistics.boxPlot(["data"],p',...)
h.upperWhiskers = % XY coordinates for desired line
h.lowerWhiskers = % XY coordinates for desired line