Как рассчитать процентильные доли в Matlab
У меня есть некоторые данные, содержащие информацию о переменной под названием "богатство".
Я хочу подсчитать доли тех, кто находится сверху в распределении, в середине и внизу. Вот сколько богатства принадлежит богатым, средним и бедным.
Аналогичным примером является получение 10000 случайных величин из гамма-распределения. Итак, предположим, что это распределение:
wealth = gamrnd(shape,scale,n,1);
Итак, как я могу рассчитать, сколько из этой переменной скажем, верхние 10%, нижние 90% и т. Д...
Может кто-нибудь помочь мне, как я могу сделать это в Matlab?
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
Для расчета процентилей вы можете использовать функцию Matlab prctile
, Одним из способов вызова функции является
prctile(X,p)
где X - ваш вектор, а p - процент в диапазоне [0-100]. Обратите внимание, что это будет то, что вы называете "нижний процент"
В вашем случае вы можете получить нижний n% следующим образом:
ninetyPercentBottom = prctile(X,n)
ninetyPercentBottomShare = sum(X(X<ninetyPercentBottom))/sum(X)
Если вам нужен "верхний процент", обратите внимание, что "нижний процент" n% совпадает с "верхним процентом" 100-n%, так что вы можете использовать эту идею, чтобы получить долю верхних n%
topPercentile = 10
tenPercentTop = prctile(X,100-topPercentile)
tenPercentTopShare = sum(X(X>tenPercentTop))/sum(X)