如何计算Matlab中的百分比份额

时间:2018-04-05 06:59:38

标签: matlab quantile percentile

我有一些数据包含有关名为“财富”的变量的信息。

我想计算那些在分布中,中间和底部位于顶部的人的份额。这就是富人,中间人和穷人拥有多少财富。

模拟示例是从伽马分布中绘制10000个随机变量,因此假设分布是这样的:

wealth = gamrnd(shape,scale,n,1);

那么我怎么能计算出这个变量有多少可以说是前10%,最低的90%等......

有人可以帮助我在Matlab中如何做到这一点吗?

2 个答案:

答案 0 :(得分:1)

您可以使用以下功能,该功能基于对数据进行排序:

function [ topVals, bottomVals ] = calcPercentile( x, percentile )
    sortedX = sort(x,'descend');
    m = int16(percentile*length(x));
    topVals = sortedX(1:m);
    bottomVals = sortedX(m+1:end);
end

用法示例:

%getting top 10% and bottom 90%
[ topVals, bottomVals ] = calcPercentile(x,0.1);
%getting top 40% and bottom 60%
[ topVals, bottomVals ] = calcPercentile(x,0.4);

结果:

topVals = 10
bottomVals =   9     8     7     6     5     4     3     2     1

topVals =  10     9     8     7
bottomVals =     6     5     4     3     2     1

答案 1 :(得分:1)

要计算百分位数,您可以使用matlab的函数prctile。调用该函数的方法之一是

prctile(X,p)

其中X是向量,p是[0-100]范围内的百分比。请注意,这将是您所说的"底部百分比"

在您的情况下,您可以按如下方式获得最低n%:

ninetyPercentBottom = prctile(X,n)
ninetyPercentBottomShare = sum(X(X<ninetyPercentBottom))/sum(X)

如果您想要&#34;最高百分比&#34;,请注意&#34;最低百分比&#34; n%与&#34;最高百分比相同&#34; 100-n%,因此您可以使用该想法获得前n%

的份额
topPercentile = 10
tenPercentTop = prctile(X,100-topPercentile)
tenPercentTopShare = sum(X(X>tenPercentTop))/sum(X)