如何在MATLAB中计算99%的覆盖率?

sfa*_*tor 10 statistics matlab matrix percentile

我在MATLAB中有一个矩阵,我需要为每列找到99%的值.换句话说,这个价值使99%的人口拥有比它更大的价值.MATLAB中有这个功能吗?

yuk*_*yuk 11

使用QUANTILE功能.

Y = quantile(X,P);
Run Code Online (Sandbox Code Playgroud)

其中X是矩阵,P是标量或概率向量.例如,如果P = 0.01,则Y将是每列的值的向量,因此99%的列值更大.


gno*_*ice 10

最简单的解决方案是使用QUANTILE作为yuk建议的功能.

Y = quantile(X,0.01);
Run Code Online (Sandbox Code Playgroud)

但是,您需要统计工具箱才能使用QUANTILE功能.通过注意QUANTILE调用函数PRCTILE可以找到不依赖于工具箱的解决方案,PRCTILE本身调用内置函数INTERP1Q来进行主要计算.对于不包含NaN值的二维矩阵的一般情况,您可以使用以下代码计算每列的分位数:

P = 0.01;       %# Your probability
S = sort(X);    %# Sort the columns of your data X
N = size(X,1);  %# The number of rows of X
Y = interp1q([0 (0.5:(N-0.5))./N 1]',S([1 1:N N],:),P);  %'# Get the quantiles
Run Code Online (Sandbox Code Playgroud)

这应该给你与调用QUANTILE相同的结果,而不需要任何工具箱.