If one wishes to test if the correlations in a correlation matrix are statistically significant as a whole group, one can perform a likelihood ratio test of the hypothesis that the correlation matrix is equal to the identity matrix.

The ratio of the restricted and unrestricted likelihood functions is $\alpha = |R|^{N/2}$ , where |R| is the determinant of the correlation matrix (Morrison, 1967).

The test statistic is therefore $-2\log(\alpha)$, which is distributed as $\chi^2$ with $\frac{1}{2}p(p-1)$ df.

My question is, how do you perform the calculation of the observed value $-2\log( \alpha)$?

  • $\begingroup$ The question asks about alpha, the final line about lambda. I might be missing something, but is this a typo? (Or am I just confused?) $\endgroup$ Apr 30, 2013 at 18:30
  • $\begingroup$ It was supposed to be −2log(a), edited it. $\endgroup$ Apr 30, 2013 at 19:15
  • $\begingroup$ Would it be possible to define a few more of the variables (N, p)? N is sample size for each correlation? Is Morrison, 1967 available online? Is there another reference I could read? $\endgroup$ Jan 10, 2014 at 19:46

1 Answer 1


Do you mean something like this?:

in R:

R <- matrix(c(1.0, 0.1, 0.1, 
            0.1, 1.0, 0.1, 
            0.1, 0.1, 1.0), nrow=3)
N <- 100

chi <- -2*log(det(R)^(N/2))
df <- nrow(R)*(nrow(R)-1)/2
p <- 1 - pchisq(chi, df)  

Or in Excel: Where the matrix is in cells C26:E28, and N is 100:


And the above is in cell D31:


You can also use the sem package:

rownames(R)  <- c("a", "b", "c")
colnames(R)  <- c("a", "b", "c")
mySem <- specifyModel()
  a <-> a, va, NA
  b <-> b, vb, NA
  c <-> c, vc, NA

semFit <- sem(mySem, S=R, N=100)  

(sem gives a very slightly different answer, because it multiplies by N-1).

  • $\begingroup$ This is it, thank you Jeremy. I used R, worked fine. $\endgroup$ May 2, 2013 at 13:04
  • $\begingroup$ When applying this to a correlation matrix, the determinant is zero. Eg: test.values <- matrix(data=rnorm(1000),nrow=10) test.cor <- cor(test.values) cor.sig.test(test.cor, N=100) Is there a way to test for significance of such a correlation matrix (other than some permutation test)? $\endgroup$ Jan 10, 2014 at 20:30
  • 1
    $\begingroup$ For the previous comment: cor.sig.test <- function(cor.matrix, N){ chi <- -2*log(det(cor.matrix)^(N/2)) df <- nrow(cor.matrix)*(nrow(cor.matrix)-1)/2 p <- 1 - pchisq(chi, df) print℗ } $\endgroup$ Jan 10, 2014 at 20:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.