# A uniform way to generate a random element based on a given probability distritution function, a random number genarator and a given element interval?

**URL:** <https://discourse.julialang.org/t/a-uniform-way-to-generate-a-random-element-based-on-a-given-probability-distritution-function-a-random-number-genarator-and-a-given-element-interval/19843>\
**Category:** Statistics\
**Created:** [January 20, 2019, 2:39pm UTC](https://discourse.julialang.org/t/a-uniform-way-to-generate-a-random-element-based-on-a-given-probability-distritution-function-a-random-number-genarator-and-a-given-element-interval/19843 "2019-01-20T14:39:17Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![bsnyh](https://avatars.discourse-cdn.com/v4/letter/b/ce7236/32.png) [@bsnyh](https://discourse.julialang.org/u/bsnyh)\
**Post date:** [January 20, 2019, 2:39pm UTC](https://discourse.julialang.org/t/a-uniform-way-to-generate-a-random-element-based-on-a-given-probability-distritution-function-a-random-number-genarator-and-a-given-element-interval/19843/1 "2019-01-20T14:39:17Z")

</div>

Dispatching is one of Julia’s strong suits. I was wondering, is there a single function which would generate a  
random element based on a given probability distribution function, a random number genarator and a given element interval? I’m using Julia 0.7. If not, what are your suggestions?

I’m talking about something similar to the fit\_mle(D, x, w) method in the DIstribution.jl.

> [`Distributions.fit_mle`](https://juliastats.github.io/Distributions.jl/stable/fit.html#Distributions.fit_mle-Tuple%7BAny,Any,Any%7D) — Method.
> 
> ```julia
> fit_mle(D, x, w)
> 
> ```
> 
> Fit a distribution of type `D` to a weighted data set `x` , with weights given by `w` .
> 
> Here, `w` should be an array with length `n` , where `n` is the number of samples contained in `x` .
> 
> [source](https://github.com/JuliaStats/Distributions.jl/tree/ebeab79ff28f144506f6aa51b284b67486283ba0/src/genericfit.jl#L18-L24)
> 
> ### [Applicable distributions](https://juliastats.github.io/Distributions.jl/stable/fit.html#Applicable-distributions-1)
> 
> The `fit_mle` method has been implemented for the following distributions:
> 
> **Univariate:**
> 
> - [`Bernoulli`](https://juliastats.github.io/Distributions.jl/stable/univariate.html#Distributions.Bernoulli)
> - [`Beta`](https://juliastats.github.io/Distributions.jl/stable/univariate.html#Distributions.Beta)
> - [`Binomial`](https://juliastats.github.io/Distributions.jl/stable/univariate.html#Distributions.Binomial)
> - [`Categorical`](https://juliastats.github.io/Distributions.jl/stable/univariate.html#Distributions.Categorical)
> - [`DiscreteUniform`](https://juliastats.github.io/Distributions.jl/stable/univariate.html#Distributions.DiscreteUniform)
> - [`Exponential`](https://juliastats.github.io/Distributions.jl/stable/univariate.html#Distributions.Exponential)
> - [`Normal`](https://juliastats.github.io/Distributions.jl/stable/univariate.html#Distributions.Normal)
> - [`Gamma`](https://juliastats.github.io/Distributions.jl/stable/univariate.html#Distributions.Gamma)
> - [`Geometric`](https://juliastats.github.io/Distributions.jl/stable/univariate.html#Distributions.Geometric)
> - [`Laplace`](https://juliastats.github.io/Distributions.jl/stable/univariate.html#Distributions.Laplace)
> - [`Pareto`](https://juliastats.github.io/Distributions.jl/stable/univariate.html#Distributions.Pareto)
> - [`Poisson`](https://juliastats.github.io/Distributions.jl/stable/univariate.html#Distributions.Poisson)
> - [`Uniform`](https://juliastats.github.io/Distributions.jl/stable/univariate.html#Distributions.Uniform)
> 
> **Multivariate:**
> 
> - [`Multinomial`](https://juliastats.github.io/Distributions.jl/stable/multivariate.html#Distributions.Multinomial)
> - [`MvNormal`](https://juliastats.github.io/Distributions.jl/stable/multivariate.html#Distributions.MvNormal)
> - [`Dirichlet`](https://juliastats.github.io/Distributions.jl/stable/multivariate.html#Distributions.Dirichlet)

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [January 20, 2019, 3:18pm UTC](https://discourse.julialang.org/t/a-uniform-way-to-generate-a-random-element-based-on-a-given-probability-distritution-function-a-random-number-genarator-and-a-given-element-interval/19843/2 "2019-01-20T15:18:17Z")

</div>

> [@bsnyh](#):
>
> is there a single function which would generate a  
> random element based on a given probability distribution function, a random number genarator and a given element interval?

For univariate distributions, that’s pretty much what `rand` does, when you truncate distributions, see

[https://juliastats.github.io/Distributions.jl/latest/truncate.html](https://juliastats.github.io/Distributions.jl/latest/truncate.html)

For multivariate distributions, there is no general efficient algorithm for ensuring that the result is withing a given interval. You will have to come up with something specialized, or iterate until the result is in the box, but that may be horribly inefficient if the probability mass there is small.
