FGCRF
Computes direct oblique rotation according to a generalized fourth‑degree polynomial criterion.
Required Arguments
A — NVAR by NF matrix of unrotated factor loadings. (Input)
W — Vector of length 4 containing the constants ω1, ω2, ω3, ω4 necessary to define the rotation. (Input)
Some common rotations are
Rotation | W(1) | W(2) | W(3) | W(4) |
---|
Quartimin | 0 | 1 | 0 | ‑1 |
Covarimin | ‑1/NVAR | 1 | 1/NVAR | ‑1 |
Oblimin | ‑γ/NVAR | 1 | γ/NVAR | ‑1 |
Crawford‑Ferguson | 0 | K1 | K2 | ‑K1 ‑ K2 |
where K1, K2, and γ are constants (determined by the user).
B — NVAR by NF matrix of rotated factor loadings. (Output)
If A is not needed, A and B can share the same storage locations.
T — NF by NF matrix containing the rotation transformation matrix. (Output)
FCOR — NF by NF matrix of factor correlations. (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. If NRM = 0, 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.0.
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).
LDFCOR — Leading dimension of FCOR exactly as specified in the dimension statement in the calling program. (Input)
Default: LDFCOR = size (FCOR,1).
FORTRAN 90 Interface
Generic: CALL FGCRF (A, W, B, T, FCOR [, …])
Specific: The specific interface names are S_FGCRF and D_FGCRF.
FORTRAN 77 Interface
Single: CALL FGCRF (NVAR, NF, A, LDA, NRM, W, MAXIT, EPS, B, LDB, T, LDT, FCOR, LDFCOR)
Double: The double precision name is DFGCRF.
Description
Routine FGCRF performs direct oblique factor rotation for an arbitrary fourth‑degree polynomial criterion function. Let p = NVAR denote the number of variables, and let k = NF denote the number of factors. Then, the criterion function
is minimized by finding a rotation matrix T such that (λij) = Λ = AT and T−1 (T−1)T is a correlation matrix. Here, ωi = W(i), i = 1, …, 4 are user specified constants. The rotation is said to be direct because it minimizes Q with respect to the factor loadings directly, ignoring the reference structure (see, e.g., Harman, 1976).
Kaiser normalization (Harman, 1976) is specified when option parameter NRM = 1. When Kaiser normalization is performed, the rows of A are first “normalized” by dividing each row by the square root of the sum of its squared elements. The rotation is then performed. The rows of B are then “denormalized” by multiplying each row by the initial row normalizing constant.
The criterion function Q was first proposed by Jennrich (1973). It generalizes the oblimin criterion function and the criterion function proposed by Crawford and Ferguson (1970) to an arbitrary fourth degree criterion. Q is optimized by accumulating simple rotations where a simple rotation is defined to be an optimal factor rotation (with respect to Q) for two columns of Λ, and for which the requirement that T −1 (T −1)T be a correlation matrix is satisfied. FGCRF determines the optimal simple rotation by finding the roots of a cubic polynomial equation. The details are contained in Clarkson and Jennrich (1988).
Table 1 – Specific Criteria in the General Symmetric Family
Criterion | ω1 | ω2 | ω3 | ω4 |
---|
Quartimin | 0 | 1 | 0 | ‑1 |
Covarimin | ‑1/p | 1 | 1/p | ‑1 |
Oblimin | ‑γ/p | 1 | γ/p | ‑1 |
Crawford‑Ferguson | 0 | K1 | K2 | ‑K1 ‑ K2 |
An iteration is complete after all possible k(k ‑ 1) simple rotations have been performed. When the relative change in Q from one iteration to the next is less than EPS, the algorithm stops. EPS = .0001 is usually sufficient. Alternatively, the algorithm stops when the user specified maximum number of iterations, MAXIT, is reached. MAXIT = 30 is typical.
Notes
The parameters in the rotation,
ω1, provide for a two‑dimensional family of rotations. When
ω1 =
‑γ/
p,
ω2 = 1,
ω3 =
γ/
p, and
ω4 =
‑1, then a direct oblimin rotation with parameter
γ is performed. Direct oblimin rotations are also performed by routine
FDOBL, which is somewhat faster. For
ω1 = 0,
ω2 =
K1,
ω3 =
K2, and
ω4 =
‑ (
K1 +
K2) direct Crawford‑Ferguson rotation with parameters
K1 and
K2 results (see Crawford and Ferguson 1970, or Clarkson and Jennrich 1988). Other values of
ω yield other rotations. Common values for
ω are as in
Table 1.
Comments
1. Workspace may be explicitly provided, if desired, by use of F2CRF/DF2CRF. The reference is:
CALL F2CRF (NVAR, NF, A, LDA, NRM, W, MAXIT, EPS, B, LDB, T, LDT, FCOR, LDFCOR, RWK1, RWK2, RWK3)
The additional arguments are as follows:
RWK1 — Work vector of length NVAR.
RWK2 — Work vector of length NVAR * (NF + 1).
RWK3 — Work vector of length NF2.
2. Informational Error
Type | Code | Description |
---|
3 | 1 | The algorithm did not converge within MAXIT iterations. |
Example
The example is a continuation of the example in routine
FACTR. It involves nine variables. A Crawford‑Ferguson rotation with row normalization and 3 factors is performed.
USE FGCRF_INT
USE WRRRN_INT
INTEGER LDA, LDB, LDFCOR, LDT, NF, NVAR
PARAMETER (LDA=9, LDB=9, LDFCOR=3, LDT=3, NF=3, NVAR=9)
!
REAL A(LDA,NF), B(LDB,NF), FCOR(LDFCOR,NF), T(LDT,NF), W(4)
!
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/
DATA W/0.0, 7.0, 1.0, -8.0/
!
CALL FGCRF (A, W, B, T, FCOR)
!
CALL WRRRN ('B', B)
CALL WRRRN ('T', T)
CALL WRRRN ('FCOR', FCOR)
END
Output
B
1 2 3
1 0.1156 -0.3875 0.3992
2 0.2161 -0.5831 0.0924
3 0.0422 -0.5859 0.0264
4 0.8051 -0.0906 0.0886
5 0.7495 -0.1373 -0.0839
6 0.8639 0.1045 0.1987
7 0.0527 -0.5792 0.2671
8 -0.0162 0.0779 0.7748
9 0.0852 -0.5765 0.3803
T
1 2 3
1 0.632 -0.327 0.290
2 0.935 0.737 -0.399
3 -0.060 0.907 1.066
FCOR
1 2 3
1 1.000 -0.434 0.365
2 -0.434 1.000 -0.498
3 0.365 -0.498 1.000