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.

  • $\begingroup$ You could use the functions: library(psych) polychoric() in the psych package to see if you get the same results. $\endgroup$ Commented Oct 12, 2018 at 1:48
  • $\begingroup$ 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. $\endgroup$
    – ttnphns
    Commented Oct 15, 2018 at 11:15
  • $\begingroup$ 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. $\endgroup$ Commented Oct 16, 2018 at 0:00

1 Answer 1


Its calculated using the following code which can be found here https://github.com/SurajGupta/r-source/blob/master/src/library/stats/R/factanal.R:
tmat <- solve(tmp$rotmat) R <- tmat %*% t(tmat)


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.