FDOBL
Computes a direct oblimin rotation of a factor loading matrix.
Required Arguments
A — NVAR by NF matrix of unrotated factor loadings. (Input)
W — Nonpositive constant used to define the rotation. (Input)
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)
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. Otherwise, row normalization is not performed.
Default: NRM = 1.
MAXIT — Maximum number of iterations. (Input)
MAXIT = 30 is typical. MAXIT = 0 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 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 FDOBL (A, W, B, T, FCOR [, …])
Specific: The specific interface names are S_FDOBL and D_FDOBL.
FORTRAN 77 Interface
Single: CALL FDOBL (NVAR, NF, A, LDA, NRM, W, MAXIT, EPS, B, LDB, T, LDT, FCOR, LDFCOR)
Double: The double precision name is DFDOBL.
Description
Routine FDOBL performs direct oblimin rotation. In this analytic method of rotation, the criterion function
is minimized by finding a rotation matrix T such that (λir) = Λ = AT and (TT T )−1 is a correlation matrix. Here, γ ≤ 0 is a user‑specified constant (W) yielding a family of rotations, and p is the number of variables. The rotation is said to be direct because it minimizes Q with respect to the factor loadings directly, ignoring the reference structure.
Kaiser normalization can be performed on the factor loadings prior to rotation via the option parameter NRM. In Kaiser normalization (see Harman 1976), the rows of A are first “normalized” by dividing each row by the square root of the sum of its squared elements. After the rotation is complete, each row of B is “denormalized” by multiplication by its initial normalizing constant.
The method for optimizing Q is essentially the method first proposed by Jennrich and Sampson (1966). It proceeds by accumulating simple rotations where a simple rotation is defined to be one in which Q is optimized for a given factor in the plane of a second factor, and for which the requirement that (TTT)−1 be a correlation matrix is satisfied. An iteration is defined to be such that each of the NF(NF ‑ 1) 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 = .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. Harman (1976) recommends that γ be strictly less than or equal to zero. When γ = 0.0, a direct quartimin rotation results. Other values of γ yield other rotations. Harman (1976) suggests that the direct quartimin rotations yield the most highly correlated factors while more orthogonal factors result as γ approaches ‑∞.
Comments
1. Workspace may be explicitly provided, if desired, by use of F2OBL/DF2OBL. The reference is:
CALL F2OBL (NVAR, NF, A, LDA, NRM, W, MAXIT, EPS, B, LDB, T, LDT, FCOR, LDFCOR, WK1, WK2, WK3)
The additional arguments are as follows:
WK1 — Real work vector of length equal to NVAR.
WK2 — Real work vector of length equal to NF.
WK3 — Real work vector of length equal to NVAR.
2 Informational errors
Type |
Code |
Description |
3 |
1 |
The algorithm did not converge within MAXIT iterations. |
4 |
1 |
NF = 1. No rotation is possible. |
3. The parameter W determines the type of direct OBLIMIN rotation to be performed. In general, W must be negative. W = 0.0 yields direct quartimin rotation. As W approaches negative infinity, the orthogonality among the factors will increase.
Example
The example is a continuation of the example given in routine FACTR. It involves factors derived from nine variables and uses γ = ‑ 1.
USE FDOBL_INT
USE WRRRN_INT
IMPLICIT NONE
INTEGER LDA, LDB, LDFCOR, LDT, NF, NVAR
REAL EPS, W
PARAMETER (EPS=0.00001, LDA=9, LDB=9, LDFCOR=3, LDT=3,NF=3, NVAR=9, &
W=-1.0)
!
REAL A(LDA,NF), B(LDB,NF), FCOR(LDFCOR,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 FDOBL (A, W, B, T, FCOR, EPS=EPS)
!
CALL WRRRN ('B', B)
CALL WRRRN ('T', T)
CALL WRRRN ('FCOR', FCOR)
END
Output
B
1 2 3
1 0.1127 -0.5145 0.2917
2 0.1847 -0.6602 -0.0019
3 0.0128 -0.6354 -0.0585
4 0.7797 -0.1751 0.0598
5 0.7147 -0.1813 -0.0959
6 0.8520 0.0038 0.1820
7 0.0355 -0.6845 0.1509
8 0.0276 -0.0941 0.6824
9 0.0729 -0.7100 0.2493
T
1 2 3
1 0.611 -0.462 0.203
2 0.923 0.813 -0.249
3 0.042 0.728 1.050
FCOR
1 2 3
1 1.000 -0.427 0.217
2 -0.427 1.000 -0.411
3 0.217 -0.411 1.000