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$ – Jeremy Miles Apr 30 '13 at 18:30
  • $\begingroup$ It was supposed to be −2log(a), edited it. $\endgroup$ – Eric Paulsson Apr 30 '13 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$ – Etienne Low-Décarie Jan 10 '14 at 19:46

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).

| cite | improve this answer | |
  • $\begingroup$ This is it, thank you Jeremy. I used R, worked fine. $\endgroup$ – Eric Paulsson May 2 '13 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$ – Etienne Low-Décarie Jan 10 '14 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$ – Etienne Low-Décarie Jan 10 '14 at 20:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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