MATLAB Answers

Inverse Cumulative Distribution Function for a Custom PDF.

23 views (last 30 days)
I'm looking for a function similar to norminv in wich you can sample data at the probability values in the vector p according to the normal distribution but I need to make it according to a custom probability distribution instead of the normal, always in the vector p but without the use of the original dataset wich generated the custom PDF.
Or in other words a icdf for a custom PDF function....Thanks!


Sign in to comment.

Accepted Answer

Jeff Miller
Jeff Miller on 7 Mar 2020
If you have the custom PDF function (call it custPDF), then you can compute the custom CDF function something like this:
function p = custCDF(x)
p = integral(@custPDF,LowerBound,x); % Modify AbsTol and RelTol to suit your needs
where LowerBound is some minimal value for your custom distribution.
Then you should be able to get the inverse CDF with this:
function x = custiCDF(p)
x = fzero( @(x) custCDF(x)-p, [LowerBound,UpperBound] );
where UpperBound is a maximal value.
It might be pretty slow, but it should work.


Emiliano Rosso
Emiliano Rosso on 7 Mar 2020
Thanks, but how to sample according to a vector points?
Jeff Miller
Jeff Miller on 8 Mar 2020
What vector? A vector of p values for which you want to look up inverses? In that case just use a for loop to call custiCDF for each one.
But maybe I misunderstood your original question. Do you actually only have a sample of data points from which you can estimate the custom PDF? This is different than having a function custPDF that returns PDF values. If that is your situation, I would give a different answer.
Emiliano Rosso
Emiliano Rosso on 8 Mar 2020
No,I misunderstood,I must call custiCDF for each one,

Sign in to comment.

More Answers (0)

Sign in to answer this question.