文档

prctile

数据集的百分位数

描述

例子

Y= prctile (Xp返回数据向量或数组中元素的百分位数X的百分比p在区间[0,100]中。

  • 如果X是向量吗Y与所请求的百分位数数量长度相同的标量或向量(长度(p)).Y(我)包含了p(我)百分位。

  • 如果X是矩阵吗Y是行向量还是矩阵,其中的行数是多少Y等于所请求的百分位数(长度(p)).的th排Y包含了p(我)的每列的百分位数X

  • 多维数组prctile沿着第一个nonsingleton维度X

例子

Y= prctile (Xp, '所有')的所有元素的百分位数X

例子

Y= prctile (Xp昏暗的返回操作维度上的百分比昏暗的

例子

Y= prctile (Xpvecdim返回在向量中指定的维度上的百分比vecdim.例如,如果X是矩阵吗prctile (X 50 [1 - 2])的所有元素的第50个百分位X因为矩阵的每个元素都包含在维1和维2定义的数组切片中。

例子

Y= prctile (___“方法”,方法的值返回精确或近似的百分比方法,使用前面语法中的任何输入参数组合。

例子

全部折叠

生成一个大小为10的数据集。

rng (“默认”);%的再现性x = normrnd(5、2、1,10)
x =1×106.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 =重塑(1:30,[3 5 2])
X = X(:,:,1) = 14 7 10 13 25 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],“所有”
Y =2×112.5000 - 18.5000

Y (1)是第40百分位吗X,Y (2)的第60百分位X

沿着数据矩阵的列和行计算指定百分比的百分比。

生成一个5乘5的数据矩阵。

X = (1:5) * (2:6)
X =5×52 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×53.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×32.7500 4.0000 5.2500 5.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 =重塑(1:30,[3 5 2])
X = X(:,:,1) = 14 7 10 13 25 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])
9.5000 Ypage(:,:,1) = 21.5000 24.5000

例如,Ypage (1, 1, 1)第一页的第40百分位X,Ypage (2, 1, 1)第一页的第60百分位X

计算每个元素的第40和第60百分位X(:,我,:)通过指定尺寸1和3作为操作尺寸进行切片。

Ycol = prctile(X,[40 60],[1 3])
Ycol =2×52.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®使用并行池(如果您有并行计算工具箱™则默认)或本地MATLAB会话。如果在拥有并行计算工具箱的情况下,希望使用本地MATLAB会话运行示例,则可以通过使用mapreduce函数。

对象的数据存储airlinesmall数据集。治疗“NA”值作为缺失的数据,因此数据存储取代他们值。指定使用ArrTime变量。

ds =数据存储(“airlinesmall.csv”“TreatAsMissing”“NA”...“SelectedVariableNames”“ArrTime”);

在数据存储上创建一个高表,并将数据从高表提取到一个高向量中。

t =高(ds)%高表
使用“本地”配置文件启动并行池(parpool)…连接到并行池(工人数量:4). t = Mx1高表ArrTime _______ 735 1124 2218 1431 746 1547 1052 1134::
x = t {:,:}%高矢量
x = Mx1高双列向量735 1124 2218 1431 746 1547 1052 1134::

精确计算百分之五十x.因为x高列向量和p是一个标量,prctile默认情况下返回精确的百分位值。

p = 50;yExact = prctile (x, p)
yExact =高双?

计算x的大约第50百分位。指定“方法”,“近似”使用一种近似算法T-Digest用于计算百分位数。

yApprox = prctile (x p“方法”“近似”
yApprox = MxNx……高双数组???...???...? ? ? ... : : : : : :

对高数组求值并将结果存入内存收集

[yExact, yApprox] =收集(yExact yApprox)
使用并行池“local”计算高表达式:-通过1 / 4:在6.4秒内完成-通过2 / 4:在1.3秒内完成-通过3 / 4:在2.1秒内完成-通过4:在1.7秒内完成评估在15秒内完成
yExact = 1522
yApprox = 1.5220 e + 03

近似百分位数和精确百分位数的值与所示的四位数字相同。

计算一个高矩阵的精确和近似百分比,得到不同维度上的特定百分比。

当您在高数组上执行计算时,MATLAB®使用并行池(如果您有并行计算工具箱™则默认)或本地MATLAB会话。如果在拥有并行计算工具箱的情况下,希望使用本地MATLAB会话运行示例,则可以通过使用mapreduce函数。

创建一个高大的矩阵X控件中的变量子集airlinesmall数据集。看到给定百分比的高向量百分比有关从高数组中提取数据的步骤的详细信息。

varnames = {“ArrDelay”“ArrTime”“DepTime”“ActualElapsedTime”};%数据集中变量的子集ds =数据存储(“airlinesmall.csv”“TreatAsMissing”“NA”...“SelectedVariableNames”, varnames);%数据存储t =高(ds);%高表
使用“本地”配置文件启动并行池(parpool)…连接到并行池(工人数量:4)。
X = t {:, varnames}%高矩阵
X = Mx4高双矩阵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];百分比向量Yexact = prctile (X p 2)
Yexact = MxNx……高双数组???...???...? ? ? ... : : : : : :

当函数在第一个维度和p是百分比的向量,您必须使用基于t摘要的近似算法来计算百分比。使用基于排序的算法沿着高数组的第一个维度找到百分位是计算量很大的。

计算大约第25、50和75个百分位X沿着第一个维度。因为默认维度是1,所以不需要为的指定值昏暗的

Yapprox = prctile (X p“方法”“近似”
Yapprox = MxNx……高双数组???...???...? ? ? ... : : : : : :

对高数组求值并将结果存入内存收集

[Yexact, Yapprox] =收集(Yexact Yapprox);
使用并行池“local”计算高表达式:-通过1 / 1:在6.5秒内完成计算,在8.6秒内完成

显示第25百分位、第50百分位和第75百分位的前五行X

: Yexact (1:5)
ans =5×3103.× 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.5347.5,688.5第一行的第25百分位、第50百分位和第75百分位在吗X

显示大约第25,50,和75个百分位X沿着第一个维度。

Yapprox
Yapprox =3×4103.× -0.0070 1.1149 0.9322 0.0700 0 1.5220 1.3350 0.1020 0.0110 1.9180 1.7400 0.1510

矩阵的每一列Yapprox对应于矩阵每一列的三个百分位X.例如,的第一列Yapprox的元素(- 7,0,11)包含的第一列的百分位数X

输入参数

全部折叠

输入数据,指定为向量或数组。

数据类型:|

要为其计算百分位数的百分比,指定为从0到100的标量或标量向量。

例子:25

例子:(25、50、75)

数据类型:|

的百分位沿此方向的尺寸X请求,指定为正整数。例如,对于一个矩阵X,当昏暗的= 1,prctile的列的百分位X;当昏暗的= 2,prctile的行的百分位X.对于多维数组X的长度昏暗的th尺寸Y等于的长度p

数据类型:|

维数的向量,指定为正整数向量。的每个元素vecdim表示输入数组的维度X.输出Y长度长度(p)在最小的指定操作尺寸(即尺寸)中分钟(vecdim)),其余每个操作尺寸的长度都为1。其他维度的长度是一样的X而且Y

例如,考虑一个2 × 3 × 3的数组XP = [20 40 60 80].在这种情况下,prctile (X p [1 - 2])返回一个数组,其中数组的每一页都包含相应页的元素的第20、40、60和80个百分位X.因为1和2是运算维度Min ([1 2]) = 1而且长度(p) = 4,输出是一个4 × 1 × 3的数组。

数据类型:|

百分比的计算方法,指定为“准确”“近似”.默认情况下,prctile返回精确的百分位数算法使用排序。您可以指定“方法”,“近似”prctile通过实现使用的算法来返回近似的百分比T-Digest

数据类型:字符|字符串

输出参数

全部折叠

数据向量或数组的百分比,作为一个或多个百分比值的标量或数组返回。

  • 如果X是向量吗Y与所请求的百分位数数量长度相同的标量或向量(长度(p)).Y(我)包含了p(我)百分位。

  • 如果X数组是维数吗d,然后Y是一个数组,其最小操作维的长度等于所请求的百分位数(长度(p)).

更多关于

全部折叠

多维数组

一个多维数组是具有两个以上维度的数组。例如,如果X是一个1 × 3 × 4的数组,那么X就是一个3-D数组。

Nonsingleton维度

一个nonsingleton维度的值是其大小不等于1的维数。一个第一个nonsingleton维度是满足非单例条件的第一个维度。例如,如果X是1 × 1 × 2 × 4数组,那么第三维是的第一个非单维X

线性插值

线性插值用线性多项式来求y= f (x),表示基础函数的值Y= f (X)在向量或数组中的点上x.给定数据点(x1y1)和(x2y2),y1= f (x1),y2= f (x2),线性插值发现y= f (x)对于一个给定的x之间的x1而且x2如下:

y f x y 1 + x x 1 x 2 x 1 y 2 y 1

类似地,如果100(1.5/n) th百分位y1.5 /n100 (2.5 /n) th百分位y2.5 /n,则线性插值得到100(2.3/n) th百分位,y2.3 /n为:

y 2.3 n y 1.5 n + 2.3 n 1.5 n 2.5 n 1.5 n y 2.5 n y 1.5 n

T-Digest

T-digest[2]是一种概率数据结构,它是数据集经验累积分布函数(CDF)的稀疏表示。t -摘要用于从在线或分布式数据中计算基于排名的统计信息(如百分位数和分位数)的近近值,这种近近值允许控制精度,特别是接近数据分布的尾部。

对于分布在不同分区中的数据,t-digest分别计算每个数据分区的分位数估计(和百分位估计),然后在保持恒定的内存边界和恒定的计算相对精度( 1 分位数)。由于这些原因,t-digest对于处理高数组非常实用。

要估计分布在不同分区中的数组的分位数,首先在数据的每个分区中构建一个t摘要。t摘要对分区中的数据进行聚类,并通过质心值和表示对聚类有贡献的样本数量的累积权重对每个聚类进行总结。T-digest使用大的聚类(间距很大的质心)来表示CDF附近的区域= 0.5并使用小簇(紧密间隔的质心)来表示CDF附近的区域= 0= 1

T-digest通过使用映射分位数的缩放函数来控制簇的大小一个索引k带有压缩参数的 δ .也就是说,

k δ δ 1 2 1 π + 1 2

的映射k是否具有最小值的单调性k(0,δ) = 0和最大价值k(1,δ) =δ.的伸缩函数δ= 10

缩放函数转换分位数缩放因子k为了给可变大小的步骤.因此,簇的大小是不相等的(在中心分位数周围较大,而在附近较小= 0= 1).簇越小,数据边缘的精确度越高。

要用一个具有权重和位置的新观察值更新t摘要,请找到离新观察值最近的集群。然后,添加权重,并根据加权平均更新聚类的质心,前提是更新后的聚类权重不超过大小限制。

通过取t-摘要的并集并其中心,可以组合来自数据每个分区的独立t-摘要。要组合t-摘要,首先从所有独立的t-摘要中按簇权重递减顺序对簇进行排序。然后,当邻近的集群满足大小限制时,合并它们,形成一个新的t摘要。

一旦形成了表示完整数据集的t摘要,就可以估计t摘要中每个聚类的端点(或边界),然后使用每个聚类端点之间的插值来查找精确的分位数估计。

算法

对于一个n元向量Xprctile使用基于排序的算法返回百分位数,如下所示:

  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个元素(如{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对待S作为缺失的值并删除它们。

参考文献

《基础统计学中的四分位数》,统计教育杂志.2006年第14卷第3期。

[2]邓宁,T.和O. Ertl。”使用t摘要计算极其精确的分位数。2017年8月”。

扩展功能

之前介绍过的R2006a