Note
Go to the end to download the full example code.
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 parametrized by :
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 libraries 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, [1], [rho])
We define the distribution distF as the image through of the distribution:
distF = ot.CompositeDistribution(g, ot.Uniform(0.0, 1.0))
Now, we can draw its PDF, CDF and generate samples.
g = distF.drawPDF()
g.setTitle("A distribution based on the quantile function.")
g.setLegendPosition("")
view = View(g)
view.ShowAll()