Converting Covariance Matrix to Correlation Matrix
Show older comments
I know of MATLAB function to convert a covariance matrix to a correlation matrix but I'm a teacher and want to demonstrate matrix manipulation. I can do the conversion using for loops as below but can't figure out how to do this more elegantly (using matrix operations).
d=diag(cov).^.5;
for i=1:length(cov)
for j=1:length(cov)
corr(i,j)=cov(i,j)./(d(i)*d(j));
end
end
Thanks in advance for any help.
Answers (3)
Peter Perkins
on 14 Oct 2014
0 votes
Jim, if you mean, "matrix operations" as in "something out of a math book", then you can right and left multiply by diag(d), where d is 1./sqrt(diag(C)). If you mean "MATLAB matrix operations", then you can use ./ with d*d'.
You might find it interesting to look at the guts of corrcoef, where the code takes a bit more care.
Hope this helps.
2 Comments
Jim Moser
on 14 Oct 2014
Peter Perkins
on 24 Oct 2014
Sorry, I think I meant diag(1./sqrt(diag(C))). If C is a 3x3 cov matrix, then diag(C) is a vector, and diag(1./sqrt(diag(C))) is a 3x3 diagonal matrix.
James Tursa
on 24 Oct 2014
Edited: James Tursa
on 24 Oct 2014
A method using outer product and element-wise divide:
d = sqrt(diag(cov));
corr = cov./(d*d');
1 Comment
Jim Moser
on 24 Oct 2014
Matt J
on 24 Oct 2014
corr=bsxfun(@rdivide,cov, d(:));
corr=bsxfun(@rdivide, corr,d(:).');
Categories
Find more on Correlation and Convolution in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!