Main Content


Rotate factor loadings


B = rotatefactors(A)
B = rotatefactors(A,'Method','orthomax','Coeff',gamma)
B = rotatefactors(A,'Method','procrustes','Target',target)
B = rotatefactors(A,'Method','pattern','Target',target)
B = rotatefactors(A,'Method','promax')
[B,T] = rotatefactors(A,...)


B = rotatefactors(A) rotates the d-by-m loadings matrix A to maximize the varimax criterion, and returns the result in B. Rows of A and B correspond to variables and columns correspond to factors, for example, the (i, j)th element of A is the coefficient for the ith variable on the jth factor. The matrix A usually contains principal component coefficients created with pca or pcacov, or factor loadings estimated with factoran.

B = rotatefactors(A,'Method','orthomax','Coeff',gamma) rotates A to maximize the orthomax criterion with the coefficient gamma, i.e., B is the orthogonal rotation of A that maximizes

sum(D*sum(B.^4,1) - GAMMA*sum(B.^2,1).^2)

The default value of 1 for gamma corresponds to varimax rotation. Other possibilities include gamma = 0, m/2, and d(m - 1)/(d + m - 2), corresponding to quartimax, equamax, and parsimax. You can also supply 'varimax', 'quartimax', 'equamax', or 'parsimax' for the 'method' parameter and omit the 'Coeff' parameter.

If 'Method' is 'orthomax', 'varimax', 'quartimax', 'equamax', or 'parsimax', then additional parameters are

  • 'Normalize' — Flag indicating whether the loadings matrix should be row-normalized for rotation. If 'on' (the default), rows of A are normalized prior to rotation to have unit Euclidean norm, and unnormalized after rotation. If 'off', the raw loadings are rotated and returned.

  • 'Reltol' — Relative convergence tolerance in the iterative algorithm used to find T. The default is sqrt(eps).

  • 'Maxit' — Iteration limit in the iterative algorithm used to find T. The default is 250.

B = rotatefactors(A,'Method','procrustes','Target',target) performs an oblique procrustes rotation of A to the d-by-m target loadings matrix target.

B = rotatefactors(A,'Method','pattern','Target',target) performs an oblique rotation of the loadings matrix A to the d-by-m target pattern matrix target, and returns the result in B. target defines the "restricted" elements of B, i.e., elements of B corresponding to zero elements of target are constrained to have small magnitude, while elements of B corresponding to nonzero elements of target are allowed to take on any magnitude.

If 'Method' is 'procrustes' or 'pattern', an additional parameter is 'Type', the type of rotation. If 'Type' is 'orthogonal', the rotation is orthogonal, and the factors remain uncorrelated. If 'Type' is 'oblique' (the default), the rotation is oblique, and the rotated factors might be correlated.

When 'Method' is 'pattern', there are restrictions on target. If A has m columns, then for orthogonal rotation, the jth column of target must contain at least m - j zeros. For oblique rotation, each column of target must contain at least m - 1 zeros.

B = rotatefactors(A,'Method','promax') rotates A to maximize the promax criterion, equivalent to an oblique Procrustes rotation with a target created by an orthomax rotation. Use the four orthomax parameters to control the orthomax rotation used internally by promax.

An additional parameter for 'promax' is 'Power', the exponent for creating promax target matrix. 'Power' must be 1 or greater. The default is 4.

[B,T] = rotatefactors(A,...) returns the rotation matrix T used to create B, that is, B = A*T. You can find the correlation matrix of the rotated factors by using inv(T'*T). For orthogonal rotation, this is the identity matrix, while for oblique rotation, it has unit diagonal elements but nonzero off-diagonal elements.


rng('default') % for reproducibility
X = randn(100,10);

% Default (normalized varimax) rotation:
% first three principal components.
LPC = pca(X);
[L1,T] = rotatefactors(LPC(:,1:3));
% Equamax rotation:
% first three principal components.
[L2,T] = rotatefactors(LPC(:,1:3),...
% Promax rotation:
% first three factors.
LFA = factoran(X,3,'Rotate','none');
[L3,T] = rotatefactors(LFA(:,1:3),...
% Pattern rotation:
% first three factors.
Tgt = [1 1 1 1 1 0 1 0 1 1; ...
       0 0 0 1 1 1 0 0 0 0; ...
       1 0 0 1 0 1 1 1 1 0]';
[L4,T] = rotatefactors(LFA(:,1:3),...
inv(T'*T) % Correlation matrix of the rotated factors
ans =

    1.0000   -0.9593   -0.7098
   -0.9593    1.0000    0.5938
   -0.7098    0.5938    1.0000


[1] Harman, H. H. Modern Factor Analysis. 3rd ed. Chicago: University of Chicago Press, 1976.

[2] Lawley, D. N., and A. E. Maxwell. Factor Analysis as a Statistical Method. 2nd ed. New York: American Elsevier Publishing, 1971.

Version History

Introduced before R2006a