3

This post is intended in a similar direction to an earlier one Can I use Compile to speed up InverseCDF? . I now wish to generate uniform points in an $n$-simplex (specifically $n=8$), making use of the indicated "golden-ratio" generalization procedure of Martin Roberts for a low-discrepancy sequence of points in the hypercube $[0,1]^{n+1}$.

I take it that now instead of the command

P = InverseCDF[NormalDistribution[0, 1], T]

in the earlier post (where T is the (n+1)-vector of real numbers in the hypercube), I could replace NormalDistribution by GammaDistribution (and then normalize $P$ to sum to 1).

Then, what pair of parameters (one of them should be 1) should be employed in the argument of GammaDistribution?

Or is there a more appropriate/obvious approach to utilizing the Roberts methodology? (Might DirichletDistribution be employed?)

I see that there is a good deal of related discussion on this site Uniformly distributed n-dimensional probability vectors over a simplex

Paul B. Slater
  • 2,335
  • 10
  • 16

1 Answers1

4

One approach to incorporating the Roberts methodology for generating sequences of low-discrepancy points in hypercubes in our effort to obtain points uniformly distributed over simplicies, is to adapt the code

samples[n_] := Differences[Join[{0}, Sort[RandomReal[Range[0, 1], n - 1]],{1}]]

put forth by Sophie Alpert in her answer in https://stackoverflow.com/questions/3010837/sample-uniformly-at-random-from-an-n-dimensional-unit-simplex

We would replace

RandomReal[Range[0, 1], n - 1]

by another (n-1)-length vector G, the $i$-th realization of which would be given by

p = x /. Solve[x^n == x + 1, x][[1]];Do[G[[j]] = Mod[1/2 + i/p^j,1], {j, 1, n-1}];

So, the Roberts procedure would be employed in our case at hand to generate 8-vectors, rather than 9-vectors, as we originally anticipated.

Paul B. Slater
  • 2,335
  • 10
  • 16