FOPCS

 


   more...

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

Required Arguments

ANVAR by NF matrix of unrotated factor loadings. (Input)

XNVAR by NF target matrix of the rotation. (Input)

BNVAR by NF matrix of rotated factor loadings. (Output)

TNF 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