I have the following example:
Acceptance/rejection sampling
In some cases the cumulative distribution function might not be (easily) invertible. For example if $X$ has the probability density function: $$f_X(x) = \begin{cases} \dfrac{2}{\pi}\sqrt{1 - x^2} &\text{if } -1 \le x \le 1\\ 0&\text{otherwise}\end{cases}$$
Which is the marginal distribution of $X$ if $(X, Y)$ are uniformly distributed on the unit circle. In this case we can use the following acceptance/rejection method:
Suppose that $f_X (x)$ is non-zero only on $[a, b]$ and $f_X (x) \le k$. Then we can simulate random variables from this distribution using the following approach:
- Generate $x$ uniformly on $[a,b]$ and $y$ uniformly on $[0,k]$, $X$ and $Y$ independent of each other.
- If $y < f_X (x)$ then return $x$, otherwise go back to step 1.
The following R code is provided to illustrate this example:
n <- 10000
x <- runif(n, min = -1, max = 1)
y <- runif(n, min = 0, max = 2/pi)
ii <- y < 2/pi * sqrt(1 - x^2)
sample <- x[ii]
length(sample)
## [1] 7873
hist(sample, prob = TRUE)
curve(2/pi * sqrt(1 - x^2), from = -1, to = 1, add = TRUE)
I'm wondering what the point of the case
- If $y < f_X (x)$ then return $x$, otherwise go back to step 1.
is?
I don't understand where the $y$ is coming from, nor why, if $y < f_X (x)$, then we want to return $x$.
I would greatly appreciate it if people could please take the time to clarify this.