【问题标题】:How to calculate percentile shares in Matlab如何在Matlab中计算百分位份额
【发布时间】:2018-09-14 21:37:13
【问题描述】:

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

我想计算分布中处于顶部、中间和底部的那些人的份额。这就是富人、中产阶级和穷人拥有多少财富。

类比的例子是从一个伽马分布中抽取10000个随机变量,所以假设分布是这个:

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

那么我如何计算这个变量中有多少是前 10%、后 90% 等...

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

【问题讨论】:

  • 计算百分位数可以使用matlab的函数prctile。做你想做的事可能会有帮助。

标签: matlab quantile percentile


【解决方案1】:

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

prctile(X,p)

其中 X 是您的向量,p 是 [0-100] 范围内的百分比。请注意,这就是您所说的“最低百分比”

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

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

如果要“top percent”,注意“bottom percent”n%和“top percent”100-n%是一样的,所以可以用这个思路来得到top n%的份额

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

【讨论】:

  • 请注意,这需要统计和机器学习工具箱
  • 您需要使用 (..),而不是括号 [...]。另外,我还认为,要获得总财富的份额,您必须除以“sum(X)”。那么,sum(X(X>tenPercentTop))/sum(X).....你怎么看?
  • @msh855 是的。你的两个cmets都是对的。我将相应地编辑我的答案
【解决方案2】:

您可以使用以下基于数据排序的功能:

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

【讨论】:

  • 这不计算份额,现在?对于我拥有的财富数据,我想问这样的问题:进入前 10%、后 90% 等的总财富的份额是多少?所以,在你的例子中,我应该取值的平均值计算并除以这个向量的聚合,或者没有??
  • 你只需要把x换成财富
  • 谢谢。但是,如果我必须更加灵活才能查看其他百分位数组,例如 20%、底部 40%,我不确定我是否完全理解我应该如何去做。
  • 我编辑了我的答案,你可以使用那里描述的功能
  • 再次抱歉,虽然我的结果正确,但有一条烦人的消息“警告:用作索引时冒号运算符需要整数操作数”......我仍然可以做我想做的事,但是我将其标记出来,看看您的功能是否可以进一步推广。
猜你喜欢
  • 1970-01-01
  • 2013-08-31
  • 2016-04-12
  • 2016-07-12
  • 2015-03-09
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
相关资源
最近更新 更多