FGCRF

 


   more...

Computes direct oblique rotation according to a generalized fourth‑degree polynomial criterion.

Required Arguments

ANVAR 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).

BNVAR by NF matrix of rotated factor loadings. (Output)
If A is not needed, A and B can share the same storage locations.

TNF by NF matrix containing the rotation transformation matrix. (Output)

FCORNF 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 T1 (T1)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