Matlab IoSR Statistics Boxplot - усы неверно показывают квантили? - PullRequest
0 голосов
/ 05 августа 2020

У меня есть данные в Matlab, которые я хотел бы построить, используя коробчатую диаграмму. Поскольку стандартный блок-график не был достаточно настраиваемым, я решил использовать функцию boxPlot из набора инструментов статистики IoSR. Я хочу, чтобы на прямоугольной диаграмме были усы, которые отображали квантили 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];

Я вычислил квантили 0,025 и 0,975 с помощью стандартного метода Matlab 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')

введите описание изображения здесь

1 Ответ

1 голос
/ 06 августа 2020

Действительно, функция prctile использует интерполяцию при вычислении точных значений процентилей.

Между тем, согласно исходному коду для функции boxplot IoSR:

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

Таким образом, параметры 'limit' не устанавливают, где прямо заканчиваются усы, а только где отмечать выбросы.

Я пошел и подтвердил это с данными из вашего примера. Здесь красные линии - это ваши желаемые значения квантилей, а синие точки - ваши данные. Я отметил самые дальние точки данных, и, конечно же, именно там закончились ваши усы.

Что касается того, как заставить его показать желаемый маркер процентиля, я точно не знаю, так как у меня нет набора инструментов, но я рекомендую вам изучить их варианты добавления процентиля; см. справку или документы? (не уверен, где находится документация) Возможные подходящие параметры включают:

%       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
...