prctile

Процентилы набора данных

Описание

пример

Y = prctile(X,p) возвращает процентили элементов в векторе данных или массиве X для процентных p в интервале [0,100].

  • Если X является вектором, тогда Y - скаляр или вектор с той же длиной, что и количество запрашиваемых процентилей (length(p)). Y(i) содержит p(i) процентиль.

  • Если X является матрицей, тогда Y - вектор-строка или матрица, где количество строк Y равно количеству запрашиваемых процентилей (length(p)). The iпервая строка Y содержит p(i) процентили каждого столбца X.

  • Для многомерных массивов, prctile действует по первой нежесткой размерности X.

пример

Y = prctile(X,p,'all') возвращает процентили всех элементов X.

пример

Y = prctile(X,p,dim) возвращает процентили по рабочей размерности dim.

пример

Y = prctile(X,p,vecdim) возвращает процентили по размерностям, заданным в векторе vecdim. Для примера, если X является матрицей, тогда prctile(X,50,[1 2]) возвращает 50-й процентиль всех элементов X потому что каждый элемент массива матрицы содержится в срезе массива, заданном размерностями 1 и 2.

пример

Y = prctile(___,'Method',method) возвращает точные или приблизительные процентили на основе значения method, использование любой комбинации входных аргументов в предыдущих синтаксисах.

Примеры

свернуть все

Сгенерируйте набор данных размера 10.

rng('default'); % for reproducibility
x = normrnd(5,2,1,10)
x = 1×10

    6.0753    8.6678    0.4823    6.7243    5.6375    2.3846    4.1328    5.6852   12.1568   10.5389

Вычислите 42-й процентиль.

Y = prctile(x,42)
Y = 5.6709

Найдите процентили всех значений в массиве.

Создайте массив 3 на 5 на 2 X.

X = reshape(1:30,[3 5 2])
X = 
X(:,:,1) =

     1     4     7    10    13
     2     5     8    11    14
     3     6     9    12    15


X(:,:,2) =

    16    19    22    25    28
    17    20    23    26    29
    18    21    24    27    30

Найдите 40-й и 60-й процентили элементов X.

Y = prctile(X,[40 60],'all')
Y = 2×1

   12.5000
   18.5000

Y(1) - 40-й процентиль X, и Y(2) - 60-й процентиль X.

Вычислите процентили между столбцами и строками матрицы данных для заданных процентов.

Сгенерируйте матрицу данных 5 на 5.

X = (1:5)'*(2:6)
X = 5×5

     2     3     4     5     6
     4     6     8    10    12
     6     9    12    15    18
     8    12    16    20    24
    10    15    20    25    30

Вычислите 25-й, 50-й и 75-й процентили вдоль столбцов X.

Y = prctile(X,[25 50 75],1)
Y = 3×5

    3.5000    5.2500    7.0000    8.7500   10.5000
    6.0000    9.0000   12.0000   15.0000   18.0000
    8.5000   12.7500   17.0000   21.2500   25.5000

Строки Y соответствуют процентилям столбцов X. Для примера 25-й, 50-й и 75-й процентилей третьего столбца X с элементами (4, 8, 12, 16, 20) 7, 12 и 17 соответственно. Y = prctile(X,[25 50 75]) возвращает ту же процентильную матрицу.

Вычислите 25-й, 50-й и 75-й процентилы вдоль строк X.

Y = prctile(X,[25 50 75],2)
Y = 5×3

    2.7500    4.0000    5.2500
    5.5000    8.0000   10.5000
    8.2500   12.0000   15.7500
   11.0000   16.0000   21.0000
   13.7500   20.0000   26.2500

Строки Y соответствуют процентилям строк X. Для примера 25-й, 50-й и 75-й процентилей первой строки X с элементами (2, 3, 4, 5, 6) 2,75, 4 и 5,25 соответственно.

Найдите процентили многомерного массива одновременно по нескольким размерностям.

