Skip to content

Drawing from an empirical distribution

7 messages · culpritNr1, Antonio, Fabio Di Narzo, Albyn Jones +2 more

#
Hi All,

Does anybody know if there is a simple way to draw numbers from an empirical
distribution?

I know that I can plot the empirical cumulative distribution function this
easy:
plot(ecdf(x))

Now I want to pick a number between 0 and 1 and go back to domain of x.
Sounds simple to me.

Any suggestion?

Thank you,

Your culprit
(everybody needs a culprit)
#
If the ecdf is 'ecdf(x)', do just:
HTH,
Antonio.

2009/1/6 culpritNr1 <ig2ar-saf1 at yahoo.co.uk>:

  
    
#
the empirical distribution gives probability 1/n to each of n observations.
rather than sampling the unit interval, just resample the dataset.
If x is your dataset, and you want an independent sample of size k,

        sample(x,size=k,replace=TRUE)

albyn
On Tue, Jan 06, 2009 at 02:39:17PM -0800, culpritNr1 wrote:
#
Thank you. That's exactly what I was looking for.
Antonio, Fabio Di Narzo wrote:

  
    
#
Sure, but it would be more 'fun' to modify ecdf() slightly to produce
an ecqf()  function -- essentially reversing the arguments to  
approxfun()--
and then use

	ecqf(runif(whatever))

no nit-picking about efficiency, please.


url:    www.econ.uiuc.edu/~roger            Roger Koenker
email    rkoenker at uiuc.edu            Department of Economics
vox:     217-333-4558                University of Illinois
fax:       217-244-6678                Champaign, IL 61820
On Jan 6, 2009, at 4:42 PM, Antonio, Fabio Di Narzo wrote:

            
#
Nit-picking about syntax does seem needed, mea culpa,  I
intended something more like:

	Qn <- ecqf(x)
	Qn(runif(whatever))
On Jan 6, 2009, at 5:06 PM, roger koenker wrote:

            
#
one could also use package distr; e.g.,

library(distr)
x <- 1:10
D <- DiscreteDistribution(x)
## => r, d, p and q functions (also with log-argument)
r(D)(5)
p(D)(4)
d(D)(1)
q(D)(0.3)

Best,
Matthias
roger koenker wrote: