[R] Re : Generate a random bistochastic matrix

Duncan Murdoch murdoch at stats.uwo.ca
Mon Oct 16 18:57:45 CEST 2006


On 10/16/2006 11:50 AM, Rolf Turner wrote:
> I don't think this idea has been suggested yet:
> 
> 	(1) Form all n! n x n permutation matrices,
> 	say M_1, ..., M_K, K = n!.
> 
> 	(2) Generate K independent uniform variates
> 	x_1, ..., x_k.
> 
> 	(3) Renormalize these to sum to 1,
> 		x <- x/sum(x)
> 
> 	(4) Form the convex combination
> 
> 		M = x_1*M_1 + ... + x_K*M_K
> 
> M is a ``random'' doubly stochastic matrix.
> 
> The point is that the set of all doubly stochastic matrices
> is a convex set in n^2-dimensional space, and the extreme
> points are the permutation matrices.  I.e. the set of all
> doubly stochastic matrices is the convex hull of the the
> permuation matrices.
> 
> The resulting M will *not* be uniformly distributed on this
> convex hull.  If you want a uniform distribution something
> more is required.  It might be possible to effect uniformity
> of the distribution, but my guess is that it would be a
> hard problem.

But using your solution a Markov chain converging to the uniform 
distribution would be easy:

Start at a bistochastic matrix X, e.g. at a permutation matrix drawn at 
random, or at constant 1/n, or whatever.

Choose a direction D at random by drawing two permutation matrices and 
taking the difference.

Calculate the range of scalar lambda such that X + lambda*D remains 
stochastic (no negatives, no values greater than 1).

Draw lambda uniformly on this range, and move there.

This is a hit-and-run sampler.  I suspect it would mix pretty rapidly. 
I'd guess a Propp-Wilson perfect version would be fairly easy to put 
together.

Duncan Murdoch



More information about the R-help mailing list