[prev in list] [next in list] [prev in thread] [next in thread] 

List:       r-help
Subject:    Re: [R] Random number generation
From:       "Daniel Nordlund" <djnordlund () frontier ! com>
Date:       2011-07-22 7:05:45
Message-ID: 79879BCB76BA4358B284E5E887C24FE7 () Gandalf
[Download RAW message or body]

> -----Original Message-----
> From: r-help-bounces@r-project.org [mailto:r-help-bounces@r-project.org]
> On Behalf Of Dennis Murphy
> Sent: Thursday, July 21, 2011 8:55 PM
> To: karena
> Cc: r-help@r-project.org
> Subject: Re: [R] Random number generation
> 
> Hi:
> 
> Here's one way using uniform(0, 1) pseudo-random numbers, but there
> are many ways you could go about this.
> 
> # each row comprises a set of three pseudo-random numbers
> u <- matrix(runif(30), nrow = 10)
> # divide each element in a row by its row sum
> v <- t(apply(u, 1, function(x) x/sum(x)))
> rowSums(v)
> [1] 1 1 1 1 1 1 1 1 1 1
> 
> # An equivalent way (about equally fast) is
> u/outer(rowSums(u), rep(1, 3))
> 
> Now try
> 
> hist(unlist(v))
> 
> and notice that the distribution of the constrained sets is not really
> uniform. This is a consequence of setting a constraint on the sum of
> each sample. Another way to see this is to plot
> 
> plot(sort(unlist(v)))
> 
> A 'truly' uniform random sample would lie approximately on a straight
> line in this plot.
> 
> It would seem to me that a better approach would be to sample from a
> simplex embedded in the unit cube. I'd suggest looking into the
> compositions package (because you are effectively generating
> compositional data) and look into its capabilities. At least a couple
> of the references in the package's overview page seem to be germane to
> the problem.
> The pair of runif.* functions appear to be relevant.
> 
> HTH,
> Dennis
> 
> 
> 
> On Thu, Jul 21, 2011 at 4:18 PM, karena <dr.jzhou@gmail.com> wrote:
> > Hi,
> > 
> > I want to generate multiple sets of random numbers.
> > The requirement is that:
> > 1) each set have 3 random numbers;
> > 2) the sum of the three number is always 1.
> > 
> > how to do this?
> > 
> > thank you,
> > 
> > karena
> > 

Karena,

if you search the R-help archive you will find a couple of threads discussing this \
topic.  Here is one URL to get you started.

  http://tolstoy.newcastle.edu.au/R/e2/help/06/10/2520.html

Hope this is helpful,

Dan

Daniel Nordlund
Bothell, WA USA

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic