Echelon Rotation
echelon.RdRotates a factor loading matrix to an echelon parameterization.
Arguments
- L
a factor loading matrix.
- reference
integer vector indicating which rows of the loading matrix are used to determine the rotation transformation. Default uses the first \(k\) rows. If the submatrix indicated by
referenceis singular, a different choice of rows must be supplied.- ...
additional arguments discarded.
Value
A GPArotation object which is a list with elements:
- loadings
The rotated loadings matrix.
- Th
The rotation matrix.
- method
A string indicating the rotation method (
"echelon").- orthogonal
Always
TRUE(an orthogonal solution is assumed; \(\Phi\) is the identity matrix).- convergence
Always
TRUE(the optimization is not iterative).
Details
The loading matrix is rotated so that the \(k\) rows indicated by
reference form the Cholesky factorization given by
t(chol(L[reference,] %*% t(L[reference,]))).
This defines the rotation transformation, which is then applied to all
rows to give the rotated loading matrix.
The optimization is not iterative and does not use the gradient projection
algorithm. The function can be used directly or passed to factor analysis
functions like factanal via the rotation
argument.
This parameterization has several useful properties:
It can be useful for comparison with published results in this parameterization.
Standard errors are more straightforward to compute because the solution corresponds to an unconstrained optimization.
Models with \(k\) and \(k+1\) factors are nested, making it straightforward to test the \(k\)-factor model versus the \((k+1)\)-factor model. In particular, the Wald test and LM test can be used in addition to the LR test. The test of a \(k\)-factor model versus a \((k+1)\)-factor model is a joint test of whether all free parameters (loadings) in the \((k+1)\)st column are zero.
For some purposes, only the subspace spanned by the factors matters, not the specific parameterization within this subspace.
Back-predicted indicators (the explained portion of the indicators) do not depend on the rotation method. Combined with the greater ease of obtaining correct standard errors, this allows easier and more accurate prediction standard errors.
This parameterization and its standard errors can be used to detect identification problems (McDonald, 1999, pp. 181–182).
One use of echelon rotation is obtaining good starting values for subsequent rotation, though it may seem counterintuitive to rotate towards this solution afterwards.
References
McDonald, R.P. (1999). Test Theory: A Unified Treatment. Erlbaum.
Wansbeek, T. and Meijer, E. (2000). Measurement Error and Latent Variables in Econometrics. North-Holland.
Examples
data("WansbeekMeijer", package = "GPArotation")
fa.unrotated <- factanal(factors = 2, covmat = NetherlandsTV,
rotation = "none")
# Direct call
fa.ech <- echelon(fa.unrotated$loadings)
# Equivalent via factanal rotation argument
fa.ech2 <- factanal(factors = 2, covmat = NetherlandsTV,
rotation = "echelon")
# Compare unrotated, echelon, and factanal echelon loadings
cbind(loadings(fa.unrotated), loadings(fa.ech), loadings(fa.ech2))
#> Factor1 Factor2 factor 1 factor 2 factor 1 factor 2
#> NL1 0.6972803 -0.3736554 0.7910866 0.000000000 0.7910866 0.000000000
#> TV2 0.7774628 -0.3184149 0.8356693 0.086562877 0.8356693 0.086562877
#> NL3 0.6832300 -0.3620428 0.7732175 0.003599155 0.7732175 0.003599155
#> RTL4 0.6612198 0.2361132 0.4712891 0.520430204 0.4712891 0.520430204
#> RTL5 0.6972393 0.3026050 0.4716313 0.596050663 0.4716313 0.596050663
#> Veronica 0.7100285 0.4059509 0.4340904 0.693182608 0.4340904 0.693182608
#> SBS6 0.6353584 0.3526947 0.3934293 0.610972389 0.3934293 0.610972389
# Echelon rotation with a different reference set
fa.ech3 <- echelon(fa.unrotated$loadings, reference = 6:7)
cbind(loadings(fa.unrotated), loadings(fa.ech), loadings(fa.ech3))
#> Factor1 Factor2 factor 1 factor 2 factor 1 factor 2
#> NL1 0.6972803 -0.3736554 0.7910866 0.000000000 0.4198670 0.670469822
#> TV2 0.7774628 -0.3184149 0.8356693 0.086562877 0.5168938 0.662312006
#> NL3 0.6832300 -0.3620428 0.7732175 0.003599155 0.4134334 0.653414946
#> RTL4 0.6612198 0.2361132 0.4712891 0.520430204 0.6912157 0.123214899
#> RTL5 0.6972393 0.3026050 0.4716313 0.596050663 0.7554879 0.083369562
#> Veronica 0.7100285 0.4059509 0.4340904 0.693182608 0.8178854 0.000000000
#> SBS6 0.6353584 0.3526947 0.3934293 0.610972389 0.7266290 0.009171313