2. Algorithms using explicit derivatives

3. Derivative free algorithms for factor analysis

4. General GP algorithms

5. How to produce a random starting matrix?

The following rotation methods have been implemented:

Bentler's invariant pattern simplicity, biquartimax (oblimin with gamma=.5), biquartimin (oblimin with gamma=.5), Crawford-Ferguson, equamax (oblimin with gamma=p/2), factor parsimony (Crawford-Ferguson with kappa=1), geomin, infomax, minimum entropy, McCammon minimum entropy ratio, oblimax, oblimin, orthomax (orthogonal oblimin), parsimax (Crawford-Ferguson with kappa=(k-1)/(p+k-2)), partially specified target rotation, promax, quartimax, quartimin, simplimax, tandem principle I and tandem principle II, target rotation, varimax.

A list of references to the criteria is [PDF] here.

Gradient projection algorithms are designed to optimize any rotation criterion. See the programs and subroutines for examples.

Details of the algorithms, and the correct reference for the software is:

Bernaards, C.A. and Jennrich, R.I. (2005) Gradient Projection Algorithms and Software for Arbitrary Rotation Criteria in Factor Analysis.

Bernaards, C.A. and Jennrich, R.I. (2005) Gradient Projection Algorithms and Software for Arbitrary Rotation Criteria in Factor Analysis.

A quick overview is available on [PDF] slides from JSM 2003.

Theory of gradient projection algorithms may be found in:

Jennrich, R.I. (2001). A simple general procedure for orthogonal rotation.

Jennrich, R.I. (2002). A simple general method for oblique rotation.

The Matlab source code consists of one file with both gradient projection algorithms in it. Also, a number of popular and less known rotation criteria are provided. Here is the Matlab implementation.

The Splus code can be sourced which will give the main algorithms, one for orthogonal and one for oblique rotation. Also, a number of popular and less known rotation criteria are provided. Here is the Splus implementation.

An R library is available from CRAN. The library is clean, and has help files. Alternatively, this older code may be sourced but it is less clean.

The SAS PROC IML code is divided over two files. Orthogonal.SAS has the orthogonal rotation algorithm and a number of criteria. Oblique.SAS has the oblique rotation algorithm with its criteria.

The SPSS code is divided over two files. Orthogonal.SPS has the orthogonal rotation algorithm applied to a number of criteria. Oblique.SPS has the oblique rotation algorithm applied to a number of criteria.

Note that in SPSS each criteria has its own implementation of the GPF algorithm. Also, within each algorithm the criteria appears at two spots. Adding a new criterion requires that its implementation is changed at both places. The implementation for simplimax appears to work but relies on round-offs in order to serve as an artificial SIGN function. If you have a better implementation email one of the authors.

Stata 9 appears to have the GPF algorithms and most of the rotation criteria implemented in the rotate and the rotatemat commands. Another implementation of Oblimin has been written by Herve Caci, and may be downloaded from Herve's homepage.

Li Cai has translated the algorithms into Gauss. The implementation may be downloaded from Li's homepage.

Jennrich, R.I. (2004). Derivative Free Gradient Projection Algorithms for Rotation.

A Matlab implementation, with a [PDF] detailed example. It has the main algorithms, and quartimin and quartimax.

An implementation for Splus/R with most of the methods listed above.

[PDF] Discussion of the Matlab code and examples.

Editable code (text-file).

The Matlab source code consists of one file with the random start algorithm. Here is the Matlab implementation.

The Splus code can be sourced, and will provide the function Random.Start. Here is the Splus/R implementation.

The SAS code results in a random matrix called rm. Here is the SAS PROC IML implementation.

The SPSS code results in a random matrix called Tmat. Here is the SPSS matrix language implementation. Disclaimer: this procedure is based on uniform random variable draws, not on normally distributed random variables. Therefore, the resulting random matrices may not be uniformly distributed over all orthogonal random matrices (but they are random).

Stata 9 has a random start option built in, see the optimization options included in the rotatemat command.

Investigators: Coen A. Bernaards and Robert I. Jennrich.

Last updated: 03-Nov-2005

Access count is: 258969, since 01-Oct-2003

Maintained by: Coen A. Bernaards and Robert I. Jennrich [webstaff@stat.ucla.edu]