Создайте массив 3 на 5 на 2 X.

X = reshape(1:30,[3 5 2])
X = 
X(:,:,1) =

     1     4     7    10    13
     2     5     8    11    14
     3     6     9    12    15


X(:,:,2) =

    16    19    22    25    28
    17    20    23    26    29
    18    21    24    27    30

Вычислите 40-й и 60-й процентили для каждой страницы X путем определения размерностей 1 и 2 в качестве рабочих размерностей.

Ypage = prctile(X,[40 60],[1 2])
Ypage = 
Ypage(:,:,1) =

    6.5000
    9.5000


Ypage(:,:,2) =

   21.5000
   24.5000

Для примера, Ypage(1,1,1) - 40-й процентиль первой страницы X, и Ypage(2,1,1) - 60-й процентиль первой страницы X.

Вычислите 40-й и 60-й процентили элементов в каждой X(:,i,:) срез путем определения размерностей 1 и 3 в качестве рабочих размерностей.

Ycol = prctile(X,[40 60],[1 3])
Ycol = 2×5

    2.9000    5.9000    8.9000   11.9000   14.9000
   16.1000   19.1000   22.1000   25.1000   28.1000

Для примера, Ycol(1,4) - 40-й процентиль элементов в X(:,4,:), и Ycol(2,4) - 60-й процентиль элементов в X(:,4,:).

Вычислите точные и приблизительные процентили высокого вектора-столбца для заданного процента.

При выполнении вычислений на длинные массивы MATLAB ® использует либо параллельный пул (по умолчанию, если у вас есть Parallel Computing Toolbox™), либо локальный сеанс работы с MATLAB. Чтобы запустить пример с использованием локального сеанса работы с MATLAB, когда у вас есть Parallel Computing Toolbox, измените глобальное окружение выполнения с помощью mapreducer функция.

mapreducer(0)

Создайте datastore для airlinesmall набор данных. Лечите 'NA' значения как отсутствующие данные, так что datastore заменяет их на NaN значения. Задайте, чтобы работать с ArrTime переменная.

ds = datastore('airlinesmall.csv','TreatAsMissing','NA',...
    'SelectedVariableNames','ArrTime');

Создайте длинную таблицу о верхнюю часть datastore и извлечите данные из длинной таблицы в tall вектора.

t = tall(ds) % Tall table
t =

  Mx1 tall table

    ArrTime
    _______

      735  
     1124  
     2218  
     1431  
      746  
     1547  
     1052  
     1134  
       :
       :
x = t{:,:}   % Tall vector
x =

  Mx1 tall double column vector

         735
        1124
        2218
        1431
         746
        1547
        1052
        1134
         :
         :

Вычислите точный 50-й процентиль x. Потому что x является высоким вектором-столбцом и p является скаляром, prctile возвращает точное значение процентиля по умолчанию.

p = 50;
yExact = prctile(x,p)
yExact =

  tall double

    ?

Вычислите приблизительный 50-й процентиль x. Задайте 'Method','approximate' использовать алгоритм приближения, основанный на T-Digest, для вычисления процентиля.

yApprox = prctile(x,p,'Method','approximate')
yApprox =

  MxNx... tall double array

    ?    ?    ?    ...
    ?    ?    ?    ...
    ?    ?    ?    ...
    :    :    :
    :    :    :

Оцените длинные массивы и внесите результаты в память при помощи gather.

[yExact,yApprox] = gather(yExact,yApprox)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 4: Completed in 1 sec
- Pass 2 of 4: Completed in 0.47 sec
- Pass 3 of 4: Completed in 0.67 sec
- Pass 4 of 4: Completed in 0.55 sec
Evaluation completed in 3.9 sec
yExact = 1522
yApprox = 1.5220e+03

Значения приблизительного процентиля и точного процентиля совпадают с четырьмя показанными цифрами.

Вычислите точные и приблизительные процентили tall matrix для заданных процентов по разным размерностям.

