Create your own distribution given its quantile function¶
We want to create a distribution with CDF from the quantile function . In order to implement this, we use the CompositeDistribution class.
We know that the random variable is distributed according to if and only if is distributed according to the uniform distribution in the interval, i.e. . Hence, if then is distributed according to .
In this example, we want to create a distribution with CDF rho > 1`:
The quantile function is and writes:
Since , then . This is why we can simplify the expression and define the function such as:
Then is distributed according to the distribution.
First, we import the useful librairies and we create the symbolic function .
import openturns as ot from openturns.viewer import View
Then, we create the function with . To do this, we create a function which takes both and as inputs and returns . Then the g function is defined as a ParametricFunction with a fixed value of .
gWithParameter = ot.SymbolicFunction(["u", "rho"], ["log(-log(u)) / log(rho)"]) rho = 2.0 g = ot.ParametricFunction(gWithParameter, , [rho])
We define the distribution distF as the image through of the Uniform(0,1) distribution:
distF = ot.CompositeDistribution(g, ot.Uniform(0.0, 1.0))
Now, we can draw its pdf, cdf, sample it,…
g = distF.drawPDF() g.setTitle("A distribution based on the quantile function.") g.setLegendPosition("") view = View(g) view.ShowAll()
Total running time of the script: ( 0 minutes 0.097 seconds)