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