[R] generating symmetric matrices
(Ted Harding)
ted.harding at nessie.mcc.ac.uk
Mon Jul 30 21:01:00 CEST 2007
On 28-Jul-07 03:28:25, Gregory Gentlemen wrote:
> Greetings,
>
> I have a seemingly simple task which I have not been able to solve
> today. I want to construct a symmetric matrix of arbtriray size w/o
> using loops. The following I thought would do it:
>
> p <- 6
> Rmat <- diag(p)
> dat.cor <- rnorm(p*(p-1)/2)
> Rmat[outer(1:p, 1:p, "<")] <- Rmat[outer(1:p, 1:p, ">")] <- dat.cor
>
> However, the problem is that the matrix is filled by column and so the
> resulting matrix is not symmetric.
>
> I'd be grateful for any adive and/or solutions.
>
> Gregory
Would the fact that A + t(A) is symmetric be useful here?
E.g.
p <- 6
A <- matrix(rnorm(p^2),ncol=p)
A <- (A + t(A))/sqrt(2)
diag(A) <- rep(1,p)
round(A,digits=2)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1.00 0.53 -0.20 1.27 0.34 0.83
[2,] 0.53 1.00 -0.99 -0.72 0.68 -1.21
[3,] -0.20 -0.99 1.00 -0.62 -0.36 -0.87
[4,] 1.27 -0.72 -0.62 1.00 2.40 0.33
[5,] 0.34 0.68 -0.36 2.40 1.00 0.20
[6,] 0.83 -1.21 -0.87 0.33 0.20 1.00
(Here, because each off-diagonal element of A is the sum of
2 independent N(0,1)s, divided by sqrt(2), the result is
also N(0,1)).
However, whether this is reallyu seful for you depends on
what you want the elements of A to be!
Ted.
--------------------------------------------------------------------
E-Mail: (Ted Harding) <ted.harding at nessie.mcc.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 30-Jul-07 Time: 20:00:55
------------------------------ XFMail ------------------------------
More information about the R-help
mailing list