00.GPArotation: Gradient Projection Algorithms for Factor Rotation

00.GPArotationR Documentation

Gradient Projection Algorithms for Factor Rotation

Description

GPA Rotation for Factor Analysis

The GPArotation package contains functions for the rotation of factor loadings matrices. The functions implement Gradient Projection (GP) algorithms for orthogonal and oblique rotation. Additionally, a number of rotation criteria are provided. The GP algorithms minimize the rotation criterion function and provide the corresponding rotation matrix. For oblique rotation, the covariance/correlation matrix of the factors is also provided. The rotation criteria implemented in this package are described in Bernaards and Jennrich (2005) in addition to a number of others. Theory of the GP algorithm is described in Jennrich (2001, 2002).

Vignettes are provided covering general usage, local minima diagnostics, bifactor rotation and reliability, and a visual walkthrough of the gradient projection algorithm. Access them via browseVignettes("GPArotation").

Package: GPArotation
Depends: R (>= 3.5.0)
License: GPL Version 2.

Index of functions:

Rotations using gradient projection algorithms

oblimin Oblimin rotation
quartimin Quartimin rotation
targetT Orthogonal target rotation
targetQ Oblique target rotation
pstT Orthogonal partially specified target rotation
pstQ Oblique partially specified target rotation
oblimax Oblimax rotation
entropy Minimum entropy rotation
quartimax Quartimax rotation
Varimax Varimax rotation
simplimax Simplimax rotation
bentlerT Orthogonal Bentler invariant pattern simplicity rotation
bentlerQ Oblique Bentler invariant pattern simplicity rotation
tandemI Tandem criteria principle I rotation
tandemII Tandem criteria principle II rotation
geominT Orthogonal Geomin rotation
geominQ Oblique Geomin rotation
bigeominT Orthogonal Bi-Geomin rotation
bigeominQ Oblique Bi-Geomin rotation
cfT Orthogonal Crawford-Ferguson family rotation
cfQ Oblique Crawford-Ferguson family rotation
equamax Equamax rotation
parsimax Parsimax rotation
infomaxT Orthogonal Infomax rotation
infomaxQ Oblique Infomax rotation
mccammon McCammon minimum entropy ratio rotation
varimin Varimin rotation
bifactorT Orthogonal bifactor rotation
bifactorQ Oblique bifactor rotation
lpT Orthogonal L^p rotation
lpQ Oblique L^p rotation

Core gradient projection algorithms

GPForth Orthogonal rotation function
GPFoblq Oblique rotation function

Random-start wrappers and internal engine

GPFRSorth Random-start wrapper for orthogonal rotation
GPFRSoblq Random-start wrapper for oblique rotation

2D orthogonal trajectory plot

plot2fOrthComparison 2D trajectory plot for 2 factor orthogonal rotation

S3 methods

print.GPArotation Print rotated solution with simple structure measures
summary.GPArotation Summary with pattern, structure, and diagnostics
plot.GPArotation Plot: salient, pairs, profile, vector, target, heatmap, trajectory, diagnostics, residuals
residuals.GPArotation Observed minus modeled residual of correlation matrix
update update [The R Stats Package]

Data sets

Harman8 Harman's 8 physical variables; centroid loadings
NetherlandsTV Wansbeek and Meijer Netherlands TV viewership; correlation matrix
box26 Thurstone's 26 box variables; unrotated factor loadings
CCAI CCAI Climate-Friendly Purchasing Choices domain; correlation matrix, pattern matrix, and factor intercorrelations
GriffithMulaik Griffith and Mulaik interpersonal personality traits; 24-variable correlation matrix

Other rotations not using gradient projection algorithms

eiv Errors-in-variables rotation
echelon Echelon rotation
varimax varimax [The R Stats Package]
promax promax [The R Stats Package]

Legacy gradient projection algorithms (code unchanged since 2008)

GPForth.legacy Orthogonal rotation, original implementation (not exported)
GPFoblq.legacy Oblique rotation, original implementation (not exported)

Utility functions

Random.Start Random starting matrix for factor rotation
GPForth.lp Single-start L^p orthogonal rotation
GPFoblq.lp Single-start L^p oblique rotation

Utility functions (not exported)

