FOPCS

 


   more...

Computes an orthogonal Procrustes rotation of a factor‑loading matrix using a target matrix.

Required Arguments

A — NVAR by NF matrix of unrotated factor loadings. (Input)

X — NVAR by NF target matrix of the rotation. (Input)

B — NVAR by NF matrix of rotated factor loadings. (Output)

T — NF by NF factor rotation 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).

LDX — Leading dimension of X exactly as specified in the dimension statement in the calling program. (Input)
Default: LDX = size (X,1).

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 FOPCS (A, X, B, T [, …])

Specific: The specific interface names are S_FOPCS and D_FOPCS.

FORTRAN 77 Interface

Single: CALL FOPCS (NVAR, NF, A, LDA, X, LDX, B, LDB, T, LDT )

Double: The double precision name is DFOPCS.

Description

Routine FOPCS performs orthogonal Procrustes rotation according to a method proposed by Schöneman (1966). Let k = NF denote the number of factors, p = NVAR denote the number of variables, A denote the p × k matrix of unrotated factor loadings, T denote the k × k orthogonal rotation matrix (orthogonality requires that TT T be a k × k identity matrix), and let X denote the target matrix. The basic idea in orthogonal Procrustes rotation is to find an orthogonal rotation matrix T such that B = AT and T provides a least‑squares fit between the target matrix X and the rotated loading matrix B. Schöneman’s algorithm proceeds by finding the singular value decomposition of the matrix AT X = UΣVT. The rotation matrix is computed as T = UVT.

Comments

1. Workspace may be explicitly provided, if desired, by use of F2PCS/DF2PCS. The reference is:

CALL F2PCS (NVAR, NF, A, LDA, X, LDX, B, LDB, T, LDT, WK, S)

The additional arguments are as follows:

WK — Work vector of length NF * (2 * NF + 3) ‑ 1.

S — Work vector of length NF * (NF + 1).

2. Informational errors

 

Type

Code

Description

4

1

NF = 1. No rotation is possible.

4

2

The rank of AT * X is less than NF.

3. The target matrix is a hypothesized rotated factor loading matrix with loadings chosen (based on prior knowledge) to enhance interpretability. A simple structure solution will have most of the elements in X near zero or one (for correlation matrix loadings).

4. This routine may also be used to refine a solution obtained by analytic rotation in routine FROTA. Choose the target matrix so that it closely resembles the analytic solution but modified to have a simple structure.

Example

The following example is taken from Harman (1976, page 355). It involves the orthogonal Procrustes rotation of an 8 × 2 unrotated factor loading matrix. The original variables are measures of physical features (“lankiness” and “stockiness”). The target matrix X is also printed. Note that because different methods are used, Harman (1976) gets slightly different results.

 

USE FOPCS_INT

USE WRRRN_INT

 

IMPLICIT NONE

INTEGER LDA, LDB, LDT, LDX, NF, NVAR

PARAMETER (LDA=8, LDB=8, LDT=2, LDX=8, NF=2, NVAR=8)

!

REAL A(LDA,NF), B(LDB,NF), T(LDT,NF), X(LDX,NF)

!

DATA A/0.856, 0.848, 0.808, 0.831, 0.750, 0.631, 0.569, 0.607, &

-0.324, -0.412, -0.409, -0.342, 0.571, 0.492, 0.510, 0.351/

DATA X/0.9, 0.9, 0.9, 0.9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, &

0.9, 0.9, 0.9, 0.9/

!

CALL FOPCS (A, X, B, T)

!

CALL WRRRN ('A', A)

CALL WRRRN ('X', X)

CALL WRRRN ('B', B)

CALL WRRRN ('T', T)

END

Output

 

A

1 2

1 0.8560 -0.3240

2 0.8480 -0.4120

3 0.8080 -0.4090

4 0.8310 -0.3420

5 0.7500 0.5710

6 0.6310 0.4920

7 0.5690 0.5100

8 0.6070 0.3510

X

1 2

1 0.9000 0.0000

2 0.9000 0.0000

3 0.9000 0.0000

4 0.9000 0.0000

5 0.0000 0.9000

6 0.0000 0.9000

7 0.0000 0.9000

8 0.0000 0.9000

 

B

1 2

1 0.8763 0.2643

2 0.9235 0.1896

3 0.8900 0.1677

4 0.8674 0.2348

5 0.2471 0.9096

6 0.2009 0.7745

7 0.1407 0.7510

8 0.2677 0.6481

 

T

1 2

1 0.7932 0.6090

2 -0.6090 0.7932