On 23-Jul-11 17:12:09, Megh Dal wrote: > Let say i have a square matrix and applied the 'vech' operator to stack > the lower triangular elements into a vector: > >> Mat <- matrix(1:25, 5) >> Mat > _ _ _[,1] [,2] [,3] [,4] [,5] > [1,] _ _1 _ _6 _ 11 _ 16 _ 21 > [2,] _ _2 _ _7 _ 12 _ 17 _ 22 > [3,] _ _3 _ _8 _ 13 _ 18 _ 23 > [4,] _ _4 _ _9 _ 14 _ 19 _ 24 > [5,] _ _5 _ 10 _ 15 _ 20 _ 25 >> Mat[lower.tri(Mat)] > _[1] _2 _3 _4 _5 _8 _9 10 14 15 20 > > > Now, I want to reverse-work with the resulting matrix. Means, given a > "correct" vector, I want to place the elements of this vector into the > lower-triangular portion of some "correct" square matrix. > > Would somebody help me to implement that? > Thanks,
If you are already using 'vech()' in the MCMCpack package to extract the lower-triangular vector, then that package contains also the function 'xpnd()' which reconstructs a symmetric matric from the Vech. Thus, is you have a matrix A whose lower triangular part you want to replace as you describe, and a vector X which is the Vech of some matrix, then B <- xpnd(X) A[lower.tri(A)] <- B[lower.tri(B)] should do it (not tested by me, however ... ). Hoping this helps, Ted. -------------------------------------------------------------------- E-Mail: (Ted Harding) <ted.hard...@wlandres.net> Fax-to-email: +44 (0)870 094 0861 Date: 23-Jul-11 Time: 18:43:05 ------------------------------ XFMail ------------------------------ ______________________________________________ R-help@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.