# How does factanal() function in R calculate correlations between factors?

When using the factanal() function from the stats package in R using the promax rotation, you are given factor correlations.

tmp = cbind(rnorm(200,2,1.5),rnorm(200,2,1.5),rnorm(200,2,1.5),rnorm(200,2,1.5),rnorm(200,2,1.5),rnorm(200,2,1.5))
print(factanal(tmp, 3, rotation="promax"))


However, I can not seem to find how these correlations are calculated (no help in the R documentation). I also fail to recreate them myself using cor() on the factor scores.

I'm guessing it may be a polychoric correlation, but I can't be certain.

• You could use the functions: library(psych) polychoric() in the psych package to see if you get the same results. Commented Oct 12, 2018 at 1:48
• Read answers (particularly, mine) tagged factor-rotation. You will find the formula how factor correlations are computed. And this answer (towards the end) explains that whether factor scores will or will not reproduce these correlations depends on the method of the scores estimation. Commented Oct 15, 2018 at 11:15
• Thank you for your answers, however, I am specifically interested in how the factanal() function calculates correlations between factors when using the promax rotation. No answer so far has been able to address this question. Commented Oct 16, 2018 at 0:00

tmat <- solve(tmp\$rotmat) R <- tmat %*% t(tmat)