This function performs a Factor Analysis (FA).
factor_analysis(
x,
n = "auto",
rotation = "none",
sort = FALSE,
threshold = NULL,
standardize = TRUE,
cor = NULL,
...
)
A data frame or a statistical model.
Number of components to extract. If n="all"
, then n
is
set as the number of variables minus 1 (ncol(x)-1
). If
n="auto"
(default) or n=NULL
, the number of components is
selected through n_factors
resp. n_components
.
In reduce_parameters
, can also be "max"
, in which case
it will select all the components that are maximally pseudo-loaded (i.e.,
correlated) by at least one variable.
If not "none"
, the PCA / FA will be computed using the
psych package. Possible options include "varimax"
,
"quartimax"
, "promax"
, "oblimin"
, "simplimax"
,
or "cluster"
(and more). See fa
for details.
Sort the loadings.
A value between 0 and 1 indicates which (absolute) values
from the loadings should be removed. An integer higher than 1 indicates the
n strongest loadings to retain. Can also be "max"
, in which case it
will only display the maximum loading per variable (the most simple
structure).
A logical value indicating whether the variables should be standardized (centered and scaled) to have unit variance before the analysis (in general, such scaling is advisable).
An optional correlation matrix that can be used (note that the
data must still be passed as the first argument). If NULL
, will
compute it by running cor()
on the passed data.
Arguments passed to or from other methods.
A data frame of loadings.
Complexity represents the number of latent components needed to account for the observed variables. Whereas a perfect simple structure solution has a complexity of 1 in that each item would only load on one factor, a solution with evenly distributed items has a complexity greater than 1 (Hofman, 1978; Pettersson and Turkheimer, 2010) .
Uniqueness represents the variance that is 'unique' to the variable and
not shared with other variables. It is equal to 1 <U+2013> communality
(variance that is shared with other variables). A uniqueness of 0.20
suggests that 20% or that variable's variance is not shared with other
variables in the overall factor model. The greater 'uniqueness' the lower
the relevance of the variable in the factor model.
MSA represents the Kaiser-Meyer-Olkin Measure of Sampling Adequacy (Kaiser and Rice, 1974) for each item. It indicates whether there is enough data for each factor give reliable results for the PCA. The value should be > 0.6, and desirable values are > 0.8 (Tabachnick and Fidell, 2013).
There is a simplified rule of thumb that may help do decide whether to run a factor analysis or a principal component analysis:
Run factor analysis if you assume or wish to test a theoretical model of latent factors causing observed variables.
Run principal component analysis If you want to simply reduce your correlated observed variables to a smaller set of important independent composite variables.
Use get_scores
to compute scores for the "subscales"
represented by the extracted principal components. get_scores()
takes the results from principal_components()
and extracts the
variables for each component found by the PCA. Then, for each of these
"subscales", raw means are calculated (which equals adding up the single
items and dividing by the number of items). This results in a sum score
for each component from the PCA, which is on the same scale as the
original, single items that were used to compute the PCA.
One can also use predict()
to back-predict scores for each component,
to which one can provide newdata
or a vector of names
for the
components.
Hofmann, R. (1978). Complexity and simplicity as objective indices descriptive of factor solutions. Multivariate Behavioral Research, 13:2, 247-250, 10.1207/s15327906mbr1302_9
Pettersson, E., & Turkheimer, E. (2010). Item selection, evaluation, and simple structure in personality data. Journal of research in personality, 44(4), 407-420, 10.1016/j.jrp.2010.03.002
# NOT RUN {
library(parameters)
if (require("psych")) {
factor_analysis(mtcars[, 1:7], n = "all", threshold = 0.2)
factor_analysis(mtcars[, 1:7], n = 2, rotation = "oblimin", threshold = "max", sort = TRUE)
factor_analysis(mtcars[, 1:7], n = 2, threshold = 2, sort = TRUE)
efa <- factor_analysis(mtcars[, 1:5], n = 2)
summary(efa)
predict(efa)
# }
# NOT RUN {
# Automated number of components
factor_analysis(mtcars[, 1:4], n = "auto")
# }
# NOT RUN {
}
# }
Run the code above in your browser using DataLab