# Percentiles without Statistics Toolbox

44 views (last 30 days)
ava mazaheri on 26 Nov 2020
Commented: Star Strider on 26 Nov 2020
Hi,
I have a bunch of histograms from which I need to extract some percentiles (10th, 50th and 90th).
I know about the prctile function, but it requires the Statistics Toolbox in Matlab which I do not have. The only toolbox I have is the Signal Processing Toolbox.
Is there a way of obtaining percentiles other than the prctile function?
//AM

Star Strider on 26 Nov 2020
Try this:
x = 3*randn(1,100)+5; % Create Data
figure
yyaxis left
h = histogram(x, 20);
hold on
barvals = h.Values;
edgs = h.BinEdges;
ctrs = edgs(1:end-1) + (diff(edgs)/2); % Calculate Bar Center Locations
plot(ctrs, barvals, '+r')
hold off
ylabel('Number')
auc = 100*cumsum(barvals)/sum(barvals)+(0:numel(barvals)-1)*eps*100; % Cumulative Area
prctls = [10, 50, 90]; % Desired Percentiles
prctlctrs = interp1(auc, ctrs, prctls); % Percentile X-Locations
yyaxis right
plot(prctlctrs, prctls, 'dg', 'MarkerFaceColor','g') % Plot Percentiles
hold on
plot(ctrs, auc, '--k') % Plot Area (Optional)
hold off
grid
ylim([0 100])
xlabel('X')
ylabel('Cumulative Percent')
text(prctlctrs, prctls, sprintfc('%2d^{th} Percentile = %5.2f\\rightarrow ', [prctls; prctlctrs].'), 'HorizontalAlignment','right', 'VerticalAlignment','middle')
legend('Histogram', 'Centres', 'Percentiles', 'Area', 'Location','E')
.

ava mazaheri on 26 Nov 2020
Gave a perfect plot, thanks a lot!
Star Strider on 26 Nov 2020
As always, my pleasure!