FROTA
Computes an orthogonal rotation of a factor loading matrix using a generalized orthomax criterion, including quartimax, varimax, and equamax rotations.
Required Arguments
ANVAR by NF matrix of unrotated factor loadings. (Input)
W — Nonnegative constant used to define the rotation. (Input)
W = 0.0 results in quartimax rotations, W = 1.0 results in varimax rotations, and W = NF/2.0 results in equamax rotations. Other nonnegative values of W may also be used, but the best values for W are in the range (0.0, 5 * NF).
BNVAR by NF matrix of rotated factor loadings. (Output)
If A is not needed, A and B may share the same storage locations.
TNF by NF matrix containing the rotation transformation matrix. (Output)
Optional Arguments
NVAR — Number of variables. (Input)
Default: NVAR = size (A,1).
NF — Number of factors. (Input)
Default: NF = size (A,2).
LDA — Leading dimension of A exactly as specified in the dimension statement in the calling program. (Input)
Default: LDA = size (A,1).
NRM — Row normalization option. (Input)
If NRM = 1, then row (i.e., Kaiser) normalization is performed. Otherwise, row normalization is not performed.
Default: NRM = 1.
MAXIT — Maximum number of iterations. (Input)
MAXIT = 30 is typical. MAXIT 30 defaults to 30 iterations.
Default: MAXIT = 30.
EPS — Convergence constant. (Input)
When the relative change in the criterion function is less than EPS from one iteration to the next, convergence is assumed. EPS = 0.0001 is typical. EPS 0.0 defaults to 0.0001.
Default: EPS = 0.0001.
LDB — Leading dimension of B exactly as specified in the dimension statement in the calling program. (Input)
Default: LDB = size (B,1).
LDT — Leading dimension of T exactly as specified in the dimension statement in the calling program. (Input)
Default: LDT = size (T,1).
FORTRAN 90 Interface
Generic: CALL FROTA (A, W, B, T [])
Specific: The specific interface names are S_FROTA and D_FROTA.
FORTRAN 77 Interface
Single: CALL FROTA (NVAR, NF, A, LDA, NRM, MAXIT, W, EPS, B, LDB, T, LDT)
Double: The double precision name is DFROTA.
Description
Routine FROTA performs an orthogonal rotation according to an orthomax criterion. In this analytic method of rotation, the criterion function
is minimized by finding an orthogonal rotation matrix T such that (λij) = Λ = AT where A is the matrix of unrotated factor loadings. Here, γ 0 is a user‑specified constant (W) yielding a family of rotations, and p is the number of variables.
Kaiser (row) normalization can be performed on the factor loadings prior to rotation via the option parameter NRM. In Kaiser normalization, the rows of A are first “normalized” by dividing each row by the square root of the sum of its squared elements (Harman 1976). After the rotation is complete, each row of B is “denormalized” by multiplication by its initial normalizing constant.
The method for optimizing Q proceeds by accumulating simple rotations where a simple rotation is defined to be one in which Q is optimized for two columns in Λ and for which the requirement that T be orthogonal is satisfied. A single iteration is defined to be such that each of the NF(NF  1)/2 possible simple rotations is performed where NF is the number of factors. When the relative change in Q from one iteration to the next is less than EPS (the user‑specified convergence criterion), the algorithm stops. EPS = 0.0001 is usually sufficient. Alternatively, the algorithm stops when the user‑specified maximum number of iterations, MAXIT, is reached. MAXIT = 30 is usually sufficient.
The parameter in the rotation, γ, is used to provide a family of rotations. When γ = 0.0, a direct quartimax rotation results. Other values of γ yield other rotations.
Comments
Workspace may be explicitly provided, if desired, by use of F2OTA/DF2OTA. The reference is
CALL F2OTA (NVAR, NF, A, LDA, NRM, MAXIT, W, EPS, B, LDB, T, LDT, WORK)
The additional argument is:
WORK — Real work vector of length equal to NVAR.
Example
The example is taken from Emmett (1949) and involves factors derived from nine variables. In this example, the varimax method is chosen with row normalization by using W = 1.0 and NRM = 1, respectively. The results correspond to those given by Lawley and Maxwell (1971, page 84).
 
USE FROTA_INT
USE WRRRN_INT
 
IMPLICIT NONE
INTEGER LDA, LDB, LDT, NF, NVAR
REAL W
PARAMETER (LDA=9, LDB=9, LDT=3, NF=3, NVAR=9, W=1.0)
!
REAL A(LDA,NF), B(LDB,NF), T(LDT,NF)
!
DATA A/.6642, .6888, .4926, .8372, .7050, .8187, .6615, .4579, &
.7657, -.3209, -.2471, -.3022, .2924, .3148, .3767, -.3960, -.2955, &
-.4274, .0735, -.1933, -.2224, -.0354, -.1528, .1045, -.0778, &
.4914, -.0117/
!
CALL FROTA (A, W, B, T)
!
CALL WRRRN ('B', B)
CALL WRRRN ('T', T)
END
Output
 
B
1 2 3
1 0.2638 -0.5734 0.3888
2 0.3423 -0.6610 0.1370
3 0.1625 -0.5943 0.0622
4 0.8124 -0.3197 0.1594
5 0.7356 -0.2800 0.0036
6 0.8510 -0.1890 0.2513
7 0.2164 -0.6906 0.2768
8 0.1144 -0.2431 0.6828
9 0.2687 -0.7431 0.3804
 
T
1 2 3
1 0.7307 -0.5939 0.3367
2 0.6816 0.6623 -0.3112
3 -0.0382 0.4569 0.8887