[R] how do I make a correlation matrix positive definite?

HAKAN DEMIRTAS demirtas at uic.edu
Fri Oct 22 01:14:53 CEST 2010


I know.

Let me re-phrase the question: How do I convert a non-positive definite 
correlation matrix to a positive-definite correlation matrix in R? I don't 
think cov2cor is relevant here.

Example:

>  print(corr.mat)
      [,1]  [,2]  [,3]  [,4]
[1,]  1.00 -0.95 -0.28 -0.64
[2,] -0.95  1.00 -0.81 -0.38
[3,] -0.28 -0.81  1.00 -0.11
[4,] -0.64 -0.38 -0.11  1.00
> is.positive.definite(corr.mat)
[1] FALSE
> make.positive.definite(corr.mat)
           [,1]       [,2]       [,3]       [,4]
[1,]  1.2105898 -0.7221551 -0.1246443 -0.4971036
[2,] -0.7221551  1.2465138 -0.6419150 -0.2253951
[3,] -0.1246443 -0.6419150  1.1146085 -0.0045829
[4,] -0.4971036 -0.2253951 -0.0045829  1.0969628



----- Original Message ----- 

You could use cov2cor() to convert from covariance matrix to
correlation matrix.  If the correlation is >1, the matrix won't be
positive definite, so you can restandardize the matrix to get a pos
def correlation matrix.

Jeremy


On 21 October 2010 15:50, HAKAN DEMIRTAS <demirtas at uic.edu> wrote:
> Hi,
>
> If a matrix is not positive definite, make.positive.definite() function in 
> corpcor library finds the nearest positive definite matrix by the method 
> proposed by Higham (1988).
>
> However, when I deal with correlation matrices whose diagonals have to be 
> 1 by definition, how do I do it? The above-mentioned function seem to mess 
> up the diagonal entries. [I haven't seen this complication, but obviously 
> all entries must remain in (-1,1) range after conversion.]
>
> Any R tools to handle this?
>
> I'd appreciate any help.
>
> Hakan Demirtas
>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
>



-- 
Jeremy Miles
Psychology Research Methods Wiki: www.researchmethodsinpsychology.com



More information about the R-help mailing list