I have a R script I'm running now that is currently using 3 correlated variables. I'd like to add a 4th, and am wondering if there's a simple way to input matrix data, particularly for correlation matrices---some Matlab-like technique to enter a correlation matrix, 3x3 or 4x4, in R without the linear to matrix reshape I've been using.
In Matlab, you can use the semicolon as an end-row delimiter, so it's easy to keep track of where the cross correlations are.
In R, where I first create
corr <- c(1, 0.1, 0.5,
0.1, 1, 0.9,
0.5, 0.9, 1)
cormat <- matrix(corr, ncol=3)
Versus
cormat = [1 0.1 0.5;
0.1 1 0.9;
0.5 0.9 1]
It just feels clunkier, which makes me suspect there's a smarter way I haven't looked up yet. Thoughts?
If you want to input a symmetric matrix, you can use the
xpnd()
function in theMCMCpack
library.xpnd()
takes a vector which corresponds to the upper-triangle of the matrix (thus you only have to enter each value once). For instance, if you want to input:$\left(\begin{array}{c c c} 1 & 0.1 & 0.5 \\ 0.1 & 1 & 0.9 \\ 0.5 & 0.9 & 1 \end{array}\right)$
You would use
where 3 refers to the number of rows in the matrix.
Help page for xpnd.
As you are working with correlation matrices, you are probably not interested in entering the diagonal, and both the upper and lower parts. You can manipulate/extract those three parts separately using
diag()
,upper.tri()
andlower.tri()
.If you want the full matrix:
Here is another way:
Trailing white line is important.
For the existing solutions. That may only work for 3*3 matrix. I tried this one.
Welcome to the site! :) you should be able to do it in one step: