As I have previously asked, in response to a similar question: Is this a homework problem? cheers, Rolf Turner rolf at math.unb.ca
Rolf Turner <rolf at erdos.math.unb.ca> writes:> As I have previously asked, in response to a similar > question: Is this a homework problem?If so, he has a pretty nasty teacher... -- O__ ---- Peter Dalgaard ?ster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
The trick is in defining "random" in the face of the three apparently incompatible constraints that the numbers be random, that they sum to 1, and that they be uniformly distributed. Tell us more. Perhaps extend Peter D's solution by first deciding (at random) how many components each solution will have. Ben Fairbank -----Original Message----- From: r-help-bounces at stat.math.ethz.ch [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of sun Sent: Tuesday, October 10, 2006 8:28 AM To: r-help at stat.math.ethz.ch Subject: [R] generate random numbers that sum up to 1 I am trying to generate a vector of random numbers with the constraint that they have to sum up to one with uniform distribution. eg. {0.1,0.7,0.2 } any function to do this? Thanks. ______________________________________________ R-help at stat.math.ethz.ch 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.
Duncan Murdoch's definition is _the_ only one that I know. X is Uniform on A means E phi(X) = \int_A phi(x) dx / \int_A dx, so that the probability density is equal to 1/ \int_A dx everwhere on the set A. By the way, another way to simulate X ~ Dirichlet(A1, A2, ..., Ad) is to generate d independent gamma variables having equal rate parameter (doesn't matter, so why not 1) and shape parameters A1, A2, ..., Ad Then the vector of components divided by their sum is the desired Dirichlet: n <- 100000 d <- 3 # for three numbers that add to one ( the unit simplex in R^3) A <- rep(1, 3) # for uniform X <- matrix(0, n, d) for (k in 1:3) X[,k] <- rgamma(n, shape=A[k], rate=1) S <- X %*% rep(1, d) Y <- X/S Present example will simulate n independant 3 vectors, each having non-negative components summing to 1, and having a distribution assigning equal mass to every possible value. Changing d and the components of A will provide an arbitrary Dirichlet on the unit simplex in R^d Grant Izmirlian NCI>> Duncan Murdoch wrote "Another definition of uniform is to have equal >> density for all possible vectors; the Dirichlet distribution with >> parameters (1,1,1) would give you that. "
So, Alberto, you didn't see my post? If Y has d independent components that are gamma distributed with common rate and shapes A_1, A_2, ..., A_d, then X, given by the components of Y divided by their sum has distribution Dirichlet(A_1, A_2, ..., A_d). If you want Uniform on the d-simplex, then use A_1 = A_2 = ... = A_d = 1 (just as Duncan said) original message: -------------------------------- Duncan Murdoch's definition is _the_ only one that I know. X is Uniform on A means E phi(X) = \int_A phi(x) dx / \int_A dx, so that the probability density is equal to 1/ \int_A dx everwhere on the set A. By the way, another way to simulate X ~ Dirichlet(A1, A2, ..., Ad) is to generate d independent gamma variables having equal rate parameter (doesn't matter, so why not 1) and shape parameters A1, A2, ..., Ad Then the vector of components divided by their sum is the desired Dirichlet: n <- 100000 d <- 3 # for three numbers that add to one ( the unit simplex in R^3) A <- rep(1, 3) # for uniform X <- matrix(0, n, d) for (k in 1:3) X[,k] <- rgamma(n, shape=A[k], rate=1) S <- X %*% rep(1, d) Y <- X/S Present example will simulate n independant 3 vectors, each having non-negative components summing to 1, and having a distribution assigning equal mass to every possible value. Changing d and the components of A will provide an arbitrary Dirichlet on the unit simplex in R^d Grant Izmirlian NCI>> Duncan Murdoch wrote "Another definition of uniform is to have equal >> density for all possible vectors; the Dirichlet distribution with >> parameters (1,1,1) would give you that. "