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

10

我有一个在MATLAB中的矩阵,需要找到每列的99%值。换句话说,就是使得99%的数据大于它的值。MATLAB中是否有此功能?

3个回答

11

最简单的解决方案是使用函数QUANTILE,正如yuk所建议的

Y = quantile(X,0.01);

然而,如果您要使用函数QUANTILE,则需要安装Statistics Toolbox。有一个不依赖于工具箱的解决方案,可以注意到QUANTILE调用函数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

这应该会给你与调用QUANTILE相同的结果,而无需任何工具箱。


请问这里的1%概率是什么意思?我正在尝试实现您的脚本来查找向量的内分位距,但经过几个小时还没有成功。非常感谢。 - chappi

11

使用QUANTILE函数。

Y = quantile(X,P);

其中X是一个矩阵,P是一个标量或概率向量。例如,如果P=0.01,则Y将是每列值的向量,使得99%的列值大于Y。


2
如果您没有统计工具箱,总有其他方法。
y=sort(x);
y(floor(length(y)*0.99))

或者

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

根据您的意思而定。


不幸的是,这通常不会产生与QUANTILE相同的结果。 - gnovice
@gnovice:没错,QUANTILE插值通常更精确。你在回答中模仿得很好,干得好! - AVB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接