При выполнении вычислений на длинные массивы MATLAB ® использует либо параллельный пул (по умолчанию, если у вас есть Parallel Computing Toolbox™), либо локальный сеанс работы с MATLAB. Чтобы запустить пример с использованием локального сеанса работы с MATLAB, когда у вас есть Parallel Computing Toolbox, измените глобальное окружение выполнения с помощью mapreducer функция.

mapreducer(0)

Создайте tall matrix X содержащий подмножество переменных из airlinesmall набор данных. Смотрите Percentiles of Tall Vector for Given Percentile для получения дополнительной информации о шагах по извлечению данных из длинный массив.

varnames = {'ArrDelay','ArrTime','DepTime','ActualElapsedTime'}; % Subset of variables in the data set
ds = datastore('airlinesmall.csv','TreatAsMissing','NA',...
    'SelectedVariableNames',varnames); % Datastore
t = tall(ds);     % Tall table
X = t{:,varnames} % Tall matrix
X =

  Mx4 tall double matrix

           8         735         642          53
           8        1124        1021          63
          21        2218        2055          83
          13        1431        1332          59
           4         746         629          77
          59        1547        1446          61
           3        1052         928          84
          11        1134         859         155
          :          :            :           :
          :          :            :           :

При работе с размерностью, не равным 1, prctile функция вычисляет только точные процентили, так что она может выполнить расчет эффективно с помощью основанного на сортировке алгоритма (см. Алгоритмы) вместо алгоритма приближения, основанного на T-Digest.

Вычислите точные 25-й, 50-й и 75-й процентилы X вдоль второго измерения.

p = [25 50 75]; % Vector of percentages
Yexact = prctile(X,p,2)
Yexact =

  MxNx... tall double array

    ?    ?    ?    ...
    ?    ?    ?    ...
    ?    ?    ?    ...
    :    :    :
    :    :    :

Когда функция действует по первой размерности и p является вектором процентов, для вычисления процентилей необходимо использовать алгоритм приближения, основанный на t-дайджесте. Использование основанного на сортировке алгоритма для поиска процентилей по первой размерности длинный массив является вычислительно интенсивным.

Вычислите приблизительные 25-й, 50-й и 75-й процентилы X по первой размерности. Поскольку размерность по умолчанию является 1, вам не нужно задавать значение для dim.

Yapprox = prctile(X,p,'Method','approximate')
Yapprox =

  MxNx... tall double array

    ?    ?    ?    ...
    ?    ?    ?    ...
    ?    ?    ?    ...
    :    :    :
    :    :    :

Оцените длинные массивы и внесите результаты в память при помощи gather.

[Yexact,Yapprox] = gather(Yexact,Yapprox);
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 3.5 sec
Evaluation completed in 4.2 sec

Показать первые пять строк точных 25-й, 50-й и 75-й процентилей по второму измерению X .

Yexact(1:5,:)
ans = 5×3
103 ×

    0.0305    0.3475    0.6885
    0.0355    0.5420    1.0725
    0.0520    1.0690    2.1365
    0.0360    0.6955    1.3815
    0.0405    0.3530    0.6875

Каждая строка матрицы Yexact содержит три процентиля соответствующей строки в X. Для примера, 30.5, 347.5, и 688.5 являются 25-м, 50-м и 75-м процентилями, соответственно, первой строки в X.

Покажите приблизительные 25-й, 50-й и 75-й процентили X по первой размерности.

Yapprox
Yapprox = 3×4
103 ×

   -0.0070    1.1149    0.9321    0.0700
         0    1.5220    1.3350    0.1020
    0.0110    1.9180    1.7400    0.1510

Каждый столбец матрицы Yapprox соответствует трем процентилям для каждого столбца матрицы X. Для примера - первый столбец Yapprox с элементами (-7, 0, 11) содержит процентили для первого столбца X.

Входные параметры

свернуть все

