Converting Covariance Matrix to Correlation Matrix

7 visualizaciones (últimos 30 días)
Jim Moser
Jim Moser el 13 de Oct. de 2014
Respondida: Matt J el 24 de Oct. de 2014
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.

Respuestas (3)

Peter Perkins
Peter Perkins el 14 de Oct. de 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 comentarios
Jim Moser
Jim Moser el 14 de Oct. de 2014
Peter, yes I saw that suggested elsewhere and it puzzled me. If the covariance matrix is 3x3, then left multiplying it by the transpose of the diagonal gives a 1x3 and multiplying the diagonal by that gives a 1x1. The code I listed gives a 3x3 correlation matrix.
And yes by "matrix operations" I was hoping for something that would match a standard text treatment.
Peter Perkins
Peter Perkins el 24 de Oct. de 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.

Iniciar sesión para comentar.


James Tursa
James Tursa el 24 de Oct. de 2014
Editada: James Tursa el 24 de Oct. de 2014
A method using outer product and element-wise divide:
d = sqrt(diag(cov));
corr = cov./(d*d');
  1 comentario
Jim Moser
Jim Moser el 24 de Oct. de 2014
Thank you, exactly what I was sure was there but couldn't see.

Iniciar sesión para comentar.


Matt J
Matt J el 24 de Oct. de 2014
corr=bsxfun(@rdivide,cov, d(:));
corr=bsxfun(@rdivide, corr,d(:).');

Categorías

Más información sobre Logical en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by