[Math] Random number generation inside an interval based on cdf (Zipf and Exponential)

probability distributionsrandom

Consider for example the Exponential distribution with c.d.f. $F(x) = 1-e^{-\lambda x}$.

$F^{-1}(x)$ would be inverse cdf (quantile function). If I generate y=F−1(x) with x uniformily distributed on [0,1], then y will follow..

If I generate $y = F^{-1}(x)$ with x uniformly distributed on $0 \lt x \lt 1$, then y will follow the specific distribution.

So I have an idea but i don't know if it is realizable:

For different values of x, where $0 \lt x \lt 1$, if we can get 1000 random numbers with the equation, $y= F^{-1}(x)$. (lets assume, we get 10,4,5,77,2,11,10,….).
Can we generate this 1000 random values in interval (for example) 0-100?
Hence, whether it is possible to generate random numbers "inside an interval" for exponential (and other distributions, in particular Zipf distribution).

UPDATE:
If we consider the Zipf Distribution that has (from Wikipedia):
$$ pdf(x) = \frac{1}{x^s \times H_{N,s}} $$
$$ cdf(x) = \frac{H_{x,s}}{H_{N,s}} $$

where $s \gt 0$ is the scale parameter, H is the Harmonic number $H_{N,s} = \sum_{i=1}^N \frac{1}{i^s}$

How can i generate a random generator "inside an interval" (for example from 1 to 100)?
Thank you

Best Answer

The quantile function $x = Q(q)$ maps unit interval into the domain of your distribution, which is $\mathbb{R}^+$ in your case. One can perform the truncation of this distribution to any interval measurable with your distribution. Let it be $a<=x<b$. Then the c.d.f. of the truncated distribution will be $F_{[a,b)}(x) = \chi_{[a,b)}(x) (F(x)-F(a) )/(F(b)-F(a))$, where the $\chi$ is the indicator function for the interval. It is also easy to find quantile of this truncated distribution. $Q_{[a,b)}(q) = Q(F(a) + q*(F(b)-F(a))$. This last statement gives your algorithm to generate random numbers.

Here is the simulation experiment for standard exponential truncated to interval $[0,2)$.

histogram of random sample generated by the described method


EDIT

Quantile of Zipf distribution is not available in closed form, but can be numerically computed by finding the $$Q(q) = \mathop{sup} \{ x \in \mathcal{D} : cdf(x) \leq q \}$$

Once this is implemented, you can generate random variates from the truncated Zipf distribution (albeit the method is not very efficient) as so:

lb=1; ub=6;
di = ZipfDistribution[3/2];
fa = CDF[di, lb-1]; fb = CDF[di, ub];
Q[q_] := Quantile[di, fa + q*(fb - fa)]

Histogram of truncated zipf random sample