Входные данные, заданные как вектор или массив.

Типы данных: double | single

Проценты, для которых можно вычислить процентилы, заданные как скаляр или вектор скаляров от 0 до 100.

Пример: 25

Пример: [25, 50, 75]

Типы данных: double | single

Размерность, по которой процентилы X запрашиваются в виде положительного целого числа. Для примера, для матрицы X, когда dim = 1, prctile возвращает процентиль (и) столбцов X; когда dim = 2, prctile возвращает процентиль (ы) строк X. Для многомерного массива X, длина dimI размерность Y равно длине p.

Типы данных: double | single

Вектор размерностей, заданный как положительный целочисленный вектор. Каждый элемент vecdim представляет размерности массива входа X. Область выхода Y имеет длину length(p) в наименьшей заданной рабочей размерности (то есть размерности min(vecdim)) и имеет длину 1 в каждом из остальных рабочих размерностей. Другие длины размерности одинаковы для X и Y.

Например, рассмотрите массив 2 на 3 на 3 X с p = [20 40 60 80]. В этом случае prctile(X,p,[1 2]) возвращает массив, где каждая страница массива содержит 20-й, 40-й, 60-й и 80-й процентили элементов соответствующей страницы X. Потому что 1 и 2 являются рабочими размерностями с   min([1 2]) = 1 и   length(p) = 4, выводится массив 4 на 1 на 3.

Типы данных: single | double

Метод вычисления процентилей, заданный как 'exact' или 'approximate'. По умолчанию, prctile возвращает точные процентили путем реализации алгоритма, который использует сортировку. Можно задать 'method','approximate' для prctile вернуть аппроксимацию процентилей путем реализации алгоритма, который использует T-Digest.

Типы данных: char | string

Выходные аргументы

свернуть все

Процентилы вектора данных или массива, возвращенные в виде скаляра или массива для одного или нескольких процентных значений.

  • Если X является вектором, тогда Y - скаляр или вектор с той же длиной, что и количество запрашиваемых процентилей (length(p)). Y(i) содержит p(i)1й процентиль.

  • Если X - массив размерности d, затем Y - массив с длиной наименьшей рабочей размерности, равной количеству запрашиваемых процентилей (length(p)).

Подробнее о

свернуть все

Многомерный массив

Многомерный массив является массивом с более чем двумя размерностями. Для примера, если X является массивом 1 на 3 на 4, то X является трехмерный массив.

Несинглтон Размерность

Размерность несинглтона массива является размерностью, не равной 1. Первая размерность несинглтона массива является первой размерностью, который удовлетворяет условию несинглтона. Для примера, если X массив 1 на 1 на 2 на 4, тогда третья размерность - первая размерность неединичного предмета X.

Линейная интерполяция

Линейная интерполяция использует линейные полиномы, чтобы найти yi = f (xi), значения базовой функции Y = f (X) в точках в x вектора или массива. Учитывая точки данных (x 1, y 1) и (x 2, y 2), где y 1 = f (x 1) и y 2 = f (x 2), линейная интерполяция находит y = f (x) для заданного x между x 1 и x 2 следующим образом:

y=f(x)=y1+(xx1)(x2x1)(y2y1).

Точно так же, если 100-й (1,5/ n) процентиль составляет y 1,5/ n, а 100-й (2,5/ n) процентиль - y 2,5/ n, то линейная интерполяция находит 100 (2,3/ n) -й процентиль, y 2,3/ n как:

y2.3n=y1.5n+(2.3n1.5n)(2.5n1.5n)(y2.5ny1.5n).

T-Digest

T-digest [2] является вероятностной структурой данных, которая является разреженным представлением эмпирической кумулятивной функции распределения (CDF) набора данных. T-дайджест полезен для вычисления приближений основанной на рангах статистики (таких как процентили и квантили) из онлайновых или распределенных данных таким образом, чтобы это позволяло контролировать точность, особенно вблизи хвостов распределения данных.

