This function conducts factor rotations (using the GPArotation package) from a user-specified number of random (orthogonal) starting configurations. Based on the resulting complexity function value, the function determines the number of local minima and, among these local solutions, will find the "global minimum" (i.e., the minimized complexity value from the finite number of solutions). See Details below for an elaboration on the global minimum. This function can also return bootstrap standard errors of the factor solution.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
(Matrix) A raw data matrix (or data frame).
(Matrix) A correlation matrix.
(Numeric) Sample size associated with the correlation matrix. Defaults to n = NULL.
(Numeric) The number of factors to extract for subsequent rotation.
(Character) The method used for factor extraction
(Matrix) An unrotated factor-structure matrix to be rotated.
(Character) Designate which rotation algorithm to apply. The following are available rotation options: "oblimin", "quartimin", "targetT", "targetQ", "oblimax", "entropy", "quartimax", "varimax", "simplimax", "bentlerT", "bentlerQ", "tandemI", "tandemII", "geominT", "geominQ", "cfT", "cfQ", "infomaxT", "infomaxQ", "mccammon", "bifactorT", "bifactorQ", and "none". Defaults to rotate = "oblimin". See GPArotation package for more details. Note that rotations ending in "T" and "Q" represent orthogonal and oblique rotations, respectively.
(Matrix) This argument serves two functions. First, if a user has requested either a "targetT" or "targetQ' rotation, then the target matrix is used to conduct a fully or partially specified target rotation. In the latter case, freely estimated factor loadings are designated by "NA" values and rotation will be conducted using Browne's (1972a, 1972b, 2001) method for a partially-specified target rotation. Second, if any other rotation option is chosen then all rotated loadings matrices (and assorted output) will be aligned (but not rotated) with the target solution.
(Logical) Computes bootstrap standard errors. All bootstrap samples are aligned to the global minimum solution. Defaults to bootstrapSE = FALSE (no standard errors).
(Numeric) The number bootstraps. Defaults to numBoot = 1000.
(Numeric) The confidence level (between 0 and 1) of the bootstrap confidence interval. Defaults to CILevel = .95.
(Numeric) Starting seed for reproducible bootstrap results and factor rotations. Defaults to Seed = 1.
(Numeric) Rounds the values to the specified number of decimal places. Defaults to digits = NULL (no rounding).
(List) A list of optional parameters passed to the factor
(List) A list of control values to pass to the factor rotation algorithms.
Values to be passed to the
Global Minimum: This function uses several random starting configurations for factor rotations in an attempt to find the global minimum solution. However, this function is not guaranteed to find the global minimum. Furthermore, the global minimum solution need not be more psychologically interpretable than any of the local solutions (cf. Rozeboom, 1992). As is recommended, our function returns all local solutions so users can make their own judgements.
Finding clusters of local minima: We find local-solution sets by sorting the rounded
rotation complexity values (to the number of digits specified in the
argument of the
rotateControl list) into sets with equivalent values. For example,
epsilon = 1e-5. and thus will only evaluate the complexity
values to five significant digits. Any differences beyond that value will not effect the final sorting.
faMain function will produce a lot of output in addition
to the rotated factor pattern matrix and the factor correlations.
R: (Matrix) Returns the correlation matrix, useful when raw data are supplied.
loadings: (Matrix) The rotated factor solution with the lowest evaluated discrepancy function. This solution has the lowest discrepancy function of the examined random starting configurations. It is not guaranteed to find the "true" global minimum. Note that multiple (or even all) local solutions can have the same discrepancy functions.
Phi: (Matrix) The factor correlations of the rotated factor solution with the lowest evaluated discrepancy function (see Details).
facIndeterminacy: (Vector) A vector (with length equal to the number of factors) containing Guttman's (1955) index of factor indeterminacy for each factor.
h2: (Vector) The vector of final communality estimates.
loadingsSE: (Matrix) The matrix of factor-loading standard errors across the bootstrapped factor solutions. Each matrix element is the standard deviation of all bootstrapped factor loadings for that element position.
CILevel (Numeric) The user-defined confidence level (between 0 and 1) of the bootstrap confidence interval. Defaults to CILevel = .95.
loadingsCIupper: (Matrix) Contains the upper confidence interval of the bootstrapped factor loadings matrix. The confidence interval width is specified by the user.
loadingsCIlower: (Matrix) Contains the lower confidence interval of the bootstrapped factor loadings matrix. The confidence interval width is specified by the user.
PhiSE: (Matrix) The matrix of factor correlation standard errors across the bootstrapped factor solutions. Each matrix element is the standard deviation of all bootstrapped factor correlations for that element position.
PhiCIupper: (Matrix) Contains the upper confidence interval of the bootstrapped factor correlation matrix. The confidence interval width is specified by the user.
PhiCIlower: (Matrix) Contains the lower confidence interval of the bootstrapped factor correlation matrix. The confidence interval width is specified by the user.
facIndeterminacySE: (Matrix) A row vector containing the standard errors of Guttman's (1955) factor indeterminacy indices across the bootstrap factor solutions.
localSolutions: (List) A list containing all local solutions in ascending order of their factor loadings, rotation complexity values (i.e., the first solution is the "global" minimum). Each solution returns the
loadings: (Matrix) the factor loadings,
Phi: (Matrix) factor correlations,
RotationComplexityValue: (Numeric) the complexity value of the rotation algorithm,
facIndeterminacy: (Vector) A vector of factor indeterminacy indices for each common factor, and
RotationConverged: (Logical) convergence status of the rotation algorithm.
numLocalSets (Numeric) How many sets of local solutions with the same discrepancy value were obtained.
localSolutionSets: (List) A list containing the sets of unique local minima solutions. There is one list element for every unique local solution that includes (a) the factor loadings matrix, (b) the factor correlation matrix (if estimated), and (c) the discrepancy value of the rotation algorithm.
loadingsArray: (Array) Contains an array of all bootstrapped factor loadings. The dimensions are factor indicators, factors, and the number of bootstrapped samples (representing the row, column, and depth, respectively).
PhiArray: (Array) Contains an array of all bootstrapped factor correlations. The dimension are the number of factors, the number of factors, and the number of bootstrapped samples (representing the row, column, and depth, respectively).
facIndeterminacyArray: (Array) Contains an array of all bootstrap factor indeterminacy indices. The dimensions are 1, the number of factors, and the number of bootstrap samples (representing the row, column, and depth order, respectively).
faControl: (List) A list of the control parameters passed
to the factor extraction (
faFit: (List) A list of additional output from the factor extraction routines.
facMethod: (Character) The factor extraction routine.
df: (Numeric) Degrees of Freedom from the maximum likelihood factor extraction routine.
n: (Numeric) Sample size associated with the correlation matrix.
objectiveFunc: (Numeric) The evaluated objective function for the maximum likelihood factor extraction routine.
RMSEA: (Numeric) Root mean squared error of approximation from Steiger & Lind (1980). Note that bias correction is computed if the sample size is provided.
testStat: (Numeric) The significance test statistic for the maximum likelihood procedure. Cannot be computed unless a sample size is provided.
pValue: (Numeric) The p value associated with the significance test statistic for the maximum likelihood procedure. Cannot be computed unless a sample size is provided.
gradient: (Matrix) The solution gradient for the least squares factor extraction routine.
maxAbsGradient: (Numeric) The maximum absolute value of the gradient at the least squares solution.
Heywood: (Logical) TRUE if a Heywood case was produced.
convergedX: (Logical) TRUE if the factor extraction routine converged.
convergedR: (Logical) TRUE if the factor rotation routine converged (for the local solution with the minimum discrepancy value).
rotateControl: (List) A list of the control parameters passed to the rotation algorithm.
unSpunSolution: (List) A list of output parameters (e.g., loadings, Phi, etc) from the rotated solution that was obtained by rotating directly from the unrotated (i.e., unspun) common factor orientation.
targetMatrix (Matrix) The input target matrix if supplied by the user.
Call: (call) A copy of the function call.
Niels G. Waller (email@example.com)
Casey Giordano (Giord023@umn.edu)
The authors thank Allie Cooperman and Hoang Nguyen for their help implementing the standard error estimation and the Cureton-Mulaik standardization procedure.
Browne, M. W. (1972). Oblique rotation to a partially specified target. British Journal of Mathematical and Statistical Psychology, 25,(1), 207-212.
Browne, M. W. (1972b). Orthogonal rotation to a partially specifed target. British Journal of Statistical Psychology, 25,(1), 115-120.
Browne, M. W. (2001). An overview of analytic rotation in exploratory factor analysis. Multivariate Behavioral Research, 36(1), 111-150.
Cureton, E. E., & Mulaik, S. A. (1975). The weighted varimax rotation and the promax rotation. Psychometrika, 40(2), 183-195.
Guttman, L. (1955). The determinacy of factor score matrices with implications for five other basic problems of common factor theory. British Journal of Statistical Psychology, 8(2), 65-81.
Jung, S. & Takane, Y. (2008). Regularized common factor analysis. New Trends in Psychometrics, 141-149.
Mansolf, M., & Reise, S. P. (2016). Exploratory bifactor analysis: The Schmid-Leiman orthogonalization and Jennrich-Bentler analytic rotations. Multivariate Behavioral Research, 51(5), 698-717.
Rozeboom, W. W. (1992). The glory of suboptimal factor rotation: Why local minima in analytic optimization of simple structure are more blessing than curse. Multivariate Behavioral Research, 27(4), 585-599.
Zhang, G. (2014). Estimating standard errors in exploratory factor analysis. Multivariate Behavioral Research, 49(4), 339-353.
Other Factor Analysis Routines:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
## Example 1 ## Generate an orthogonal factor model lambda <- matrix(c(.41, .00, .00, .45, .00, .00, .53, .00, .00, .00, .66, .00, .00, .38, .00, .00, .66, .00, .00, .00, .68, .00, .00, .56, .00, .00, .55), nrow = 9, ncol = 3, byrow = TRUE) ## Generate factor correlation matrix Phi <- matrix(.50, nrow = 3, ncol = 3) diag(Phi) <- 1 ## Model-implied correlation matrix R <- lambda %*% Phi %*% t(lambda) diag(R) <- 1 ## Load the MASS package to create multivariate normal data library(MASS) ## Generate raw data to perfectly reproduce R X <- mvrnorm(Sigma = R, mu = rep(0, nrow(R)), empirical = TRUE, n = 300) ## Not run: ## Execute 50 promax rotations from a least squares factor extraction ## Compute 100 bootstrap samples to compute standard errors and ## 80 percent confidence intervals Out1 <- faMain(X = X, numFactors = 3, facMethod = "fals", rotate = "promaxQ", bootstrapSE = TRUE, numBoot = 100, CILevel = .80, faControl = list(treatHeywood = TRUE), rotateControl = list(numberStarts = 2, power = 4, standardize = "Kaiser"), digits = 2) Out1[c("loadings", "Phi")] ## End(Not run) ## Example 2 ## Load Thurstone's (in)famous box data data(Thurstone, package = "GPArotation") ## Execute 5 oblimin rotations with Cureton-Mulaik standardization Out2 <- faMain(urLoadings = box26, rotate = "oblimin", bootstrapSE = FALSE, rotateControl = list(numberStarts = 5, standardize = "CM", gamma = 0, epsilon = 1e-6), digits = 2) Out2[c("loadings", "Phi")] ## Example 3 ## Factor matrix from Browne 1972 lambda <- matrix(c(.664, .322, -.075, .688, .248, .192, .492, .304, .224, .837, -.291, .037, .705, -.314, .155, .820, -.377, -.104, .661, .397, .077, .457, .294, -.488, .765, .428, .009), nrow = 9, ncol = 3, byrow = TRUE) ## Create partially-specified target matrix Targ <- matrix(c(NA, 0, NA, NA, 0, 0, NA, 0, 0, NA, NA, NA, NA, NA, 0, NA, NA, NA, .7, NA, NA, 0, NA, NA, .7, NA, NA), nrow = 9, ncol = 3, byrow = TRUE) ## Perform target rotation Out3 <- faMain(urLoadings = lambda, rotate = "targetT", targetMatrix = Targ, digits = 3)$loadings Out3
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.