Converting Covariance Matrix to Correlation Matrix
7 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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.
0 Kommentare
Antworten (3)
Peter Perkins
am 14 Okt. 2014
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 Kommentare
Peter Perkins
am 24 Okt. 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
am 24 Okt. 2014
Bearbeitet: James Tursa
am 24 Okt. 2014
A method using outer product and element-wise divide:
d = sqrt(diag(cov));
corr = cov./(d*d');
Matt J
am 24 Okt. 2014
corr=bsxfun(@rdivide,cov, d(:));
corr=bsxfun(@rdivide, corr,d(:).');
0 Kommentare
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!