Chapter 9: Covariance Structures and Factor Analysis

FOPCS

TextonSpedometerHPClogo.gif



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

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 FROTA may also be used to refine a solution obtained by analytic rotation in routine . 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



http://www.vni.com/
PHONE: 713.784.3131
FAX:713.781.9260