.GPA_RS_engine Internal random-start engine
.sortGPALoadings Sort and sign-correct factors
NormalizingWeight Normalizing weights utility
calc_AUC AUC simple structure measure
calc_FSI Factor Simplicity Index
calc_simplicity Hoffman, Gini, Bentler simplicity indices
calc_hyperplane Hyperplane count
calc_fitstats ML fit statistics: RMSEA, SRMR
plot_trajectory Helper function for plot2fOrthComparison
plot_gpa_diagnostics Helper function for plot2fOrthComparison
plot_algorithm_comparison Helper function for plot2fOrthComparison
.reconstruct_trajectory Helper function for plot2fOrthComparison
plotRotationLandscape Helper function for plot2fOrthComparison
plot_landscape_trajectory Helper function for plot2fOrthComparison

Value, gradient, rotation criterion functions (not exported)

vgQ.oblimin Oblimin
vgQ.quartimin Quartimin
vgQ.target Target
vgQ.pst Partially specified target
vgQ.oblimax Oblimax
vgQ.entropy Minimum entropy
vgQ.quartimax Quartimax
vgQ.varimax Varimax
vgQ.simplimax Simplimax
vgQ.bentler Bentler invariant pattern simplicity
vgQ.tandemI Tandem criteria principle I
vgQ.tandemII Tandem criteria principle II
vgQ.geomin Geomin
vgQ.bigeomin Bi-Geomin
vgQ.cf Crawford-Ferguson family
vgQ.infomax Infomax
vgQ.mccammon McCammon minimum entropy ratio
vgQ.varimin Varimin
vgQ.bifactor Bifactor
vgQ.lp.wls Weighted least squares for L^p rotation

Vignettes

GPA1guide Gradient Projection Factor Rotation (main guide)
GPA2local Assessing Local Minima in Factor Rotation
GPA3bifactor Bifactor Rotation and Reliability Coefficients
GPA4fitstats Factor Model Fit and Simple Structure Diagnostics

Author(s)

Coen A. Bernaards and Robert I. Jennrich with some R modifications by Paul Gilbert.

References

The software reference is:

Bernaards, C.A. and Jennrich, R.I. (2005). Gradient projection algorithms and software for arbitrary rotation criteria in factor analysis. Educational and Psychological Measurement, 65, 676–696. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1177/0013164404272507")}

Theory of gradient projection algorithms:

Jennrich, R.I. (2001). A simple general procedure for orthogonal rotation. Psychometrika, 66, 289–306. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1007/BF02294840")}

Jennrich, R.I. (2002). A simple general method for oblique rotation. Psychometrika, 67, 7–19. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1007/BF02294706")}

A clear and accessible introduction to gradient projection algorithms for factor rotation is provided in:

Mansolf, M. and Reise, S.P. (2016). Exploratory bifactor analysis: The Schmid-Leiman orthogonalization and Jennrich-Bentler analytic rotations. Multivariate Behavioral Research, 51(5), 698–717. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1080/00273171.2016.1215898")}

Barzilai-Borwein step size:

Barzilai, J. and Borwein, J.M. (1988). Two-point step size gradient methods. IMA Journal of Numerical Analysis, 8, 141–148. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1093/imanum/8.1.141")}

Cayley transform retraction:

Wen, Z. and Yin, W. (2013). A feasible method for optimization with orthogonality constraints. Mathematical Programming, 142, 397–434. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1007/s10107-012-0584-1")}

Non-monotone line search:

Grippo, L., Lampariello, F., and Lucidi, S. (1986). A nonmonotone line search technique for Newton's method. SIAM Journal on Numerical Analysis, 23(4), 707–716. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1137/0723046")}

Zhang, H. and Hager, W.W. (2004). A nonmonotone line search technique and its application to unconstrained optimization. SIAM Journal on Optimization, 14(4), 1043–1056. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1137/S1052623403428208")}

Simple structure measures:

Liu, X., Wallin, G., Chen, Y., and Moustaki, I. (2023). Rotation to sparse loadings using L^p losses and related inference problems. Psychometrika, 88(2), 527–553. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1007/s11336-023-09911-y")}

Lorenzo-Seva, U. (2003). A factor simplicity index. Psychometrika, 68(1), 49–60. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1007/BF02296652")}

See Also

GPFRSorth, GPFRSoblq, rotations, vgQ, simple_structure, plot.GPArotation browseVignettes("GPArotation")


GPArotation documentation built on June 18, 2026, 9:06 a.m.