Computes an orthogonal rotation of a factor loading matrix using a generalized orthomax criterion, including quartimax, varimax, and equamax rotations.
A — NVAR 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).
B — NVAR
by NF matrix of
rotated factor loadings. (Output)
If A is not needed, A and B may share the same
storage locations.
T — NF by NF matrix containing the rotation transformation matrix. (Output)
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).
Generic: CALL FROTA (A, W, B, T [,…])
Specific: The specific interface names are S_FROTA and D_FROTA.
Single: CALL FROTA (NVAR, NF, A, LDA, NRM, MAXIT, W, EPS, B, LDB, T, LDT)
Double: The double precision name is DFROTA.
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.
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.
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
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
PHONE: 713.784.3131 FAX:713.781.9260 |