我有一些数据包含有关名为“财富”的变量的信息。
我想计算那些在分布中,中间和底部位于顶部的人的份额。这就是富人,中间人和穷人拥有多少财富。
模拟示例是从伽马分布中绘制10000个随机变量,因此假设分布是这样的:
wealth = gamrnd(shape,scale,n,1);
那么我怎么能计算出这个变量有多少可以说是前10%,最低的90%等......
有人可以帮助我在Matlab中如何做到这一点吗?
答案 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)