From: Petr Savicky <savicky_at_praha1.ff.cuni.cz>

Date: Wed, 30 Mar 2011 12:07:18 +0200

R-help_at_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. Received on Wed 30 Mar 2011 - 10:23:06 GMT

Date: Wed, 30 Mar 2011 12:07:18 +0200

On Tue, Mar 29, 2011 at 01:42:18PM -0600, Greg Snow wrote:

> Or we could expand a bit more:

*>
**> require(TeachingDemos)
**> require(gtools)
**>
**> n <- 1000
**> rtrg <- matrix(NA, n, 3)
**> for (i in 1:n) rtrg[i,] <- diff(c(0, sort(runif(2)), 1))
**>
**> rtrg2 <- matrix(NA, n, 3)
**> for (i in 1:n) {
**> tmp <- runif(3)
**> rtrg2[i, ] <- tmp/sum(tmp)
**> }
**>
**> rtrg3 <- matrix( rexp(n*3), ncol=3 )
**> rtrg3 <- rtrg3/rowSums(rtrg3)
**>
**> rtrg4 <- rdirichlet(n, rep(1,3))
*

If i understand correctly, this is an efficient way to generate the uniform distribution over the triangle. Thank you for pointing this out.

Generating the uniform distribution is a natural question related to the original request.

> par(mfrow=c(2,2))

> triplot(rtrg, pch='.') # Looks more uniformly distributed

This distribution is also exactly uniform.

If x is generated as sort(runif(2)), then it is uniformly distributed over the two dimensional triangle 0 <= x[1] <= x[2] <= 1.

The transformation, which maps x to c(x[1], x[2] - x[1], 1 - x[2]) is linear, so it preserves the uniform distribution and its output ranges over the triangle with corners [1, 0, 0], [0, 1, 0], [0, 0, 1].

> triplot(rtrg2, col=2, pch='.') # Corners are sparsely populated

The ratio of the density in the center and in the corners seems to be 27.

Consider a small area A on the triangle between the points (1, 0, 0), (0, 1, 0), (0, 0, 1). The points x generated as runif(3), which are mapped to A by the transformation x/sum(x), consist of two types of points. (1) The cone (or a pyramid) between A and the point (0, 0, 0). (2) Points on the extension of this cone away from (0, 0, 0),

which are still inside the cube [0, 1]^3.

The volume of (1) depends on the area of A, but not on its location within the triangle, since the height of the cone is always the same.

If A is close to a corner, then (2) is small compared to (1) (the ratio converges to 0, if A is limited to small neighborhood of the corner).

If A is close to the center of the triangle, then the union of (1) and (2) contains a cone approximately 3 times larger than the cone (1). So, the volume of (1) and (2) together is about 27 times larger than (1) alone. (The ratio converges to 27, if A is limited to small neighborhood of the center).

Petr Savicky.

R-help_at_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. Received on Wed 30 Mar 2011 - 10:23:06 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Wed 30 Mar 2011 - 11:00:26 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*