MathOverflow is a question and answer site for professional mathematicians. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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?

share|cite|improve this question
Why the down votes? This is highly nontrivial (see my answer) – Igor Rivin Mar 29 '12 at 17:43
I agree with that, it had also intrigued me, and I was a bit confused to ask ;) – Amin Mar 29 '12 at 21:49
Read chapter 3.4.1 from Knuth's The Art of Computer Programming. – Zsbán Ambrus Mar 30 '12 at 6:28
up vote 2 down vote accepted

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?

share|cite|improve this answer

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.

share|cite|improve this answer

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.

share|cite|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.