[R] Re : Re : Generate a random bistochastic matrix

2006-10-16 Thread Florent Bresson
Yes, you're right. In fact, it's just an adaptation of a matlab command and the 
author advises using N^4 replications that's why it's the default in the 
function. The bistochastic matrix is not my subject of interest, but I need it 
to perform some random tranformation of a vector of incomes.

Florent Bresson

- Message d'origine 
De : Richard M. Heiberger [EMAIL PROTECTED]
À : Florent Bresson [EMAIL PROTECTED]; r-help@stat.math.ethz.ch
Envoyé le : Lundi, 16 Octobre 2006, 16h23mn 39s
Objet : Re: Re : [R] Generate a random bistochastic matrix

I am sorry, I can't figure out what your function is doing.
Why do you have N^4 in the argument?  A matrix should have
N rows and N columns, that is, it should have length N^2.

The function returns a vector, not a matrix.

There is no example of its use.

I am guessing that your function somewhere uses a bistochastic matrix
as an intermediate calculation.  I recommend isolating the bistochastic
matrix function from the larger function that you have constructed.

PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

__
R-help@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.


[R] Re : Re : Generate a random bistochastic matrix

2006-10-16 Thread Florent Bresson
Thanks, it's perfect for my needs.

- Message d'origine 
De : Martin Maechler [EMAIL PROTECTED]
À : Florent Bresson [EMAIL PROTECTED]
Cc : Richard M. Heiberger [EMAIL PROTECTED]; r-help@stat.math.ethz.ch
Envoyé le : Lundi, 16 Octobre 2006, 16h29mn 47s
Objet : Re: [R] Re :  Generate a random bistochastic matrix

A simpler approach --- as in similar problems ---
is to use an iterative solution  which works quite fast for any 'n'.
Interestingly, the number of necessary iterations seems to
*decrease* for increasing 'n' :

bistochMat - function(n, tol = 1e-7, maxit = 1000)
{
## Purpose: Random bistochastic *square* matrix (M_{ij}):
##M_{ij} = 0;  sum_i M_{ij} = sum_j M_{ij} = 1   (for all i, j)
## --
## Arguments: n: (n * n) matrix dimension;
## --
## Author: Martin Maechler, Date: 16 Oct 2006, 14:47
stopifnot(maxit = 1, tol = 0)
M - matrix(runif(n*n), n,n)
for(i in 1:maxit) {
M - M / outer((rM - rowSums(M)), (cM - colSums(M))) * sum(rM) / n
if(all(abs(c(rM,cM) - 1)  tol))
break
}
## cat(needed, i, iterations\n)
## or rather
attr(M, iter) - i
M
}

attr(M - bistochMat(70), iter)
## typically:
## [1] 8

attr(M - bistochMat(10), iter)
## - 13, 16, 15, 17, ...

set.seed(101) ; attr(M - bistochMat(10), iter) ## 15
set.seed(101) ; attr(M - bistochMat(10, tol = 1e-15), iter)## 32



Initially, I tried to solve the general [ n x m ] case.
It seems that needs a slightly smarter bias correction
instead of just 'sum(M) / n'.
If someone figures that out, please post your solution!

Regards,
Martin Maechler, ETH Zurich

__
R-help@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.


[R] Re : Re : Generate a random bistochastic matrix

2006-10-16 Thread Florent Bresson
Yes, I would like every generated matrix to be drawn from a uniform 
distribution. Martin Maechler's solution was interesting but when I compute the 
product of the obtained matrix with any N-vector Y, the resulting vector is 
most of the time quite close to a vector like mean(Y)*rep(1,N).

Florent Bresson

- Message d'origine 
De : Rolf Turner [EMAIL PROTECTED]
À : [EMAIL PROTECTED]
Cc : r-help@stat.math.ethz.ch
Envoyé le : Lundi, 16 Octobre 2006, 17h50mn 24s
Objet : Re: [R] Re :  Generate a random bistochastic matrix

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.

cheers,

Rolf Turner
[EMAIL PROTECTED]

__
R-help@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.