Как рассчитать процентильные доли в 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)
Другие вопросы по тегам