lavaan (version 0.5-9)

cfa: Fit Confirmatory Factor Analysis Models


Fit a Confirmatory Factor Analysis (CFA) model.


cfa(model = NULL, meanstructure = "default", fixed.x = "default",
    orthogonal = FALSE, = FALSE, data = NULL, std.ov = FALSE,
    missing = "default", ordered = NULL, sample.cov = NULL, sample.mean = NULL,
    sample.nobs = NULL, group = NULL, group.label = NULL,
    group.equal = "", group.partial = "", cluster = NULL, constraints = '', 
    estimator = "default", likelihood = "default", 
    information = "default", se = "default", test = "default",
    bootstrap = 1000L, mimic = "default", representation = "default", = TRUE, control = list(), start = "default",
    verbose = FALSE, warn = TRUE, debug = FALSE)


A description of the user-specified model. Typically, the model is described using the lavaan model syntax. See model.syntax for more information. Alternatively, a paramete
If TRUE, the means of the observed variables enter the model. If "default", the value is set based on the user-specified model, and/or the values of other arguments.
If TRUE, the exogenous `x' covariates are considered fixed variables and the means, variances and covariances of these variables are fixed to their sample values. If FALSE, they are considered random, and the means, v
If TRUE, the exogenous latent variables are assumed to be uncorrelated.
If TRUE, the metric of each latent variable is determined by fixing their variances to 1.0. If FALSE, the metric of each latent variable is determined by fixing the factor loading of the first indicator to 1.0.
An optional data frame containing the observed variables used in the model. If some variables are declared as ordered factors, lavaan will treat them as ordinal variables. This can be overriden by the ordered argument.
If TRUE, all observed variables are standardized before entering the analysis.
If "listwise", cases with missing values are removed listwise from the data frame before analysis. If "direct" or "ml" or "fiml" and the estimator is maximum likelihood, Full Information Maxi
Character vector. Only used if the data is in a data.frame. Treat these variables as ordered (ordinal) variables, if they are endogenous in the model. Importantly, all other variables will be treated as numeric (overriding any attributes in
Numeric matrix. A sample variance-covariance matrix. The rownames must contain the observed variable names. For a multiple group analysis, a list with a variance-covariance matrix for each group.
A sample mean vector. For a multiple group analysis, a list with a mean vector for each group.
Number of observations if the full data frame is missing and only sample moments are given. For a multiple group analysis, a list or a vector with the number of observations for each group.
A variable name in the data frame defining the groups in a multiple group analysis.
A character vector. The user can specify which group (or factor) levels need to be selected from the grouping variable, and in which order. If NULL (the default), all grouping levels are selected, in the order as they appear in the data.
A vector of character strings. Only used in a multiple group analysis. Can be one or more of the following: "loadings", "intercepts", "means", "thresholds", "regressions",
A vector of character strings containing the labels of the parameters which should be free in all groups (thereby overriding the group.equal argument for some specific parameters).
Not used yet.
Additional (in)equality constraints not yet included in the model syntax. See model.syntax for more information.
The estimator to be used. Can be one of the following: "ML" for maximum likelihood, "GLS" for generalized least squares, "WLS" for weighted least squares (sometimes called ADF estimation), "ULS"
Only relevant for ML estimation. If "wishart", the wishart likelihood approach is used. In this approach, the covariance matrix has been divided by N-1, and both standard errors and test statistics are based on N-1. If
If "expected", the expected information matrix is used (to compute the standard errors). If "observed", the observed information matrix is used. If "default", the value is set depending on the estimator
If "standard", conventional standard errors are computed based on inverting the (expected or observed) information matrix. If "first.order", standard errors are computed based on first-order derivatives. If "
If "standard", a conventional chi-square test is computed. If "Satorra.Bentler", a Satorra-Bentler scaled test statistic is computed. If "Yuan.Bentler", a Yuan-Bentler scaled test statistic is computed. I
Number of bootstrap draws, if bootstrapping is used.
If "Mplus", an attempt is made to mimic the Mplus program. If "EQS", an attempt is made to mimic the EQS program. If "default", the value is (currently) set to "lavaan", which is very close
If "LISREL" the classical LISREL matrix representation is used to represent the model (using the all-y variant).
If FALSE, the model is not fit, and the current starting values of the model parameters are preserved.
A list containing control parameters passed to the optimizer. By default, lavaan uses "nlminb". See the manpage of nlminb for an overview of the control parameters. A different op
If it is a character string, the two options are currently "simple" and "Mplus". In the first case, all parameter values are set to zero, except the factor loadings (set to one), the variances of latent variables
If TRUE, the function value is printed out during each iteration.
If TRUE, some (possibly harmless) warnings are printed out during the iterations.
If TRUE, debugging information is printed out.


  • An object of class lavaan, for which several methods are available, including a summary method.


The cfa function is a wrapper for the more general lavaan function, using the following default arguments: = TRUE, = FALSE, auto.fix.first = TRUE (unless = TRUE), auto.fix.single = TRUE, auto.var = TRUE, = TRUE, and auto.cov.y = TRUE.


Yves Rosseel (2012). lavaan: An R Package for Structural Equation Modeling. Journal of Statistical Software, 48(2), 1-36. URL

See Also



Run this code
## The famous Holzinger and Swineford (1939) example
HS.model <- 'visual  =~ x1 + x2 + x3
              textual =~ x4 + x5 + x6
              speed   =~ x7 + x8 + x9 '

fit <- cfa(HS.model, data=HolzingerSwineford1939)
summary(fit, fit.measures=TRUE)

Run the code above in your browser using DataLab