6

This might be a really elementary question, but I'm not sure what it means. I have a density function f(x). How do I sample a value from f? For known distributions there are functions in R which do it for you (e.g. runif, rnorm, etc.) but how do I generate a random number using my own density?

ysl
  • 63

3 Answers3

3

I am not going to answer the philosophical question of "what does it mean", but for the practical question, there is the Ziggurat method of Marsaglia to generate a sample from your favorite distribution. Read all about it.

Igor Rivin
  • 95,560
3

In the simple case that $X$ is a real valued random variable, the first thing I would reach for is the inverse-cdf method, especially since you have mentioned "runif" which gives draws from a uniform distribution.

There is a pretty extensive literature on ways to sample from a variety of distributions, with names like Gibbs sampling, Metropolis-Hastings, slice samplers, perfect samplers, etc. A Google search of any of these should bring up a wealth of info. Did you want something more specific?

R Hahn
  • 2,721
1

I suppose a definition of a random sample would be a sequence of numbers {$a_{n}$} such that, for any measurable set S we have $\sum_{1}^{n}\chi_{S}(a_{i})/n\rightarrow\mu(S)$ as $n\rightarrow\infty$, where $\mu(S):=\int_{S}f(y)dy$, with $f(y)$ your density.

How to generate such a sequence is another, much more involved question; there's the inverse CDF technique, various algorithms like Metropolis Hastings or Gibbs sampling (for higher dimensional densities), etc. etc.