矩阵中平均值任一侧的百分位数 - MATLAB

Percentiles either side of the mean across a matrix - MATLAB

我有一个这种形式的数据矩阵:

5400    5700    6200    5200    6100    5500
5500    5900    7000    5900    6200    6000
6100    10300   7500    6200    6500    6600
6800    10900   7900    9400    9600    6600
7300    12500   10600   13000   10000   7900
7300    15700   10600   13200   14000   9200
11700   16200   11000   14900   14600   10800
12500   16500   11800   18100   14600   12900
13400   17000   19200   19300   16900   17100
14000   18700   20900   19700   17700   17700
14600   18800   22900   20200   17900   18500
15000   20800   24400   20800   19900   18700
15700   21100   25400   21500   22300   19700
16800   22000   26400   21700   22300   23300

实际矩阵要大得多。

我想为每一行计算两个值,以百分位数描述平均值的变化范围,即“高于平均值的所有值中有 95% 低于 X,所有值中有 95% 低于 X平均落在 Y 以上。

最好的方法是什么?

类似于:

a = prctile(tcIED',0.90)

只产生一个值 - 这似乎也不准确(低于预期)。

您的方法是正确的,但是 prctile 需要 百分比(介于 0 和 100 之间)。所以:

a = prctile(tcIED.', 90);

或者,等效地,使用 quantile 比例 (在 01 之间):

a = quantile(tcIED.', 0.9);

例如,根据您的数据,您得到

>> a(1)
ans =
        6190

这意味着数据矩阵第 1 行中大约 90% 的值小于或等于 6190