exponenta event banner

prctile

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

Описание

пример

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

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

  • Если X является матрицей, то Y - вектор строки или матрица, где число строк Y равно количеству запрошенных процентилей (length(p)). 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,:).

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

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

mapreducer(0)

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

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

Создайте в верхней части хранилища данных таблицу высокого уровня и извлеките данные из таблицы высокого уровня в вектор высокого уровня.

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

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

Оцените массивы tall и внесите результаты в память с помощью 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 MATLAB ® использует либо параллельный пул (по умолчанию при наличии Toolbox™ Parallel Computing), либо локальный сеанс MATLAB. Для выполнения примера с использованием локального сеанса MATLAB при наличии панели инструментов Parallel Computing Toolbox измените глобальную среду выполнения с помощью mapreducer функция.

mapreducer(0)

Создание высокой матрицы X содержащий подмножество переменных из airlinesmall набор данных. Дополнительные сведения о шагах извлечения данных из массива высокого уровня см. в разделе Процентили вектора высокого уровня для заданного процента.

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

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

Оцените массивы tall и внесите результаты в память с помощью 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, длина dim-й размер 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)-й процентиль.

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

Подробнее

свернуть все

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

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

Измерение Nonsingleton

Несинглтон-размер массива - это размер, размер которого не равен 1. Первое несинглетонное измерение массива - это первое измерение, удовлетворяющее условию несинглтона. Например, если X множество 1 на 1 на 2 на 4, тогда третье измерение - первое измерение неединичного предмета X.

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

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

y = f (x) = y1 + (x x1) (x2 x1) (y2 − y1).

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

y2.3n=y1.5n + (2.3n−1.5n) (2.5n−1.5n) (y2.5n−y1.5n).

T-Дайджест

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

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

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

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

k (q, δ) =δ⋅ (sin 1 (2q 1) δ + 12),

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

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

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

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

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

Алгоритмы

Для вектора n-элемента 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), (150/6), (250/6), (350/6), (450/6) и (550/6 ).

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

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

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

Ссылки

[1] Лэнгфорд, Э. «Квартили в начальной статистике», Журнал статистики образования. т. 14, № 3, 2006.

[2] Напоминание, Т. и О. Эртль. «Вычисление чрезвычайно точных квантилей с помощью T-Digests». Август 2017 года.

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

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