# Test for significance of correlation matrix

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)$?

• 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?) – Jeremy Miles Apr 30 '13 at 18:30
• It was supposed to be −2log(a), edited it. – Eric Paulsson Apr 30 '13 at 19:15
• 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? – 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)
chi
p


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

=-2*(LN(MDETERM(C26:E28)^100/2))


And the above is in cell D31:

=CHIDIST(D31,3)


You can also use the sem package:

require(sem)
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)
summary(semFit)


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

• This is it, thank you Jeremy. I used R, worked fine. – Eric Paulsson May 2 '13 at 13:04
• 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)? – Etienne Low-Décarie Jan 10 '14 at 20:30
• 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℗ } – Etienne Low-Décarie Jan 10 '14 at 20:32