Description Usage Arguments Details Value Note Author(s) References See Also Examples
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.
1 2 3 |
FAobject |
An object of | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
criteria |
An optional list whose elements are functions or
character strings naming functions to be used in the lexical
optimization process. If unspecified, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
seeds |
A vector of length one or two to be used as the random
number generator seeds corresponding to the | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NelderMead |
Logical indicating whether to call | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
... |
Further arguments that are passed to
The following arguments to
The arguments to |
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
:
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
:
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.
An object of FA.EFA-class
.
The underlying genetic algorithm will print a variety of output as it progresses. On Windows, you have to move the scrollbar periodically to flush the output to the screen. The output will look something like this
Generation | First | Second | ... | Last | Analytic |
number | constraint | constraint | constraint | criterion | |
0 | -1.0 | -1.0 | ... | -1.0 | double |
1 | -1.0 | -1.0 | ... | -1.0 | double |
... | ... | ... | ... | ... | ... |
42 | -1.0 | -1.0 | ... | -1.0 | double |
The integer on the very left indicates the generation number. If it appears to skip one or more generations, that signifies that the best individual in the “missing” generation was no better than the best individual in the previous generation. The sequence of negative ones indicates that various constraints specified by the user are being satisfied by the best individual in the generation. The curious are referred to the source code and / or the, vignette, but for the most part users need not worry about them provided they are -1.0. If any but the last are not -1.0 after the first few generations, there is a problem because no individual is satisfying all the constraints. The last number is a double-precision number and is typically the (logarithm of the) analytic criterion specified by the user. This number will, decrease, sometimes painfully slowly, sometimes intermittently, over the generations since the criterion is being minimized subject to the aforementioned constraints. Finally, do not be particularly concerned if there are messages indicating a gradient check has failed because there is no strong reason to expect the gradient of the (last) criterion with respect to all the cells of the transformation matrix will be particularly small
Ben Goodrich
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ## 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
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.