Here, I’ve made an example for Interpolations.jl:
julia> using Interpolations, Plots, ImageFiltering
julia> percentile_values = [0.0, 0.01, 0.1,
1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0,
10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0,
90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0,
99.9, 99.99, 100.0];
julia> y = sort(randn(length(percentile_values))); # just some random data
julia> smoothed_y = imfilter(y, ImageFiltering.Kernel.gaussian((3,))); # smoothing to get a more reasonable-looking PDF
julia> itp_cdf = extrapolate(interpolate(smoothed_y, percentile_values, SteffenMonotonicInterpolation()), Flat()); # you can change SteffenMonotonicInterpolation to some other monotonic algorithm from Interpolations.jl
julia> itp_pdf(t) = Interpolations.gradient1(itp_cdf, t); # this is the PDF generate
julia> t = -3.0:0.01:3.0 # just a range for plotting
julia> plot(t, itp_cdf.(t)) # plotting the CDF
julia> plot(t, itp_pdf.(t)) # plotting the PDF
I’ll try to improve docs for Interpolations.jl soon.