Learn R Programming

FAiR (version 0.4-13)

Rotate: Choose a Transformation in Exploratory Factor Analysis

Description

This function is intended for users and finds an optimal rotation of preliminary factor loadings extracted via exploratory factor analysis. Unlike other software, Rotate finds a rotation that is optimal with respect to an intersection of criteria, one of which is a analytic criterion and the rest are constraints. Similar to make_restrictions, much of the functionality of Rotate is implemented via pop-up menus, which is the strongly recommended way to proceed. Also, the vignette details what all these options mean in substantive terms; execute vignette("FAiR") to read it.

Usage

Rotate(FAobject, criteria = list(), methodArgs = list(), 
       normalize = rep(1, nrow(loadings(FAobject))), seeds = 12345, 
       NelderMead = TRUE, ...)

Arguments

FAobject
An object of FA.EFA-class produced by Factanal.
criteria
An optional list whose elements are functions or character strings naming functions to be used in the lexical optimization process. If unspecified, Rotate will prompt you with pop-up menus, which is the recommende
methodArgs
an option list with named elements for additional arguments needed by some criterion functions; see the Details section
normalize
a vector with the same length as the number of manifest variables, or a function that takes the preliminary primary pattern matrix as its first argument and produces such a vector, or a character string that is either "kaiser" o
seeds
A vector of length one or two to be used as the random number generator seeds corresponding to the unif.seed and int.seed arguments to genoud respectively. If
NelderMead
Logical indicating whether to call optim with method = "Nelder-Mead" when the genetic algorithm has finished to further polish the solution.
...
Further arguments that are passed to genoud. Note that several of the default arguments to genoud are silently overridden by Fact

Value

Details

This help page should really only be used as a reminder for what the various choices are, which are normally indicated by leaving criteria and methodArgs unspecified and responding to pop-up menus. The vignette provides a step-by-step guide to the pop-up menus and formally defines the criteria; execute vignette("FAiR") to read it.

The basic problem is to choose a transformation of the factors that is optimal with respect to some intersection of criteria. Since the objective function is vector valued, lexical optimization is performed via a genetic algorithm, which is tantamount to constrained optimization; see genoud.

The following functions can be named as constraints but must not be the last element of criteria: lll{ name methodArgs reminder of what function does "no_factor_collapse" nfc_threshold to prevent factor collapse "limit_correlations" lower and upper limits factor intercorrelations "positive_manifold" pm_threshold forces positive manifold "ranks_rows_1st" row_ranks row-wise ordering constraints "ranks_cols_1st" col_ranks column-wise ordering constraints "indicators_1st" indicators designate which is the best indicator of a factor "evRF_1st" none restrict effective variance of reference factors "evPF_1st" none restrict effective variance of primary factors "h2_over_FC_1st" none communalities $>=$ factor contributions "no_neg_suppressors_1st" FC_threshold no negative suppressors "gv_1st" none generalized variance of primary <= reference="" factors="" "distinguishability_1st" none best indicators have no negative suppressors } In fact, "no_factor_collapse" is always included and is listed above only to emphasize that one must specify methodArgs$nfc_threshold to avoid seeing the associated pop-up menu. This restriction to avoid factor collapse makes it possible to utilize one of the following analytic criteria that would otherwise result in factor collapse much of the time. One of the following can be named as the last element of criteria: ll{ name methodArgs "phi" c "varphi" weights "LS" eps, scale, and E "minimaximin" "geomin" delta "quartimin" "target" Target "pst" Target "oblimax" "simplimax" k "bentler" "cf" kappa "infomax" "mccammon" "oblimin" gam } The first four are defined only on the reference structure matrix. The remainder are copied from the GPArotation package and have the same arguments, with the exception of "pst" which uses NA in the target matrix for untargeted cells rather than also specifying a weight matrix (which is called W in the GPArotation package). In addition, one can specify methodArgs$matrix as one of "PP", "RS", or "FC" to use the primary pattern, reference structure, or factor contribution matrix in conjunction with the criteria from the GPArotation package, although these criteria are technically defined with respect to the primary pattern matrix.

Row-standardization should not be necessary. Row-standardization was originally intended to counteract some tendencies in the transformation process that can now be accomplished directly through lexical (i.e. constrained) optimization. Nevertheless, Kaiser normalization divides each row of the preliminary primary pattern matrix by its length and Cureton-Mulaik normalization favors rows that are thought to have only one large loading after transformation. Both schemes are thoroughly discussed in Browne (2001), which also discusses most of the continuous analytic criteria available in FAiR with the exceptions of those in Thurstone (1935) and Lorenzo-Seva (2003).

It is not necessary to provide starting values for the parameters. But a matrix of starting values can be passed to through the dots to genoud. This matrix should have rows equal to the pop.size argument in genoud and columns equal the number of factors squared. The columns correspond to the cells of the transformation matrix in column-major order. In contrast to some texts, the transformation matrix in Rotate has unit-length columns, rather than unit-length rows.

References

Browne, M.W. (2001) An overview of analytic rotation in exploratory factor analysis. Multivariate Behavioral Research, 36, 111--150.

Lorenzo-Seva, U. (2003) A factor simplicity index. Psychometrika, 68, 49--60.

Smith, G. A. and Stanley G. (1983) Clocking $g$: relating intelligence and measures of timed performance. Intelligence, 7, 353--368.

Thurstone, L. L. (1935) The Vectors of Mind. Cambridge University Press.

Venables, W. N. and Ripley, B. D. (2002) Modern Applied Statistics with S. Fourth edition. Springer.

See Also

Factanal

Examples

Run this code
## Example from Venables and Ripley (2002, p. 323)
## Previously from Bartholomew and Knott  (1999, p. 68--72)
## Originally from Smith and Stanley (1983)
## Replicated from example(ability.cov)

man <- make_manifest(covmat = ability.cov)
res <- make_restrictions(man, factors = 2, model = "EFA")
efa <- Factanal(manifest = man, restrictions = res, impatient = TRUE)

show(efa); summary(efa)

# 'criteria' and 'methodArgs' would typically be left unspecified 
#  and equivalent choices would be made from the pop-up menus
efa.rotated <- Rotate(efa, criteria = list("phi"),
                      methodArgs = list(nfc_threshold = 0.25, c = 1.0))
summary(efa.rotated)
pairs(efa.rotated)
## See the example for Factanal() for more post-estimation commands

Run the code above in your browser using DataLab