prctile

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

Синтаксис

Y = prctile(X,p)
Y = prctile(X,p,'all')
Y = prctile(X,p,dim)
Y = prctile(X,p,vecdim)
Y = prctile(___,'Method',method)

Описание

пример

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

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

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

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

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

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

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

t = tall(ds) % Tall table
Starting parallel pool (parpool) using the 'local' profile ...
connected to 6 workers.

t =

  M×1 tall table

    ArrTime
    _______

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

  M×1 tall double column vector

         735
        1124
        2218
        1431
         746
        1547
        1052
        1134
         :
         :

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

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

  M×N×... tall double array

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

Preview deferred. Learn more.

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

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

  M×N×... tall double array

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

Preview deferred. Learn more.

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

[yExact,yApprox] = gather(yExact,yApprox)
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 4: Completed in 9.7 sec
- Pass 2 of 4: Completed in 0.7 sec
- Pass 3 of 4: Completed in 1.8 sec
- Pass 4 of 4: Completed in 1 sec
Evaluation completed in 16 sec
yExact = 1522
yApprox = 1.5220e+03

Значения аппроксимированной процентили и точной процентили являются тем же самым к этим четырем показанным цифрам.

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

Создайте высокий матричный 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
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).
X = t{:,varnames} % Tall matrix
X =

  M×4 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-обзора.

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

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

  M×N×... tall double array

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

Preview deferred. Learn more.

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

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

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

  M×N×... tall double array

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

Preview deferred. Learn more.

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

[Yexact,Yapprox] = gather(Yexact,Yapprox);
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 9.9 sec
Evaluation completed in 12 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 th размерность 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-обзор.

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

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

свернуть все

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

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

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

Больше о

свернуть все

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

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

Неодноэлементная размерность

Первая неодноэлементная размерность является первой размерностью массива, размер которого не равен 1. Например, если X 1 2 массивом 3 на 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) th процентиль является y 1.5/n, и 100 (2.5/n) th процентиль y 2.5/n, то линейная интерполяция находит 100 (2.3/n) th процентиль, y 2.3/n как:

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

T-обзор

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

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

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

T-обзор управляет размером кластера при помощи масштабирующейся функции, которая сопоставляет квантиль 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-обзор, который представляет набор полных данных, можно оценить конечные точки (или контуры) каждого кластера в t-обзоре и затем использовать интерполяцию между конечными точками каждого кластера, чтобы найти точные оценки квантиля.

Алгоритмы

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

  1. Отсортированные элементы в X взяты в качестве 100 (0.5/n) th, 100 (1.5/n) th..., 100 ([n – 0.5]/n) th процентили. Например:

    • Для вектора данных пяти элементов такой как {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, и (550/6) th процентили.

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

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

prctile обрабатывает NaN s как отсутствующие значения и удаляет их.

Ссылки

[1] Лэнгфорд, E. “Квартили в элементарной статистике”, журнал образования статистики. Издание 14, № 3, 2006.

[2] Причинение беспокойства, T. и О. Эртл. “Вычисляя чрезвычайно Точные квантили Используя T-обзоры. Август 2017.

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

Смотрите также

| | |

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