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

时间:2010-03-05 06:35:32

标签: matlab matrix statistics percentile

我在MATLAB中有一个矩阵,我需要为每列找到99%的值。换句话说,这个价值使99%的人口拥有比它更大的价值。 MATLAB中是否有一个函数用于此?

3 个答案:

答案 0 :(得分:11)

使用QUANTILE功能。

Y = quantile(X,P);

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

答案 1 :(得分:10)

最简单的解决方案是将函数QUANTILE用作yuk suggested

Y = quantile(X,0.01);

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

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

这样可以提供与调用{{3}}相同的结果,而无需任何工具箱。

答案 2 :(得分:2)

如果您没有统计工具箱,则总是

y=sort(x);
y(floor(length(y)*0.99))

y(floor(length(y)*0.01))

取决于你的意思。