rotation(loadings [, method:Method, kaiser:T, reorder:T, lambda:lam,verbose:T]), where loadings is a REAL matrix, lam >= 0 is a real scalar and Method is a quoted string or CHARACTER scalar |

L <- rotation(Loadings) or L <- rotation(Loadings, method:"varimax") sets L to a matrix derived by varimax "rotation" from Loadings. That is, an orthogonal matrix R is found so that L = Loadings %*% R maximizes a certain criterion. Loadings must be a REAL matrix with no MISSING values and with nrows(Loadings) >= ncols(Loadings). The result L is a REAL matrix with the same dimensions as Loadings. rotation(Loadings, kaiser:T [,method:"varimax"]) does the same except Kaiser normalization is used. That is the rows of loadings are rescaled to have norm 1 before rotation and then unscaled after rotation. rotation(Loadings, method:"quartimax" [, kaiser:T]) does the same except the quartimax criterion is maximized. rotation(Loadings, method:"equimax" [, kaiser:T]) does the same except the equimax criterion is maximized. rotation(Loadings, method:"orthomax", lambda:lam [, kaiser:T]) where lam >= is a REAL scalar does the same except the orthomax crition with parameter lam is maximized. lam = 1, lam = 0 and lam = ncols(Loadings)/2 correspond to varimax, quartimax and equimax rotation, respectively. rotation(Loadings, verbose:T [,method:Method ...]) prints the value of the criterion before and after rotation. rotation(Loadings, reorder:T [,method:Method ...]) does the same except that after rotation each column is multiplied by +1 or -1 so that the column sum is positive, and the columns are reordered in decreasing order of the column sums of squares. Function rotation() is designed to be used to rotate a factor analysis matrix of loadings so as to achieve "simple structure." It is usual to rotate not the loading matrix itself, but the loading matrix scaled so that the row sums of squared loadings are constant. The rotated matrix is then rescaled to restore the original row sums of squares. This is sometimes called Kaiser normalization and is accomplished automaticall by using 'kaiser:T' as an argument. The rotated matrix has the form rotated_L = L %*% A, where A is m by m. A can be recovered as A <- solve(L' %*% L, L' %*% rotated_L) The algorithm used is iterative, using a default convergence criterion of epsilon = .00001, and performing a maximum of 100 iterations. These values can be modified by including keyword phrases 'epsilon:value' and/or 'maxiter:n', where value is a small positive number and n is a positive integer. Caution: Do not confuse rotation() with rotate() which shifts the rows of its first argument up or down, wrapping around the end.

Gary Oehlert 2003-01-15