Inverse Transform Method for simulating continuous random variables.

 

Let X be a random variable with c.d.f. FX (x). Since FX (x) is a nondecreasing function, the inverse function FX-1 (y) may be defined for any value of y between 0 and 1 as:

 

FX-1 (y) = inf{ x: FX (x) >= y} 0<= y <= 1

 

FX-1 (y) is defined to equal that value x for which F(x)=y.

 

Let us proof that if U is uniformly distributed over the interval (0, 1), then

X = FX-1 (U)

 

has c.d.f. FX (x).

 

The proof:

 

P(X <= x) = P(FX-1 (U) <= x) = P(U <= FX (x)) = FX (x).

 

So to get a value, say x, of a random variable X, obtain a value, say u, of a random variable U, compute FX-1 (U) , and set it equal to x.

 

Example 1: Generate a random variable from the uniform distribution U(a, b):

 

The c.d.f. is

 

X = = a + (b - a)U

 

Example 2: Generate a random variable from the exponential distribution Exp():

 

 

=

 

Example 3: Generate a random variable with p.d.f.

 

U = X2

X = = U1/2

 

Example 4: Let be i.i.d. random variable distributed .

Define and .

Generate and .

 

The distributions of and are respectively:

 

 

 

 

 

 

In the particular case where X = U we have

=

and

=

 

To apply this method FX (x) must exist in a form for which the corresponding inverse transform can be found analytically. Distributions in this group are exponential, uniform, Weibull, logistic, and Cauchy. Unfortunately, for many probability distributions it is either impossible or extremely difficult to find the inverse transform, that is to solve

with respect to x.

 

 

 

Inverse Transform Method for simulating discrete random variables.

 

The Inverse Transform Method for simulating from continuous random variables have analog in the discrete case. For instance, if we want to simulate a random variable X having p.d.f.

P(X = xj) = Pj j=0, 1, ...

 

 

To simulate X for which P(X = xj) = Pj let U be uniformly distributed over (0, 1), and set

 

As,

 

we see that X has the desired distribution.

 

Example 1: Generating a Bernoulli random variable.

 

P(X = 1) = p, P(X = 0) = 1 - p

The algorithm:

 

1) generate U ~ U(0, 1)

 

2) if U < 1 - p or p < 1 - U or U > p then X = 0, otherwise X = 1.

 

 

Example 2: Let be a. random variable distributed

.

Generate a random variable with the above distribution.

 

 

Algorithm 1:

 

1) generate U ~ U(0,1)

2) if U<0.2 --> X=1

3) if U<0.5 --> X=2

4) if U<1 --> X=3

 

Algorithm 2:

 

1) generate U ~ U(0,1)

2) if U<0.5 --> X=3

3) if U<0.8 --> X=2

4) if U<1 --> X=1

 

Example 3: Generating a geometric random variables.

 

Suppose we want to simulate X such that

 

P(X = i) = p(1 - p)i-1, i >= 1

 

X can be thought of as representing the time of the first success when independent trials, each of which is a success with probability p, are performed.

As

since j-1 trials are all failures.

 

We can simulate such a random variable by generating a random variable U and then setting X equal to that value j for which

 

1 - (1 - p)j-1 < U < 1 - (1 - p)j

 

or, equivalently, for which

(1 - p)j < 1 - U < (1 - p)j-1

 

or, equivalently, for which

(1 - p)j < U < (1 - p)j-1

 

We can thus define X by

 

X = min{j: (1 - p) j < U} = min{j: j > log(U)/log(1 - p)}

 

= 1 + [log(U)/log(1 - p)]

 

Example 4: Simulating a binomial random variable.

 

A binomial (n, p) random variable can be most easily simulated as the sum of n independent Bernoulli random variables.

That is, if U1, . . . Un are independent uniform U(0, 1) variables, then setting

 

it follows that is a binomial random variable with parameters n and p.

 

One difficulty with the above procedure is that is requires the generation of n random numbers. To show how to reduce the number of random numbers needed, note first that the above procedure does not use the actual value of a random number U but only whether or not it exceeds p.

Recall that

, i = 0,1,,n

 

We employ the inverse transform method by making use of the recursive identity

 

 

With i denoting the value currently under consideration, pr = P(X = i) the probability that X is equal to i, and F = F(i) is the probability that X is less than or equal to i, the algorithm can be expressed as follows:

 

1.      Generate a random number U.

2.      c = p/(1-p), i = 0, , F = pr.

3.      If U < F, set X = i and stop.

4.      pr = c(n i)/(i + 1))pr, F = F + pr, i = i + 1.

5.      Go to 3.

 

The preceding algorithm first check whether X = 0, then X = 1, and so on. Hence, the number of searches it makes is 1 more than the value of X. Therefore, on average, it will take 1 + np searches to generate X. Since a binomial (n, p) random variable represents the number of successes in n independent trials when each is a success with probability p, it follows that such a random variable can also be generated by subtracting from n the value of a binomial (n, 1 - p). Hence, when p > , we can generate a binomial (n, 1 - p) random variable by the above method and subtract its value from n to obtain the desired generation.

 

Example 5: Simulating a Poisson random variable.

 

The random variable X is Poisson with mean if

 

i = 0, 1,

 

The key to using the Inverse Transform Method to generate such a random variable is the following identity:

 

, i>=0

 

Upon using thr above recursion to compute the Poisson probabilities as they become needed, the inverse transform algorithm for generating a Poisson random variable with the mean can be expressed as follows. The quantity i refers to the value presently under consideration; is the probability that X is equal to i, and F = F(i) is the probability that X is less than or equal to i)

 

1.      Generate a random number U.

2.      i = 0, , F = p.

3.      If U < F, set X = i and stop.

4.      p = p/(I + 1), F = F + p, i = i + 1.

5.      Go to 3.

 

To see that the above algorithm does indeed generate a Poisson random variable with the mean , note that it first generates a random number U and then checks whether or not . If so, it sets X = 0. If not, then it computes by using the recursion. It now checks whether U < + (where the right-hand side is the new value of F), and if so it sets X = 1; and so on.

 

The above algorithm successively checks whether the Poisson value is 0, then whether it is 1, then 2, and so on. Thus, the number of comparisons needed will be 1 greater than the generated value of the Poisson. Hence, on average, the above will need to make 1 + searches. Whereas this is fine when is small, it can be greatly improved upon when is large. Indeed, since a Poisson random variable with the mean is most likely to take on one of the two integral values closest to , a more efficient algorithm would first check one of these values, rather than starting at 0 and working upward. The algorithm lets I = int() and computes (by first taking logarithms and then by raising the result to the power e). It then uses the above recursion to determine F(I). It now generates a Poisson random variable with the mean by generating a random number U , and then noting whether or not

X <= I by seeing whether or not U <= F(I). It then searches downward starting from X = I in the case where X <= I and upward starting from X = I + 1 otherwise.

The number of searches needing by the algorithm is roughly 1 more than the absolute difference between the random variable X and its mean . Since, for large a Poisson is (by the central limit theorem) approximately normal with mean and variance both equal to , it follows that

average numbers of searches ~ 1 + E(|X - |) where X ~ N(,)

= 1 +

= 1 + where Z ~ N(0, 1)

= 1 + 0.798

 

That is, the average numbers of searches grows with the square root of rather than with as becomes larger and larger.