echelon: Echelon Rotation

View source: R/echelon.R

echelonR Documentation

Echelon Rotation

Description

Rotates a factor loading matrix to an echelon parameterization.

Usage

    echelon(L, reference = seq(NCOL(L)), ...)

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 reference is singular, a different choice of rows must be supplied.

...

additional arguments discarded.

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:

  1. It can be useful for comparison with published results in this parameterization.

  2. Standard errors are more straightforward to compute because the solution corresponds to an unconstrained optimization.

  3. 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.

  4. For some purposes, only the subspace spanned by the factors matters, not the specific parameterization within this subspace.

  5. 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.

  6. 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.

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).

Author(s)

Erik Meijer and Paul Gilbert.

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.

See Also

eiv, rotations, GPForth, GPFoblq

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))

  # 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))

GPArotation documentation built on April 29, 2026, 9:08 a.m.