Для данных, которые распределены в различных разделах, t-digest вычисляет оценки квантиля (и оценки процентиля) для каждого раздела данных отдельно, а затем объединяет оценки с сохранением постоянной памяти и постоянной относительной точности расчета (q(1q) для q-го квантиля). По этим причинам t-digest практичен для работы с длинными массивами.

Чтобы оценить квантования массива, который распределен в различных разделах, сначала создайте t-дайджест в каждом разделе данных. t-digest группирует данные в разделе и суммирует каждый кластер по центроидному значению и накопленному весу, которое представляет количество выборок, вносящих вклад в кластер. T-digest использует большие кластеры (широко разнесенные центроиды), чтобы представлять области CDF, которые близки q = 0.5 и использует небольшие кластеры (плотно расположенные центроиды), чтобы представлять области CDF, которые близки q = 0 или q = 1.

T-digest управляет размером кластера с помощью функции масштабирования, которая сопоставляет q квантования с индексом, k с параметром сжатия δ. То есть,

k(q,δ)=δ(sin1(2q1)π+12),

где k отображения монотонна с минимальным значением k (0, δ) = 0 и максимальным значением k (1, δ) = δ. Следующий рисунок показывает функцию масштабирования для δ = 10.

Функция масштабирования переводит q квантования в коэффициент масштабирования k в порядок, чтобы задать шаги переменного размера в q. В результате размеры кластера неравны (больше вокруг центральных величин и меньше вблизи q = 0 или q = 1). Меньшие кластеры обеспечивают лучшую точность вблизи ребер данных.

Чтобы обновить t-дайджест с новым наблюдением, которое имеет вес и расположение, найдите кластер, ближайший к новому наблюдению. Затем прибавьте вес и обновите центроид кластера на основе средневзвешенного среднего значения условии, что обновленный вес кластера не превышает ограничения по размеру.

Можно объединить независимые t-дайджесты из каждого раздела данных, взяв объединение t-дайджестов и объединив их центроиды. Чтобы объединить t-дайджесты, сначала отсортируйте кластеры из всех независимых t-дайджестов в порядке уменьшения весов кластеров. Затем объедините соседние кластеры, когда они удовлетворяют ограничению размера, чтобы сформировать новый t-дайджест.

Если вы формируете t-digest, который представляет полный набор данных, можно оценить конечные точки (или контуры) каждого кластера в t-digest, а затем использовать интерполяцию между конечными точками каждого кластера, чтобы найти точные оценки квантиля.

Алгоритмы

Для вектора n -element X, prctile возвращает процентилы с помощью основанного на сортировке алгоритма следующим образом:

  1. Отсортированные элементы в X приняты за 100 (0. 5/ n) -й, 100 (1. 5/ n) -й,..., 100 ([n - 0,5 ]/ n) -й процентил. Для примера:

    • Для вектора данных из пяти элементов, таких как {6, 3, 2, 10, 1}, отсортированные элементы {1, 2, 3, 6, 10} соответственно соответствуют 10-му, 30-му, 50-му, 70-му и 90-му процентилям.

    • Для вектора данных из шести элементов, таких как {6, 3, 2, 10, 8, 1}, отсортированные элементы {1, 2, 3, 6, 8, 10} соответственно соответствуют (50/6) th, (150/6) th, (250/6) th, (350/6) th и (450/6) th .

  2. prctile использует линейную интерполяцию для вычисления процентилей между 100 (0. 5/ n) и 100 ([n - 0,5 ]/ n).

  3. prctile присваивает минимальные или максимальные значения элементов в X к процентилам, соответствующим процентам вне этой области значений.

prctile лечит NaNs как отсутствующие значения и удаляет их.

Ссылки

[1] Langford, E. «Quartiles in Elementary Statistics», Journal of Statistics Education. Том 14, № 3, 2006.

Расширенные возможности

.
Представлено до R2006a