Процентилы набора данных
возвращает процентили элементов в векторе данных или массиве 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.
Сгенерируйте набор данных размера 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 tablet =
Mx1 tall table
ArrTime
_______
735
1124
2218
1431
746
1547
1052
1134
:
:
x = t{:,:} % Tall vectorx =
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 matrixX =
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.
X - Входные данныеВходные данные, заданные как вектор или массив.
Типы данных: double | single
p - Процентные долиПроценты, для которых можно вычислить процентилы, заданные как скаляр или вектор скаляров от 0 до 100.
Пример: 25
Пример: [25, 50, 75]
Типы данных: double | single
dim - РазмерностьРазмерность, по которой процентилы X запрашиваются в виде положительного целого числа. Для примера, для матрицы X, когда dim = 1, prctile возвращает процентиль (и) столбцов X; когда dim = 2, prctile возвращает процентиль (ы) строк X. Для многомерного массива X, длина dimI размерность Y равно длине p.
Типы данных: double | single
vecdim - Вектор размерностейВектор размерностей, заданный как положительный целочисленный вектор. Каждый элемент 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
method - Метод вычисления процентилей'exact' (по умолчанию) | 'approximate'Метод вычисления процентилей, заданный как 'exact' или 'approximate'. По умолчанию, prctile возвращает точные процентили путем реализации алгоритма, который использует сортировку. Можно задать 'method','approximate' для prctile вернуть аппроксимацию процентилей путем реализации алгоритма, который использует T-Digest.
Типы данных: char | string
Y - ПроцентилыПроцентилы вектора данных или массива, возвращенные в виде скаляра или массива для одного или нескольких процентных значений.
Если 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 следующим образом:
Точно так же, если 100-й (1,5/ n) процентиль составляет y 1,5/ n, а 100-й (2,5/ n) процентиль - y 2,5/ n, то линейная интерполяция находит 100 (2,3/ n) -й процентиль, y 2,3/ n как:
T-digest [2] является вероятностной структурой данных, которая является разреженным представлением эмпирической кумулятивной функции распределения (CDF) набора данных. T-дайджест полезен для вычисления приближений основанной на рангах статистики (таких как процентили и квантили) из онлайновых или распределенных данных таким образом, чтобы это позволяло контролировать точность, особенно вблизи хвостов распределения данных.
Для данных, которые распределены в различных разделах, t-digest вычисляет оценки квантиля (и оценки процентиля) для каждого раздела данных отдельно, а затем объединяет оценки с сохранением постоянной памяти и постоянной относительной точности расчета ( для q-го квантиля). По этим причинам t-digest практичен для работы с длинными массивами.
Чтобы оценить квантования массива, который распределен в различных разделах, сначала создайте t-дайджест в каждом разделе данных. t-digest группирует данные в разделе и суммирует каждый кластер по центроидному значению и накопленному весу, которое представляет количество выборок, вносящих вклад в кластер. T-digest использует большие кластеры (широко разнесенные центроиды), чтобы представлять области CDF, которые близки q = 0.5 и использует небольшие кластеры (плотно расположенные центроиды), чтобы представлять области CDF, которые близки q = 0 или q = 1.
T-digest управляет размером кластера с помощью функции масштабирования, которая сопоставляет q квантования с индексом, k с параметром сжатия . То есть,
где 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 возвращает процентилы с помощью основанного на сортировке алгоритма следующим образом:
Отсортированные элементы в 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 .
prctile использует линейную интерполяцию для вычисления процентилей между 100 (0. 5/ n) и 100 ([n - 0,5 ]/ n).
prctile присваивает минимальные или максимальные значения элементов в X к процентилам, соответствующим процентам вне этой области значений.
prctile лечит NaNs как отсутствующие значения и удаляет их.
[1] Langford, E. «Quartiles in Elementary Statistics», Journal of Statistics Education. Том 14, № 3, 2006.
[2] Dunning, T., and O. Ertl. Вычисление чрезвычайно точных квантований с использованием T-Digests. Август 2017 года.
Указания и ограничения по применению:
Y = prctile(X,p) возвращает точные процентили (используя основанный на сортировке алгоритм) только в том случае, если X - высокий вектор-столбец.
Y = prctile(X,p,dim) возвращает точные процентили только тогда, когда существует одно из следующих условий:
X - высокий вектор-столбец.
X является длинный массив и dim не 1. Для примера, prctile(X,p,2) возвращает точные процентили вдоль строк длинный массив X.
Если X является длинный массив и dim является 1, затем необходимо указать 'Method','approximate' использовать алгоритм приближения, основанный на T-Digest, для вычисления процентилей. Для примера, prctile(X,p,1,'Method','approximate') возвращает приблизительные процентили вдоль столбцов длинный массив X.
Y = prctile(X,p,vecdim) возвращает точные процентили только тогда, когда существует одно из следующих условий:
X - высокий вектор-столбец.
X является длинный массив и vecdim не включает 1. Для примера, если X массив 3 на 5 на 2, затем prctile(X,p,[2,3]) возвращает точные процентили элементов в каждом X(i,:,:) срез.
X является длинный массив и vecdim включает 1 и все нежесткие размерности X. Для примера, если X - массив 10 на 1 на 4, затем prctile(X,p,[1 3]) возвращает точные процентили элементов в X(:,1,:).
Если X является длинный массив и vecdim включает 1 но не включает все нежесткие размерности X, затем необходимо указать 'Method','approximate' для использования алгоритма приближения. Для примера, если X это массив 10 на 1 на 4, который можно использовать prctile(X,p,[1 2],'Method','approximate') найти приблизительные процентили каждой страницы X.
Для получения дополнительной информации см. Раздел «Длинные массивы»
Указания и ограничения по применению:
The 'all' и vecdim входные параметры не поддерживаются.
The 'Method' аргумент пары "имя-значение" не поддерживается.
The dim входной параметр должен быть константой времени компиляции.
Если вы не задаете dim входной параметр, рабочий (или рабочий) размерность может быть различным в сгенерированном коде. В результате могут возникнуть ошибок времени выполнения. Для получения дополнительной информации смотрите Автоматическое ограничение размерности (MATLAB Coder).
Если выход Y - вектор, ориентация Y отличается от MATLAB® когда все из следующих значений true:
Вы не поставляете dim.
X является массивом переменного размера, а не вектором переменного размера, во время компиляции, но X является вектором во время исполнения.
Ориентация вектора X не соответствует ориентации вектора p.
В этом случае выход Y соответствует ориентации X, а не ориентация p.
Для получения дополнительной информации о генерации кода смотрите Введение в генерацию кода и Рабочий процесс генерации общего кода.
Указания и ограничения по применению:
The 'all' и vecdim входные параметры не поддерживаются.
The 'Method' аргумент пары "имя-значение" не поддерживается.
Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.