【问题标题】:Percentiles either side of the mean across a matrix - MATLAB矩阵中均值两侧的百分位数 - MATLAB
【发布时间】:2015-09-23 20:41:06
【问题描述】:

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

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%高于 Y”。

最好的方法是什么?

类似:

a = prctile(tcIED',0.90)

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

【问题讨论】:

  • 如果你想为每一行做索引,你必须索引每一行,即 a(:,1) = prctile(tcIED(:,1),0.90)
  • @GameOfThrows 不需要。 prctile 自动对其输入矩阵的每一列起作用
  • @LuisMendo 哦!我明白了,很高兴知道,谢谢你:)

标签: matlab percentile


【解决方案1】:

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

a = prctile(tcIED.', 90);

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

a = quantile(tcIED.', 0.9);

例如,使用您获得的数据

>> a(1)
ans =
        6190

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

【讨论】:

    猜你喜欢
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2018-03-16
    相关资源
    最近更新 更多