Knowledge Base / Confirmatory Factor Analysis (CFA) Advanced Analysis 55 min read

Confirmatory Factor Analysis (CFA)

Comprehensive reference guide for confirmatory factor analysis and measurement model validation.

Confirmatory Factor Analysis: Zero to Hero Tutorial

This comprehensive tutorial takes you from the foundational concepts of Confirmatory Factor Analysis (CFA) all the way through advanced model specification, estimation, evaluation, modification, and practical usage within the DataStatPro application. Whether you are new to structural modelling or building on prior EFA experience, this guide develops your understanding systematically from the ground up.


Table of Contents

  1. Prerequisites and Background Concepts
  2. What is Confirmatory Factor Analysis?
  3. The Mathematics Behind CFA
  4. Assumptions of CFA
  5. Types of CFA Models
  6. Using the CFA Component
  7. Model Specification
  8. Model Identification
  9. Estimation Methods
  10. Model Fit and Evaluation
  11. Model Modification and Respecification
  12. Interpreting CFA Results
  13. Measurement Invariance Testing
  14. Worked Examples
  15. Common Mistakes and How to Avoid Them
  16. Troubleshooting
  17. Quick Reference Cheat Sheet

1. Prerequisites and Background Concepts

Before diving into Confirmatory Factor Analysis, it is essential to be comfortable with the following foundational concepts. Each is briefly reviewed here. If you are coming directly from the EFA tutorial, many of these will already be familiar.

1.1 The Common Factor Model (Review)

Recall from the EFA tutorial that the common factor model expresses each observed variable XjX_j as a linear function of one or more latent factors plus a unique (error) term:

Xj=λj1F1+λj2F2++λjmFm+ϵjX_j = \lambda_{j1}F_1 + \lambda_{j2}F_2 + \dots + \lambda_{jm}F_m + \epsilon_j

In matrix form:

X=ΛF+ϵ\mathbf{X} = \boldsymbol{\Lambda}\mathbf{F} + \boldsymbol{\epsilon}

Where:

CFA uses exactly this model — but unlike EFA, the structure of Λ\boldsymbol{\Lambda} is pre-specified by the researcher rather than discovered from the data.

1.2 Variance-Covariance Matrix

The variance-covariance matrix Σ\boldsymbol{\Sigma} (or S\mathbf{S} when estimated from data) is a square symmetric matrix that contains variances on its diagonal and covariances on its off-diagonal elements:

Σ=(σ12σ12σ1pσ21σ22σ2pσp1σp2σp2)\boldsymbol{\Sigma} = \begin{pmatrix} \sigma^2_1 & \sigma_{12} & \cdots & \sigma_{1p} \\ \sigma_{21} & \sigma^2_2 & \cdots & \sigma_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ \sigma_{p1} & \sigma_{p2} & \cdots & \sigma^2_p \end{pmatrix}

CFA works by comparing the model-implied covariance matrix Σ(θ)\boldsymbol{\Sigma}(\boldsymbol{\theta}) (derived from the model parameters) with the observed sample covariance matrix S\mathbf{S}. The closer these two matrices are, the better the model fits the data.

1.3 Model Parameters and Parameter Vectors

In CFA, the unknown quantities to be estimated are collected into a parameter vector θ\boldsymbol{\theta}, which typically contains:

The model implies a specific covariance structure:

Σ(θ)=ΛΦΛT+Θϵ\boldsymbol{\Sigma}(\boldsymbol{\theta}) = \boldsymbol{\Lambda}\boldsymbol{\Phi}\boldsymbol{\Lambda}^T + \boldsymbol{\Theta}_\epsilon

This is the fundamental equation of CFA — the model-implied covariance matrix expressed as a function of the model parameters.

1.4 Degrees of Freedom in Structural Models

The degrees of freedom (df) for a CFA model are:

df=p(p+1)2qdf = \frac{p(p+1)}{2} - q

Where:

Degrees of freedom indicate how much information is left over after estimating the model parameters. A model with df>0df > 0 is testable — the remaining information can be used to assess fit.

1.5 Hypothesis Testing Framework

CFA operates within a formal hypothesis testing framework. The null hypothesis is that the model-implied covariance matrix equals the population covariance matrix:

H0:Σ=Σ(θ)H_0: \boldsymbol{\Sigma} = \boldsymbol{\Sigma}(\boldsymbol{\theta})

H1:ΣΣ(θ)H_1: \boldsymbol{\Sigma} \neq \boldsymbol{\Sigma}(\boldsymbol{\theta})

A statistically significant test (rejection of H0H_0) suggests the model does not fit the data. Note that in SEM/CFA, we typically want to retain H0H_0 (non-significant test = good fit), which is the opposite of most hypothesis tests.


2. What is Confirmatory Factor Analysis?

2.1 The Core Idea

Confirmatory Factor Analysis (CFA) is a theory-driven statistical technique used to test whether a hypothesised factor structure — specified by the researcher in advance — is consistent with observed data.

Unlike Exploratory Factor Analysis (EFA), which discovers the factor structure from the data with minimal constraints, CFA begins with an explicit, pre-specified model that states:

CFA then tests whether this pre-specified structure is statistically tenable — that is, whether it can adequately reproduce the patterns of correlations (or covariances) observed in the data.

2.2 The Role of Theory

Theory is not optional in CFA — it is mandatory. You must be able to state, before looking at the data:

"I hypothesise that variable X1X_1, X2X_2, and X3X_3 are indicators of latent Factor 1, and that X4X_4, X5X_5, and X6X_6 are indicators of latent Factor 2."

This prior specification is what makes CFA confirmatory — you are testing a theory, not searching for one.

2.3 Where CFA Fits in the Research Cycle

CFA typically follows EFA in the scale development cycle: Theory → Item Development → EFA (Discover structure) → New Sample → CFA (Confirm structure) → Revise Theory → Collect New Data → CFA again

Important: EFA and CFA should ideally be conducted on different, independent samples. Using the same sample for both EFA (to discover a structure) and CFA (to confirm the same structure) is circular and will produce artificially good fit.

2.4 CFA as a Special Case of SEM

CFA is a special case of Structural Equation Modelling (SEM). In full SEM:

CFA alone contains only the measurement model — there are no directional paths between factors, only correlations (covariances).

2.5 EFA vs. CFA: A Comprehensive Comparison

FeatureEFACFA
PurposeDiscover factor structureTest a hypothesised structure
Prior theory requiredNoYes — mandatory
Factor-variable assignmentsNot pre-specifiedPre-specified by researcher
Zero loadingsNot specifiedExplicitly constrained to zero
Cross-loadingsAll variables load on all factorsCross-loadings fixed to zero (by default)
RotationRequired for interpretabilityNot applicable (structure is fixed)
Fit evaluationDescriptive (RMSR, residuals)Formal statistical fit indices (CFI, RMSEA, etc.)
Model modificationChange number of factors or rotationModification indices, parameter freeing
Factor correlationsEstimated post-hoc (oblique)Specified a priori
Error covariancesAssumed zeroCan be freed if theoretically justified
Typical useScale development, early researchScale validation, theory testing

2.6 Real-World Applications


3. The Mathematics Behind CFA

3.1 The CFA Model in Full

For pp observed variables X=(X1,X2,,Xp)T\mathbf{X} = (X_1, X_2, \dots, X_p)^T, mm latent factors F=(F1,F2,,Fm)T\mathbf{F} = (F_1, F_2, \dots, F_m)^T, and pp unique factors ϵ=(ϵ1,ϵ2,,ϵp)T\boldsymbol{\epsilon} = (\epsilon_1, \epsilon_2, \dots, \epsilon_p)^T, the CFA measurement model is:

X=μ+ΛF+ϵ\mathbf{X} = \boldsymbol{\mu} + \boldsymbol{\Lambda}\mathbf{F} + \boldsymbol{\epsilon}

Where μ\boldsymbol{\mu} is the p×1p \times 1 vector of variable means (intercepts). When working with mean-centred or standardised variables (as is typical), μ=0\boldsymbol{\mu} = \mathbf{0} and the model simplifies to:

X=ΛF+ϵ\mathbf{X} = \boldsymbol{\Lambda}\mathbf{F} + \boldsymbol{\epsilon}

3.2 Model Assumptions (Mathematical)

The formal mathematical assumptions are:

  1. E(F)=0E(\mathbf{F}) = \mathbf{0} — Factors have zero mean.
  2. E(ϵ)=0E(\boldsymbol{\epsilon}) = \mathbf{0} — Unique factors have zero mean.
  3. Cov(F,ϵ)=0\text{Cov}(\mathbf{F}, \boldsymbol{\epsilon}) = \mathbf{0} — Factors and unique factors are uncorrelated.
  4. Cov(ϵ)=Θϵ\text{Cov}(\boldsymbol{\epsilon}) = \boldsymbol{\Theta}_\epsilon — Unique factor covariance matrix (usually diagonal, i.e., errors are uncorrelated).
  5. Cov(F)=Φ\text{Cov}(\mathbf{F}) = \boldsymbol{\Phi} — Factor covariance matrix (contains factor variances on the diagonal, covariances off-diagonal).

3.3 The Model-Implied Covariance Matrix

Under the above assumptions, the model-implied covariance matrix of the observed variables is:

Σ(θ)=ΛΦΛT+Θϵ\boldsymbol{\Sigma}(\boldsymbol{\theta}) = \boldsymbol{\Lambda}\boldsymbol{\Phi}\boldsymbol{\Lambda}^T + \boldsymbol{\Theta}_\epsilon

Where:

This equation is the cornerstone of CFA. Every parameter in the model contributes to this implied covariance matrix, and model fit is assessed by comparing this implied matrix to the observed sample covariance matrix S\mathbf{S}.

3.4 The CFA Discrepancy Function

Estimation finds the parameter vector θ^\hat{\boldsymbol{\theta}} that minimises the discrepancy between S\mathbf{S} and Σ(θ)\boldsymbol{\Sigma}(\boldsymbol{\theta}). For Maximum Likelihood estimation (the most common method), the discrepancy function is:

FML(θ)=lnΣ(θ)+tr[SΣ1(θ)]lnSpF_{ML}(\boldsymbol{\theta}) = \ln|\boldsymbol{\Sigma}(\boldsymbol{\theta})| + \text{tr}[\mathbf{S}\boldsymbol{\Sigma}^{-1}(\boldsymbol{\theta})] - \ln|\mathbf{S}| - p

Where:

FMLF_{ML} equals zero when Σ(θ)=S\boldsymbol{\Sigma}(\boldsymbol{\theta}) = \mathbf{S} exactly (perfect fit) and increases as the two matrices diverge.

3.5 The Model Chi-Squared Statistic

The model chi-squared statistic is derived from the minimised discrepancy function:

χmodel2=(n1)F^ML\chi^2_{\text{model}} = (n - 1) \cdot \hat{F}_{ML}

With degrees of freedom:

df=p(p+1)2qdf = \frac{p(p+1)}{2} - q

Where nn is the sample size and qq is the number of freely estimated parameters. This statistic tests H0:Σ=Σ(θ)H_0: \boldsymbol{\Sigma} = \boldsymbol{\Sigma}(\boldsymbol{\theta}).

3.6 Communality and Reliability in CFA

In CFA, the communality of observed variable XjX_j (the proportion of its variance explained by the common factors) is:

hj2=λj2ϕkkλj2ϕkk+θjh_j^2 = \frac{\lambda_j^2 \phi_{kk}}{\lambda_j^2 \phi_{kk} + \theta_j}

For a standardised factor (variance = 1), this simplifies to:

hj2=λj2λj2+θj=λj2h_j^2 = \frac{\lambda_j^2}{\lambda_j^2 + \theta_j} = \lambda_j^2

(when the factor variance is fixed to 1 and the loading is from a standardised solution).

The reliability of each indicator (its squared standardised loading) is also called the item reliability or R2R^2 of the indicator:

Rj2=λ^j2(standardised loading squared)R^2_j = \hat{\lambda}_j^2 \quad \text{(standardised loading squared)}

3.7 Factor Variances and Covariances

The factor covariance matrix Φ\boldsymbol{\Phi} contains:

rkk=ϕkkϕkkϕkkr_{kk'} = \frac{\phi_{kk'}}{\sqrt{\phi_{kk} \phi_{k'k'}}}

In a standardised solution, all factor variances are set to 1, so ϕkk=rkk\phi_{kk'} = r_{kk'} directly.

3.8 The Residual (Error) Variance

The error variance (unique variance) of variable XjX_j is:

θj=Var(Xj)λj2ϕkk\theta_j = \text{Var}(X_j) - \lambda_j^2 \phi_{kk}

Or in the standardised solution:

θj=1λj2\theta_j = 1 - \lambda_j^2

Errors are assumed to be uncorrelated (i.e., Θϵ\boldsymbol{\Theta}_\epsilon is diagonal) unless correlated error terms are specifically freed — typically only when there is a theoretical justification (e.g., two items share method variance because they are both reverse-scored).


4. Assumptions of CFA

4.1 Correct Model Specification

The most fundamental assumption of CFA is that the hypothesised model is correctly specified — that the factor structure, the pattern of zero and non-zero loadings, and the factor correlations reflect the true population structure. Misspecification of any aspect of the model will result in poor fit and/or biased parameter estimates.

⚠️ No amount of statistical power or sample size can compensate for a fundamentally wrong model. Theory must guide model specification.

4.2 Multivariate Normality

The most common estimator (Maximum Likelihood) assumes that the observed variables follow a multivariate normal distribution. This requires:

Mardia's multivariate kurtosis coefficient is frequently used to assess this assumption. A commonly cited threshold is a normalised multivariate kurtosis value <3.0< 3.0 to proceed comfortably with standard ML.

When normality is violated:

4.3 Independence of Observations

Each observation (row in the dataset) must be statistically independent of every other. Clustered or nested data (e.g., students within schools, measurements within individuals) violates this assumption. Address with:

4.4 Adequate Sample Size

CFA is a large-sample technique. Parameter estimates and fit statistics are asymptotically derived and may be unreliable in small samples. General guidelines:

Rule of ThumbRecommendation
Absolute minimumn100n \geq 100
General recommendationn200n \geq 200
Complex modelsn400500n \geq 400-500
Observed-variable-to-parameter ratioAt least 5:1 (preferably 10:1)
MacCallum's rule (for stable estimates)n200n \geq 200 for high communalities (h2>0.60h^2 > 0.60)

⚠️ With small samples, chi-squared tests are underpowered (may fail to detect truly poor fit) and standard errors are inflated. Conversely, with very large samples (n>1000n > 1000), even trivial model misspecifications produce significant chi-squared tests.

4.5 Sufficient Indicator Reliability

Each latent factor should be measured by indicators with meaningful standardised loadings. As a minimum:

Low loadings indicate that the indicators are poor measures of the latent factor.

4.6 No Perfect Multicollinearity or Singularity

Variables that are perfectly correlated (or nearly so) will cause the covariance matrix S\mathbf{S} to be singular (non-invertible), making estimation impossible. Remove redundant variables before running CFA.

4.7 Scale of Measurement

Observed variables should be continuous (interval or ratio scale). For ordinal variables with 5 or more categories, standard ML can often be used with little consequence. For truly ordinal data (fewer than 5 categories) or binary variables, use a polychoric/tetrachoric correlation matrix with WLS or WLSMV estimation.


5. Types of CFA Models

5.1 The Single-Factor (One-Factor) Model

All pp observed variables load on a single latent factor. This is the simplest CFA model:

Σ(θ)=λλT+Θϵ\boldsymbol{\Sigma}(\boldsymbol{\theta}) = \boldsymbol{\lambda}\boldsymbol{\lambda}^T + \boldsymbol{\Theta}_\epsilon

Where λ\boldsymbol{\lambda} is a p×1p \times 1 vector of loadings.

Use case: Testing whether a scale is truly unidimensional (measures a single construct). Requirement: p3p \geq 3 indicators for identification.

5.2 The Correlated Factors (Standard) Model

The most common CFA model: mm factors, each measured by a distinct set of indicators, with factors allowed to correlate freely:

Σ(θ)=ΛΦΛT+Θϵ\boldsymbol{\Sigma}(\boldsymbol{\theta}) = \boldsymbol{\Lambda}\boldsymbol{\Phi}\boldsymbol{\Lambda}^T + \boldsymbol{\Theta}_\epsilon

Where Φ\boldsymbol{\Phi} has free off-diagonal elements (factor covariances).

Use case: Most scale validation studies with multiple subscales.

5.3 The Orthogonal Factors Model

Same as the correlated factors model, but factor covariances are constrained to zero (Φ=I\boldsymbol{\Phi} = \mathbf{I}):

Σ(θ)=ΛΛT+Θϵ\boldsymbol{\Sigma}(\boldsymbol{\theta}) = \boldsymbol{\Lambda}\boldsymbol{\Lambda}^T + \boldsymbol{\Theta}_\epsilon

Use case: Testing whether factors are truly independent. Rarely realistic in social sciences — use only if theoretically justified.

5.4 The Higher-Order (Second-Order) Factor Model

A higher-order CFA posits that the correlations among the first-order factors are themselves explained by one or more second-order factors. For example:

Model structure:

F1=ΓF2+ζ\mathbf{F}_1 = \boldsymbol{\Gamma}\mathbf{F}_2 + \boldsymbol{\zeta}

Where:

5.5 The Bifactor Model

A bifactor model specifies a general factor (GG) that loads on all observed variables, plus several group-specific factors (each loading on a subset of variables):

Xj=λjGG+λjkFk+ϵjX_j = \lambda_{jG} G + \lambda_{jk} F_k + \epsilon_j

The general factor and group factors are orthogonal. This model is useful for:

Bifactor model fit statistic — Omega (ω\omega):

ωgeneral=(j=1pλjG)2(j=1pλjG)2+k=1m(jFkλjk)2+j=1pθj\omega_{\text{general}} = \frac{(\sum_{j=1}^p \lambda_{jG})^2}{(\sum_{j=1}^p \lambda_{jG})^2 + \sum_{k=1}^m (\sum_{j \in F_k} \lambda_{jk})^2 + \sum_{j=1}^p \theta_j}

5.6 Measurement Invariance Models

A series of increasingly constrained CFA models used to test whether the factor structure is equivalent across groups (e.g., genders, countries, time points). See Section 13 for full details.

5.7 Summary of CFA Model Types

Model TypeWhen to Use
Single-FactorTesting unidimensionality of a scale
Correlated FactorsStandard multi-subscale validation
Orthogonal FactorsTesting factor independence
Second-OrderTesting hierarchical factor structure
BifactorTesting general vs. specific factors
Invariance ModelsTesting equivalence across groups

6. Using the CFA Component

The CFA component in DataStatPro provides a complete workflow for specifying, estimating, evaluating, and modifying confirmatory factor models.

Step-by-Step Guide

Step 1 — Select Dataset

Choose the dataset from the "Dataset" dropdown. The dataset should contain the observed indicator variables you wish to include in the CFA. Ensure:

💡 Tip: Run basic descriptive statistics before CFA. Check means, standard deviations, skewness (z<2|z| < 2), and kurtosis (z<7|z| < 7) for each indicator before proceeding.

Step 2 — Specify the Factor Structure

Define your CFA model using the model specification panel:

⚠️ Important: Factor specification must be theory-driven, not data-driven. Do not inspect EFA loadings from the same dataset and then specify the CFA model — this is circular reasoning and inflates apparent model fit.

Step 3 — Set Identification Constraints

Choose how to set the metric (scale) of each latent factor. Two approaches are available:

💡 Tip: The marker variable approach is conventional and easier to interpret in unstandardised solutions. Fixed factor variance is useful for comparing loadings across factors.

Step 4 — Select Estimation Method

Choose from the "Estimation Method" dropdown:

💡 Recommendation: Use MLR as the default — it is robust to mild non-normality and performs well under most practical conditions.

Step 5 — Specify Error Covariances (If Applicable)

By default, all error covariances are fixed to zero. If theory justifies correlated errors (e.g., two items share similar wording, reverse-scored items), you can free specific error covariances in the advanced panel.

⚠️ Freeing error covariances purely based on modification indices, without theoretical justification, is a form of capitalising on chance and should be avoided.

Step 6 — Select Fit Indices to Report

Choose which fit statistics to display. The DataStatPro app reports:

Step 7 — Run the Analysis

Click "Run CFA". The application will:

  1. Build the model-implied covariance matrix Σ(θ)\boldsymbol{\Sigma}(\boldsymbol{\theta}).
  2. Estimate model parameters using the chosen estimator.
  3. Compute the chi-squared test, degrees of freedom, and pp-value.
  4. Compute all selected fit indices.
  5. Display the loading table (standardised and unstandardised).
  6. Generate modification indices and expected parameter change (EPC) statistics.
  7. Compute factor reliability and validity statistics (AVE, CR).

7. Model Specification

7.1 Three Types of Parameters

In a CFA model, every possible parameter is either:

Parameter TypeDefinitionDefault
FreeEstimated from the data— (must be specified)
FixedConstrained to a specific value (usually 0 or 1)Most loadings = 0; one loading per factor = 1
Constrained (Equality)Two or more parameters forced to be equalNot used by default

7.2 Specifying the Loading Matrix

The loading matrix Λ\boldsymbol{\Lambda} is specified by indicating which loadings are free and which are fixed to zero. A typical 2-factor, 6-indicator specification looks like:

Λ=(λ110λ210λ3100λ420λ520λ62)\boldsymbol{\Lambda} = \begin{pmatrix} \lambda_{11} & 0 \\ \lambda_{21} & 0 \\ \lambda_{31} & 0 \\ 0 & \lambda_{42} \\ 0 & \lambda_{52} \\ 0 & \lambda_{62} \end{pmatrix}

Where:

7.3 Identification Constraints in the Loading Matrix

One loading per factor must be fixed (either to 1 or to a specific value) to set the factor's scale. Using the marker variable approach, the first indicator of each factor has its loading fixed to 1:

Λ=(10λ210λ310010λ520λ62)\boldsymbol{\Lambda} = \begin{pmatrix} \mathbf{1} & 0 \\ \lambda_{21} & 0 \\ \lambda_{31} & 0 \\ 0 & \mathbf{1} \\ 0 & \lambda_{52} \\ 0 & \lambda_{62} \end{pmatrix}

7.4 Specifying Factor Covariances

The factor covariance matrix Φ\boldsymbol{\Phi} for a 2-factor model:

Φ=(ϕ11ϕ12ϕ12ϕ22)\boldsymbol{\Phi} = \begin{pmatrix} \phi_{11} & \phi_{12} \\ \phi_{12} & \phi_{22} \end{pmatrix}

7.5 Specifying Error Variances

Error variances are always freely estimated:

Θϵ=(θ1000θ2000θp)\boldsymbol{\Theta}_\epsilon = \begin{pmatrix} \theta_1 & 0 & \cdots & 0 \\ 0 & \theta_2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \theta_p \end{pmatrix}

If theoretically justified, specific off-diagonal elements (error covariances) can be freed:

Θϵ=(θ10θ130000θ20000θ130θ3000000θ4000000θ5000000θ6)\boldsymbol{\Theta}_\epsilon = \begin{pmatrix} \theta_1 & 0 & \theta_{13} & 0 & 0 & 0 \\ 0 & \theta_2 & 0 & 0 & 0 & 0 \\ \theta_{13} & 0 & \theta_3 & 0 & 0 & 0 \\ 0 & 0 & 0 & \theta_4 & 0 & 0 \\ 0 & 0 & 0 & 0 & \theta_5 & 0 \\ 0 & 0 & 0 & 0 & 0 & \theta_6 \end{pmatrix}

Here, θ13\theta_{13} is a freed error covariance between variables 1 and 3.

7.6 Counting Free Parameters

The total number of free parameters qq in a standard CFA model is:

q=(pm)+m(m+1)2+pq = (p - m) + \frac{m(m+1)}{2} + p

Where:


8. Model Identification

Model identification refers to whether there is a unique set of parameter values θ^\hat{\boldsymbol{\theta}} that can be estimated from the data. An unidentified model cannot be estimated.

8.1 The Three Conditions of Identification

ConditionDescription
Under-identifieddf<0df < 0: More parameters than data points — no unique solution exists
Just-identifieddf=0df = 0: Exactly as many parameters as data points — fits perfectly by definition; no fit test possible
Over-identifieddf>0df > 0: Fewer parameters than data points — a unique solution exists and fit can be tested

💡 All CFA models should be over-identified (df>0df > 0) to allow meaningful fit testing.

8.2 Necessary Conditions for Identification

Global condition: The model must have df0df \geq 0:

p(p+1)2q\frac{p(p+1)}{2} \geq q

Factor metric condition: Each factor must have a fixed scale. Either:

Local (sufficient) condition: Each factor must have at least 2 free loadings (preferably 3 or more) for reliable estimation.

8.3 The t-Rule (Necessary Condition)

A necessary (but not sufficient) condition for identification is that the number of free parameters must not exceed the number of known values:

qp(p+1)2q \leq \frac{p(p+1)}{2}

This ensures df0df \geq 0.

8.4 The Two-Indicator Rule

A single-factor model with exactly 2 indicators and factor variance fixed to 1 is just-identified (df=0df = 0). There is a unique solution but no degrees of freedom for testing. This is generally inadvisable — use at least 3 indicators per factor.

8.5 The Three-Indicator Rule

A single-factor model with 3 or more indicators (and one loading fixed for scale) is over-identified and can be properly tested. This is the minimum recommended number of indicators per factor.

💡 General recommendation: Each latent factor should have at least 3 indicators, ideally 4 or more, to ensure identification, stability, and reliability of the factor estimate.

8.6 Empirical Under-Identification

Even if a model is theoretically identified, it can be empirically under-identified if:

These situations will cause estimation to fail or produce inadmissible solutions. See the Troubleshooting section for solutions.


9. Estimation Methods

9.1 Maximum Likelihood (ML)

ML is the default and most widely used estimation method for CFA. It finds the parameter estimates θ^\hat{\boldsymbol{\theta}} that maximise the likelihood of observing the sample covariance matrix S\mathbf{S}, given the model.

The ML fit function (discrepancy function to be minimised):

FML=lnΣ(θ)+tr[SΣ1(θ)]lnSpF_{ML} = \ln|\boldsymbol{\Sigma}(\boldsymbol{\theta})| + \text{tr}[\mathbf{S}\boldsymbol{\Sigma}^{-1}(\boldsymbol{\theta})] - \ln|\mathbf{S}| - p

Properties of ML estimates:

The log-likelihood of the model is:

(θ)=n2[pln(2π)+lnΣ(θ)+tr(SΣ1(θ))]\ell(\boldsymbol{\theta}) = -\frac{n}{2}\left[p\ln(2\pi) + \ln|\boldsymbol{\Sigma}(\boldsymbol{\theta})| + \text{tr}(\mathbf{S}\boldsymbol{\Sigma}^{-1}(\boldsymbol{\theta}))\right]

9.2 Robust Maximum Likelihood (MLR)

MLR (also called Robust ML or the Satorra-Bentler method) adjusts the ML chi-squared statistic and standard errors to account for violations of multivariate normality.

The Satorra-Bentler scaled chi-squared statistic:

χSB2=χML2c\chi^2_{SB} = \frac{\chi^2_{ML}}{c}

Where cc is a scaling correction factor based on the degree of multivariate kurtosis in the data:

c=tr(U^W1)dfc = \frac{\text{tr}(\hat{\mathbf{U}}\mathbf{W}^{-1})}{df}

With U^\hat{\mathbf{U}} being an estimate of the asymptotic covariance matrix of the sample variances and covariances, and W\mathbf{W} being the weight matrix.

Robust standard errors are computed using the sandwich estimator:

Var^robust(θ^)=A1BA1\hat{\text{Var}}_{robust}(\hat{\boldsymbol{\theta}}) = \mathbf{A}^{-1}\mathbf{B}\mathbf{A}^{-1}

Where A=2/θθT\mathbf{A} = -\partial^2 \ell / \partial\boldsymbol{\theta}\partial\boldsymbol{\theta}^T is the Hessian and B\mathbf{B} is the cross-product of the score functions.

💡 Recommendation: Use MLR as the default estimator in practice. It performs nearly as well as ML when data are normal, and substantially better when they are not.

9.3 Weighted Least Squares (WLS) and WLSMV

For ordinal or binary indicators, standard ML is inappropriate. Instead:

WLS (Weighted Least Squares): Minimises a weighted version of the discrepancy between the sample and model-implied polychoric correlation matrix:

FWLS=(sσ(θ))TW1(sσ(θ))F_{WLS} = (\mathbf{s} - \boldsymbol{\sigma}(\boldsymbol{\theta}))^T \mathbf{W}^{-1} (\mathbf{s} - \boldsymbol{\sigma}(\boldsymbol{\theta}))

Where s\mathbf{s} and σ(θ)\boldsymbol{\sigma}(\boldsymbol{\theta}) are vectorised forms of the sample and model-implied correlation matrices, and W\mathbf{W} is a weight matrix.

WLSMV (Weighted Least Squares Mean and Variance Adjusted): A more robust variant of WLS that requires less extreme sample sizes. Uses polychoric/tetrachoric correlations and provides a mean-and-variance adjusted chi-squared statistic. Recommended for ordinal data in most practical applications.

9.4 Generalised Least Squares (GLS)

GLS minimises a discrepancy function that weights deviations by the inverse of the sample covariance matrix:

FGLS=12tr{[IS1Σ(θ)]2}F_{GLS} = \frac{1}{2}\text{tr}\{[\mathbf{I} - \mathbf{S}^{-1}\boldsymbol{\Sigma}(\boldsymbol{\theta})]^2\}

GLS is less commonly used than ML but does not require normality of the variables (only of the parameter estimates, asymptotically).

9.5 Comparison of Estimation Methods

MethodData TypeNormality RequiredRobust SEOrdinal OKFit Test
MLContinuousYesNoNoχ2\chi^2
MLRContinuousNo (robust)YesNoχSB2\chi^2_{SB}
GLSContinuousMildNoNoχ2\chi^2
WLSOrdinal/BinaryNoNoYesχ2\chi^2
WLSMVOrdinal/BinaryNoYesYesχMV2\chi^2_{MV}

10. Model Fit and Evaluation

Evaluating model fit in CFA requires examining multiple complementary indices — no single statistic tells the full story. A well-fitting model should show good fit across several indices simultaneously.

10.1 The Model Chi-Squared Test (χ2\chi^2)

The chi-squared test is the primary (and oldest) test of exact model fit:

χmodel2=(n1)F^ML\chi^2_{\text{model}} = (n - 1) \cdot \hat{F}_{ML}

df=p(p+1)2qdf = \frac{p(p+1)}{2} - q

Limitations:

⚠️ The chi-squared test should never be the sole basis for accepting or rejecting a CFA model. Always supplement with approximate fit indices.

10.2 The Normed Chi-Squared (χ2/df\chi^2/df)

A simple correction for sample size sensitivity is the ratio of chi-squared to degrees of freedom:

χ2/df=χmodel2df\chi^2/df = \frac{\chi^2_{\text{model}}}{df}

χ2/df\chi^2/dfInterpretation
2.0\leq 2.0Excellent fit
2.03.02.0 - 3.0Good fit
3.05.03.0 - 5.0Acceptable fit
>5.0> 5.0Poor fit

⚠️ This ratio lacks a formal statistical basis and thresholds vary widely across textbooks (some accept up to 5.0, others only up to 2.0). Use it as a rough indicator only.

10.3 Comparative Fit Index (CFI)

The CFI compares the fit of the target model to the null model (independence model — all observed variables are uncorrelated, no factors):

CFI=1max(χmodel2dfmodel,0)max(χnull2dfnull,0)\text{CFI} = 1 - \frac{\max(\chi^2_{\text{model}} - df_{\text{model}}, 0)}{\max(\chi^2_{\text{null}} - df_{\text{null}}, 0)}

CFI ranges from 0 to 1, where higher values indicate better fit.

CFIInterpretation
0.97\geq 0.97Excellent fit
0.950.960.95 - 0.96Good fit
0.900.940.90 - 0.94Acceptable fit
<0.90< 0.90Poor fit

💡 The widely cited cutoff of CFI 0.95\geq 0.95 for "good fit" (Hu & Bentler, 1999) was derived from simulations with specific conditions. Apply it as a guideline, not an absolute rule.

10.4 Tucker-Lewis Index (TLI) / Non-Normed Fit Index (NNFI)

The TLI is similar to CFI but penalises for model complexity (additional parameters). It can fall outside [0, 1] in practice:

TLI=χnull2/dfnullχmodel2/dfmodelχnull2/dfnull1\text{TLI} = \frac{\chi^2_{\text{null}}/df_{\text{null}} - \chi^2_{\text{model}}/df_{\text{model}}}{\chi^2_{\text{null}}/df_{\text{null}} - 1}

TLIInterpretation
0.97\geq 0.97Excellent fit
0.950.960.95 - 0.96Good fit
0.900.940.90 - 0.94Acceptable fit
<0.90< 0.90Poor fit

10.5 RMSEA (Root Mean Square Error of Approximation)

The RMSEA measures the discrepancy between the model and data per degree of freedom, adjusting for model complexity:

RMSEA=max(χmodel2dfdf(n1),0)\text{RMSEA} = \sqrt{\max\left(\frac{\chi^2_{\text{model}} - df}{df \cdot (n - 1)}, 0\right)}

RMSEA estimates the discrepancy in the population (not just the sample), making it less sensitive to sample size than the chi-squared test.

A 90% confidence interval for RMSEA is routinely reported:

RMSEAInterpretation
0.05\leq 0.05Close fit
0.050.080.05 - 0.08Adequate fit
0.080.100.08 - 0.10Mediocre fit
>0.10> 0.10Poor fit

💡 RMSEA favours more parsimonious (simpler) models and penalises for additional parameters. This makes it complementary to CFI, which does not penalise for complexity.

10.6 SRMR (Standardised Root Mean Square Residual)

The SRMR is the standardised average of all residual correlations (differences between observed and model-implied correlations):

SRMR=2jj(sjjσ^jjsjjsjj)2p(p+1)\text{SRMR} = \sqrt{\frac{2\sum_{j \leq j'}\left(\frac{s_{jj'} - \hat{\sigma}_{jj'}}{\sqrt{s_{jj}s_{j'j'}}}\right)^2}{p(p+1)}}

SRMR is particularly sensitive to misspecified factor loadings (rather than misspecified factor covariances).

SRMRInterpretation
0.05\leq 0.05Good fit
0.050.080.05 - 0.08Acceptable fit
0.080.100.08 - 0.10Marginal fit
>0.10> 0.10Poor fit

10.7 Information Criteria: AIC and BIC

AIC and BIC are used for comparing competing models (e.g., different numbers of factors, different indicator assignments), not for assessing absolute fit:

AIC=χmodel22df\text{AIC} = \chi^2_{\text{model}} - 2 \cdot df

BIC=χmodel2dfln(n)\text{BIC} = \chi^2_{\text{model}} - df \cdot \ln(n)

For both: lower values indicate a better-fitting, more parsimonious model.

💡 When comparing two models, a ΔAIC>10\Delta\text{AIC} > 10 or ΔBIC>10\Delta\text{BIC} > 10 is generally considered strong evidence in favour of the model with the lower value.

10.8 The Chi-Squared Difference Test (Δχ2\Delta\chi^2)

For nested models (one model is a restricted version of another), the improvement in fit can be formally tested using the chi-squared difference test:

Δχ2=χrestricted2χfree2\Delta\chi^2 = \chi^2_{\text{restricted}} - \chi^2_{\text{free}}

Δdf=dfrestricteddffree\Delta df = df_{\text{restricted}} - df_{\text{free}}

Under H0H_0 (the restriction is valid), Δχ2\Delta\chi^2 follows a chi-squared distribution with Δdf\Delta df degrees of freedom.

For MLR estimation, use the Satorra-Bentler scaled difference test:

ΔχSB2=χSB,restricted2dfrestrictedχSB,free2dffreecd\Delta\chi^2_{SB} = \frac{\chi^2_{SB,\text{restricted}} \cdot df_{\text{restricted}} - \chi^2_{SB,\text{free}} \cdot df_{\text{free}}}{cd}

Where cdcd is a scaling correction. This is computed automatically by DataStatPro when MLR is used.

10.9 Composite Reliability (CR) and Average Variance Extracted (AVE)

Beyond model fit, reliability and validity of the measurement model are assessed using:

Composite Reliability (CR) (also called construct reliability or Raykov's ω\omega):

CRk=(jFkλ^j)2(jFkλ^j)2+jFkθ^j\text{CR}_k = \frac{(\sum_{j \in F_k} \hat{\lambda}_j)^2}{(\sum_{j \in F_k} \hat{\lambda}_j)^2 + \sum_{j \in F_k} \hat{\theta}_j}

Where λ^j\hat{\lambda}_j are standardised loadings and θ^j\hat{\theta}_j are error variances for indicators of factor kk.

CRInterpretation
0.70\geq 0.70Acceptable reliability
0.80\geq 0.80Good reliability
0.90\geq 0.90Excellent reliability (but check for item redundancy)

Average Variance Extracted (AVE): Measures the average proportion of variance in the indicators explained by the factor:

AVEk=jFkλ^j2jFkλ^j2+jFkθ^j=jFkλ^j2nk\text{AVE}_k = \frac{\sum_{j \in F_k} \hat{\lambda}_j^2}{\sum_{j \in F_k} \hat{\lambda}_j^2 + \sum_{j \in F_k} \hat{\theta}_j} = \frac{\sum_{j \in F_k} \hat{\lambda}_j^2}{n_k}

Where nkn_k is the number of indicators for factor kk.

AVEInterpretation
0.50\geq 0.50Factor explains more variance than error — convergent validity supported
<0.50< 0.50Error dominates — poor convergent validity

Discriminant Validity (Fornell-Larcker Criterion): For each pair of factors kk and kk':

AVEk>rkk2\text{AVE}_k > r^2_{kk'} and AVEk>rkk2\text{AVE}_{k'} > r^2_{kk'}

Where rkkr_{kk'} is the correlation between factors kk and kk'. This criterion checks that each factor shares more variance with its own indicators than with any other factor.

10.10 Comprehensive Fit Evaluation Summary

IndexExcellentGoodAcceptablePoor
χ2\chi^2 pp-value>0.05> 0.05<0.05< 0.05
χ2/df\chi^2/df2\leq 2232 - 3353 - 5>5> 5
CFI0.97\geq 0.970.950.960.95 - 0.960.900.940.90 - 0.94<0.90< 0.90
TLI0.97\geq 0.970.950.960.95 - 0.960.900.940.90 - 0.94<0.90< 0.90
RMSEA0.05\leq 0.050.050.060.05 - 0.060.060.080.06 - 0.08>0.10> 0.10
SRMR0.05\leq 0.050.050.060.05 - 0.060.060.080.06 - 0.08>0.10> 0.10
AVE0.70\geq 0.700.600.690.60 - 0.690.500.590.50 - 0.59<0.50< 0.50
CR0.90\geq 0.900.800.890.80 - 0.890.700.790.70 - 0.79<0.70< 0.70

💡 Best practice: A model should satisfy at least CFI 0.95\geq 0.95, RMSEA 0.08\leq 0.08, and SRMR 0.08\leq 0.08 simultaneously before being considered adequately fitting. Meeting only one criterion is insufficient.


11. Model Modification and Respecification

11.1 When is Modification Justified?

Model modification involves changing the original model specification when fit is inadequate. This is justified only when:

  1. The modification is guided by substantive theory, not purely by statistical indices.
  2. The modification is theoretically defensible and can be explained.
  3. The modified model is cross-validated in an independent sample (or at minimum, the exploratory nature of the modification is clearly acknowledged).

⚠️ Data-driven model modification without theoretical justification is a form of post-hoc model fitting that capitalises on chance. Results of extensively modified models should be treated as exploratory and replicated in new data.

11.2 Modification Indices (MI)

A modification index for a fixed (constrained) parameter represents the expected decrease in the model chi-squared if that parameter were freed (with Δdf=1\Delta df = 1):

MIijΔχ2zij2\text{MI}_{ij} \approx \Delta\chi^2 \approx z_{ij}^2

Where zijz_{ij} is the expected standardised estimate if the parameter were freed.

The Expected Parameter Change (EPC) accompanies each MI and estimates the magnitude and direction of the change if the parameter were freed:

EPCijMIijzij\text{EPC}_{ij} \approx \frac{\text{MI}_{ij}}{z_{ij}}

The Standardised EPC (SEPC) expresses the change in standardised units, facilitating comparison across parameters.

11.3 Types of Modifications

Freeing a fixed loading (cross-loading): Adding a loading that was previously fixed to zero — i.e., allowing a variable to load on an additional factor. Justifiable only if the variable theoretically reflects that additional factor.

Freeing an error covariance: Allowing two indicator errors to correlate. Most commonly justified when:

Removing a poorly fitting indicator: If an indicator has:

Then removing it and re-running the model may be justified, especially if the item is theoretically weak or ambiguous.

11.4 The Model Modification Decision Tree

Start: Run specified CFA model | v Is overall fit acceptable? (CFI ≥ 0.95, RMSEA ≤ 0.08, SRMR ≤ 0.08) | Yes | No | | | v | Examine modification indices | | | v | Is there a MI > 10? | | | Yes → Is the modification theoretically justifiable? | | | Yes → Free the parameter → Re-run model → Check fit again | | | No → Do NOT free the parameter | | | v | Is there a poorly fitting indicator (low loading, high MI)? | | | Yes → Is removal theoretically defensible? → Remove → Re-run | | | No → Accept imperfect fit (report as limitation) v Accept model (document all modifications transparently)

11.5 Reporting Model Modifications

All model modifications must be reported transparently, including:


12. Interpreting CFA Results

12.1 The Unstandardised Solution

The unstandardised (raw) solution reports parameter estimates in the original metric of the observed variables. This solution is:

Unstandardised factor loading λ^j\hat{\lambda}_j: The expected change in XjX_j for a one-unit increase in the latent factor FkF_k, holding other factors constant (similar to a regression coefficient).

Standard error SE(λ^j)SE(\hat{\lambda}_j): Estimated standard deviation of λ^j\hat{\lambda}_j across hypothetical repeated samples.

z-statistic (Wald test):

zj=λ^jSE(λ^j)z_j = \frac{\hat{\lambda}_j}{SE(\hat{\lambda}_j)}

Under H0:λj=0H_0: \lambda_j = 0, zjz_j follows N(0,1)\mathcal{N}(0, 1) asymptotically.

p-value:

pj=2×(1Φ(zj))p_j = 2 \times (1 - \Phi(|z_j|))

Confidence interval for λj\lambda_j:

λ^j±zα/2SE(λ^j)\hat{\lambda}_j \pm z_{\alpha/2} \cdot SE(\hat{\lambda}_j)

⚠️ The marker variable (reference indicator) has its loading fixed to 1 — no z-test or confidence interval is reported for this parameter.

12.2 The Standardised Solution

The standardised solution scales all variables (both observed and latent) to have unit variance. This makes loadings interpretable as correlations between the indicator and the factor, and facilitates comparisons across indicators and factors.

Standardised loading formula:

λ^j=λ^jϕ^kkσ^jj\hat{\lambda}_j^* = \hat{\lambda}_j \cdot \sqrt{\frac{\hat{\phi}_{kk}}{\hat{\sigma}_{jj}}}

Where ϕ^kk\hat{\phi}_{kk} is the factor variance and σ^jj\hat{\sigma}_{jj} is the observed variance of XjX_j.

Interpretation of standardised loadings:

| λ^j|\hat{\lambda}_j^*| | Interpretation | | :-------------------- | :------------- | | 0.70\geq 0.70 | Strong indicator — excellent | | 0.550.690.55 - 0.69 | Good indicator | | 0.450.540.45 - 0.54 | Adequate indicator | | 0.300.440.30 - 0.44 | Weak indicator — consider replacing | | <0.30< 0.30 | Poor indicator — consider removing |

12.3 The R2R^2 (Item Reliability) Values

For each indicator, the R2R^2 is the squared standardised loading — the proportion of the indicator's variance explained by the latent factor:

Rj2=(λ^j)2R^2_j = (\hat{\lambda}_j^*)^2

This is the reliability of the item as a measure of the factor:

Rj2R^2_jInterpretation
0.50\geq 0.50Item is reliable — factor explains majority of variance
0.250.490.25 - 0.49Moderate reliability
<0.25< 0.25Item has high unique variance — consider revision or removal

12.4 Factor Correlations

The factor correlation matrix (standardised Φ\boldsymbol{\Phi}) shows how strongly the latent factors are associated. For a two-factor model:

r12=ϕ^12ϕ^11ϕ^22r_{12} = \frac{\hat{\phi}_{12}}{\sqrt{\hat{\phi}_{11}\hat{\phi}_{22}}}

12.5 Reading the Full CFA Results Table

A complete CFA results table reports the following for each indicator:

IndicatorFactorλ^\hat{\lambda} (Unstd)SEzpλ^\hat{\lambda}^* (Std)R2R^2
X1X_1F1F_11.000 (fixed)0.780.61
X2X_2F1F_10.8520.07112.00<0.001<0.0010.740.55
X3X_3F1F_10.9410.07911.91<0.001<0.0010.810.66
X4X_4F2F_21.000 (fixed)0.720.52
X5X_5F2F_21.1030.09112.12<0.001<0.0010.790.62
X6X_6F2F_20.9870.08511.61<0.001<0.0010.750.56

12.6 Residual Correlations (Standardised Residuals)

The standardised residuals are the residual correlations divided by their standard errors:

zjj=rjjr^jjSE(r^jj)z_{jj'} = \frac{r_{jj'} - \hat{r}_{jj'}}{SE(\hat{r}_{jj'})}

Large standardised residuals (zjj>1.96|z_{jj'}| > 1.96) indicate that the model under- or over-predicts the relationship between variables jj and jj'. These are diagnostic of model misfit for specific variable pairs and can guide targeted modifications.


13. Measurement Invariance Testing

Measurement invariance (also called measurement equivalence) testing examines whether the CFA model holds equally across different groups (e.g., males vs. females, different countries, different time points). Without invariance, comparing latent factor scores or means across groups is not meaningful.

13.1 Why Invariance Matters

If a scale measuring "Depression" has different factor loadings for men and women, then comparing depression scores between genders is not comparing the same construct — the scale itself functions differently. Invariance testing ensures that comparisons are fair and meaningful.

13.2 The Hierarchy of Invariance Models

Invariance testing proceeds through a sequence of increasingly constrained models:

Level 1 — Configural Invariance (Baseline Model)

The same factor structure (same pattern of free and fixed loadings) holds in all groups, but all parameters are estimated freely within each group:

Hconfig:Λg=Λ,same pattern across groupsH_{\text{config}}: \boldsymbol{\Lambda}_g = \boldsymbol{\Lambda}, \quad \text{same pattern across groups}

This tests whether the same factors exist in each group. If configural invariance fails, no further testing is meaningful.

Level 2 — Metric Invariance (Weak Invariance)

Factor loadings are constrained to be equal across groups:

Hmetric:Λ1=Λ2==ΛGH_{\text{metric}}: \boldsymbol{\Lambda}_1 = \boldsymbol{\Lambda}_2 = \dots = \boldsymbol{\Lambda}_G

Metric invariance is required for comparing factor covariances and correlations across groups. If loadings differ across groups, the constructs are not measured on the same scale.

Test: Δχmetric vs. config2\Delta\chi^2_{\text{metric vs. config}} with Δdf=(m1)(G1)p/m\Delta df = (m-1)(G-1)p/m (approximately).

Level 3 — Scalar Invariance (Strong Invariance)

Factor loadings and indicator intercepts are constrained to be equal across groups:

Hscalar:Λ1=Λ2,τ1=τ2H_{\text{scalar}}: \boldsymbol{\Lambda}_1 = \boldsymbol{\Lambda}_2, \quad \boldsymbol{\tau}_1 = \boldsymbol{\tau}_2

Where τ\boldsymbol{\tau} is the vector of item intercepts. Scalar invariance is required for comparing latent factor means across groups.

Test: Δχscalar vs. metric2\Delta\chi^2_{\text{scalar vs. metric}} with Δdf=p(G1)\Delta df = p(G-1) (approximately).

Level 4 — Strict Invariance

Factor loadings, intercepts, and error variances are constrained to be equal across groups:

Hstrict:Λ1=Λ2,τ1=τ2,Θϵ,1=Θϵ,2H_{\text{strict}}: \boldsymbol{\Lambda}_1 = \boldsymbol{\Lambda}_2, \quad \boldsymbol{\tau}_1 = \boldsymbol{\tau}_2, \quad \boldsymbol{\Theta}_{\epsilon,1} = \boldsymbol{\Theta}_{\epsilon,2}

Strict invariance is rarely required in practice but is necessary for comparing observed (manifest) variable means across groups.

13.3 Evaluating Invariance

For each step, compare fit between the constrained and unconstrained model:

TestΔχ2\Delta\chi^2 Significant?ΔCFI\Delta\text{CFI}Interpretation
Config → MetricNo>0.010> -0.010Metric invariance holds
Config → MetricYes0.010\leq -0.010Metric non-invariance — investigate
Metric → ScalarNo>0.010> -0.010Scalar invariance holds
Metric → ScalarYes0.010\leq -0.010Scalar non-invariance — investigate

💡 Because Δχ2\Delta\chi^2 is sensitive to sample size, the ΔCFI0.010\Delta\text{CFI} \leq -0.010 criterion (Cheung & Rensvold, 2002) is increasingly preferred as a more robust indicator of meaningful invariance violations.

13.4 Partial Invariance

If full metric or scalar invariance fails, it is possible to test for partial invariance — freeing specific loadings or intercepts that are non-invariant while constraining the rest. Partial scalar invariance still allows latent mean comparisons if at least 2 intercepts per factor are invariant, though conclusions should be made with caution and caveats.


14. Worked Examples

Example 1: Single-Factor CFA — Unidimensionality of a Depression Scale

A researcher hypothesises that five items from a depression questionnaire measure a single unidimensional construct. Items are rated 1–5 (Never to Always).

Items:

Sample: n=350n = 350. Estimator: MLR.

Model Specification:

Λ=(1λ21λ31λ41λ51)\boldsymbol{\Lambda} = \begin{pmatrix} 1 \\ \lambda_{21} \\ \lambda_{31} \\ \lambda_{41} \\ \lambda_{51} \end{pmatrix}

Free parameters: q=4q = 4 (loadings) + 55 (error variances) + 11 (factor variance) = 1010.

df=5(6)210=1510=5df = \frac{5(6)}{2} - 10 = 15 - 10 = 5

Results:

Fit Statistics:

IndexValueInterpretation
χ2(5)\chi^2(5)9.21p=0.101p = 0.101 — Non-significant
χ2/df\chi^2/df1.84Excellent
CFI0.987Excellent
TLI0.974Excellent
RMSEA0.049Close fit (90% CI: 0.000, 0.091)
SRMR0.031Good

Parameter Estimates:

Itemλ^\hat{\lambda} (Unstd)SEzpλ^\hat{\lambda}^* (Std)R2R^2
D11.000 (fixed)0.760.58
D21.0820.09411.51<0.001<0.0010.820.67
D30.9580.08810.89<0.001<0.0010.730.53
D41.1430.09811.66<0.001<0.0010.870.76
D50.8310.08310.01<0.001<0.0010.630.40

Reliability:

Conclusion: The single-factor model fits well across all indices. All standardised loadings are 0.63\geq 0.63, and the factor explains between 40% and 76% of each item's variance. The five depression items form a reliable unidimensional scale. D5 (difficulty making decisions) has the weakest loading — it may reflect a broader cognitive dimension but is still acceptable.


Example 2: Two-Factor Correlated CFA — Physical and Psychological Well-Being

A researcher proposes that a 8-item well-being scale measures two correlated latent factors: Physical Well-Being (PWB) and Psychological Well-Being (PSYWB).

Items:

ItemProposed Factor
PW1: I have high energy levels.PWB
PW2: I rarely feel physically ill.PWB
PW3: I sleep well at night.PWB
PW4: I feel physically strong.PWB
PS1: I feel happy most of the time.PSYWB
PS2: I feel satisfied with my life.PSYWB
PS3: I feel my life has purpose.PSYWB
PS4: I feel positive about my future.PSYWB

Sample: n=480n = 480. Estimator: MLR.

Model Specification:

Λ=(10λ210λ310λ410010λ620λ720λ82)\boldsymbol{\Lambda} = \begin{pmatrix} 1 & 0 \\ \lambda_{21} & 0 \\ \lambda_{31} & 0 \\ \lambda_{41} & 0 \\ 0 & 1 \\ 0 & \lambda_{62} \\ 0 & \lambda_{72} \\ 0 & \lambda_{82} \end{pmatrix}, \quad Φ=(ϕ11ϕ12ϕ12ϕ22)\boldsymbol{\Phi} = \begin{pmatrix} \phi_{11} & \phi_{12} \\ \phi_{12} & \phi_{22} \end{pmatrix}

Free parameters: q=6q = 6 (loadings) + 88 (error variances) + 22 (factor variances) + 11 (factor covariance) = 1717.

df=8(9)217=3617=19df = \frac{8(9)}{2} - 17 = 36 - 17 = 19

Fit Statistics:

IndexValueInterpretation
χ2(19)\chi^2(19)28.41p=0.075p = 0.075 — Non-significant
χ2/df\chi^2/df1.50Excellent
CFI0.983Excellent
TLI0.976Excellent
RMSEA0.033Close fit (90% CI: 0.000, 0.056)
SRMR0.038Good

Standardised Parameter Estimates:

ItemFactorλ^\hat{\lambda}^*R2R^2
PW1PWB0.790.62
PW2PWB0.720.52
PW3PWB0.680.46
PW4PWB0.810.66
PS1PSYWB0.830.69
PS2PSYWB0.880.77
PS3PSYWB0.750.56
PS4PSYWB0.800.64

Factor Correlation:

rPWB, PSYWB=0.54r_{\text{PWB, PSYWB}} = 0.54 (p<0.001p < 0.001)

The two factors are moderately correlated (r=0.54r = 0.54), confirming they are related but distinct constructs. Using oblique factor specification (correlated factors) was therefore appropriate.

Reliability and Validity:

FactorCRAVE
PWB0.850.57
PSYWB0.890.67

Discriminant Validity (Fornell-Larcker):

rPWB, PSYWB2=0.542=0.29r^2_{\text{PWB, PSYWB}} = 0.54^2 = 0.29

Discriminant validity is supported — each factor shares more variance with its own indicators than with the other factor.

Conclusion: The two-factor CFA model fits the data well. Both PWB and PSYWB are reliable and valid latent factors with strong indicator loadings. The moderate inter-factor correlation confirms that physical and psychological well-being are related but distinct aspects of overall well-being.


Example 3: Testing an Alternative Model and Chi-Squared Difference Test

Using the same data as Example 2, suppose a reviewer suggests that all 8 items measure a single general Well-Being factor. We can formally test this using a Δχ2\Delta\chi^2 test.

Model A: Two-factor correlated model (from Example 2)

Model B: Single-factor model (all 8 items → 1 factor)

Chi-Squared Difference Test:

Δχ2=98.7128.41=70.30\Delta\chi^2 = 98.71 - 28.41 = 70.30

Δdf=2019=1\Delta df = 20 - 19 = 1

p<0.001p < 0.001

The Δχ2(1)=70.30\Delta\chi^2(1) = 70.30 is highly significant. The two-factor model fits significantly better than the single-factor model. The hypothesis of a single general well-being factor is rejected in favour of the two-factor structure.


15. Common Mistakes and How to Avoid Them

Mistake 1: Specifying the CFA Model Based on EFA from the Same Sample

Problem: Running EFA on a dataset to discover the factor structure, then running CFA on the same dataset to "confirm" it is circular — the model will fit well simply because it was built from that data. This inflates apparent model fit and provides no genuine confirmation.
Solution: Use independent samples for EFA (development sample) and CFA (validation sample). If only one sample is available, randomly split it in half and use each half for one analysis.

Mistake 2: Relying Solely on the Chi-Squared Test

Problem: The chi-squared test is excessively sensitive to sample size. With n>500n > 500, almost any model is rejected; with n<100n < 100, even poorly fitting models are not rejected.
Solution: Always report a battery of fit indices — at minimum: χ2/df\chi^2/df, CFI, RMSEA, and SRMR. Make model acceptance decisions based on convergent evidence across multiple indices.

Mistake 3: Over-Modifying the Model Based on Modification Indices Alone

Problem: Systematically freeing parameters with the largest modification indices without theoretical justification is a form of capitalising on chance. The resulting model is essentially an exploratory model in disguise, and fit is spuriously improved.
Solution: Only free parameters that have both large MIs AND theoretical justification. Every modification should be explainable by a substantive argument, not just a statistical one. Clearly report all modifications and treat the modified model as exploratory.

Mistake 4: Ignoring Non-Convergence or Inadmissible Solutions

Problem: Treating estimation outputs as valid when the algorithm has not converged or has produced Heywood cases (negative error variances or correlations >1> 1).
Solution: Always check for convergence warnings. If a Heywood case occurs, investigate the model specification — the problem is usually too few indicators per factor, near-perfect correlations between factors, or too many factors. Do not report or interpret inadmissible solutions.

Mistake 5: Comparing Non-Nested Models Using Δχ2\Delta\chi^2

Problem: Using the chi-squared difference test to compare models that are not nested (one is not a restricted version of the other). The Δχ2\Delta\chi^2 test is only valid for nested models.
Solution: Use AIC or BIC to compare non-nested models. Use Δχ2\Delta\chi^2 only for nested model comparisons.

Mistake 6: Forgetting to Set the Scale of the Latent Factor

Problem: Failing to impose a metric constraint (either fixing one loading to 1 or fixing the factor variance to 1) results in an under-identified model that cannot be estimated.
Solution: Always apply one of the two scaling approaches for each latent factor. The DataStatPro application applies the marker variable constraint automatically by default.

Mistake 7: Using Only 2 Indicators Per Factor

Problem: A factor with exactly 2 indicators is just-identified when the factor variance is fixed — no degrees of freedom are available to test the model, and the factor score estimate is unreliable.
Solution: Use at least 3 indicators per factor, ideally 4 or more. Three indicators is the minimum for an over-identified single-factor model.

Mistake 8: Ignoring Measurement Invariance When Comparing Groups

Problem: Comparing latent factor means or covariances across groups (e.g., men vs. women) without testing whether the measurement model is invariant across those groups.
Solution: Always conduct a formal measurement invariance analysis before making cross-group comparisons. At minimum, metric invariance must hold for comparing factor covariances; scalar invariance must hold for comparing factor means.

Mistake 9: Treating Standardised and Unstandardised Solutions Interchangeably

Problem: Reporting unstandardised loadings as if they were standardised (or vice versa), leading to incorrect interpretations (e.g., interpreting a raw loading of 2.5 as a "very strong correlation," which is impossible for a standardised loading).
Solution: Always clearly label which solution is being reported. For interpretation of loading strength, use the standardised solution. For formal hypothesis testing, use the unstandardised solution.

Mistake 10: Ignoring Composite Reliability and AVE

Problem: Reporting only factor loadings and fit indices without assessing whether the factors are reliably measured and distinguish from each other (convergent and discriminant validity).
Solution: Always compute and report CR, AVE, and the Fornell-Larcker discriminant validity criterion as part of a comprehensive CFA report.


16. Troubleshooting

ProblemLikely CauseSolution
Model fails to convergeToo many factors; small sample; poor starting values; Heywood caseReduce factors; increase nn; simplify model; check for near-perfect correlations
Negative error variance (Heywood case)Over-factoring; only 2 indicators per factor; near-perfect item correlationsReduce number of factors; add indicators; fix error variance to small positive value (e.g., 0.005) as last resort
Factor correlation 1.0\geq 1.0Factors are empirically indistinguishable; too few indicatorsMerge factors; add discriminating indicators; re-examine theory
Very poor fit (CFI <0.90< 0.90)Misspecified model; wrong number of factors; omitted cross-loadingsExamine MIs and residuals; reconsider factor structure; check theory
CFI good but RMSEA poorModel has many dfdf (large pp); complex model with minor misfitExamine specific residuals; inspect MIs; consider parsimony
RMSEA good but SRMR poorLoadings are well-specified but specific covariances are misfitExamine large residual correlations; check for omitted cross-loadings or error covariances
All MIs are very smallModel is well-fitting (no major misspecifications) — ORCheck if the model is just-identified (no dfdf left to flag misfit)
Non-significant loadingsWeak indicator; insufficient sample; wrong factor assignmentRemove or replace weak indicators; increase nn; re-examine theory
Very high factor correlations (r>0.85r > 0.85)Factors may not be distinct constructsTest discriminant validity rigorously; consider bifactor or single-factor model
Chi-squared significant but CFI/RMSEA acceptableLarge sample size inflating χ2\chi^2Rely on approximate fit indices; report all indices transparently
Invariance test fails (metric)Loading magnitudes differ across groupsIdentify and free non-invariant loadings; test partial metric invariance
Invariance test fails (scalar)Item intercepts differ across groupsIdentify and free non-invariant intercepts; test partial scalar invariance
Estimation method error for ordinal dataUsing ML with ordered categorical dataSwitch to WLSMV; use polychoric correlations as input

17. Quick Reference Cheat Sheet

Core Equations

FormulaDescription
X=ΛF+ϵ\mathbf{X} = \boldsymbol{\Lambda}\mathbf{F} + \boldsymbol{\epsilon}CFA measurement model
Σ(θ)=ΛΦΛT+Θϵ\boldsymbol{\Sigma}(\boldsymbol{\theta}) = \boldsymbol{\Lambda}\boldsymbol{\Phi}\boldsymbol{\Lambda}^T + \boldsymbol{\Theta}_\epsilonModel-implied covariance matrix
$F_{ML} = \ln\boldsymbol{\Sigma}(\boldsymbol{\theta})
χmodel2=(n1)F^ML\chi^2_{\text{model}} = (n-1)\hat{F}_{ML}Model chi-squared
df=p(p+1)2qdf = \frac{p(p+1)}{2} - qDegrees of freedom
Rj2=(λ^j)2R^2_j = (\hat{\lambda}_j^*)^2Item reliability (communality)
CFI=1max(χM2dfM,0)max(χN2dfN,0)\text{CFI} = 1 - \frac{\max(\chi^2_M - df_M, 0)}{\max(\chi^2_N - df_N, 0)}Comparative Fit Index
RMSEA=max(χ2dfdf(n1),0)\text{RMSEA} = \sqrt{\max\left(\frac{\chi^2 - df}{df(n-1)}, 0\right)}Root Mean Square Error of Approximation
SRMR=2jj(sjjσ^jjsjjsjj)2p(p+1)\text{SRMR} = \sqrt{\frac{2\sum_{j \leq j'}\left(\frac{s_{jj'} - \hat{\sigma}_{jj'}}{\sqrt{s_{jj}s_{j'j'}}}\right)^2}{p(p+1)}}Standardised Root Mean Square Residual
CRk=(λ^j)2(λ^j)2+θ^j\text{CR}_k = \frac{(\sum \hat{\lambda}_j)^2}{(\sum \hat{\lambda}_j)^2 + \sum \hat{\theta}_j}Composite Reliability
AVEk=λ^j2λ^j2+θ^j\text{AVE}_k = \frac{\sum \hat{\lambda}_j^2}{\sum \hat{\lambda}_j^2 + \sum \hat{\theta}_j}Average Variance Extracted
Δχ2=χrestricted2χfree2\Delta\chi^2 = \chi^2_{\text{restricted}} - \chi^2_{\text{free}}Chi-Squared Difference Test

Model Identification Quick Guide

ConditiondfdfConsequence
Under-identified<0< 0Cannot be estimated
Just-identified=0= 0Unique solution; no fit test
Over-identified>0> 0Estimable and testable — required

Fit Index Benchmarks

IndexExcellentGoodAcceptablePoor
χ2\chi^2 pp-value>0.05> 0.05<0.05< 0.05
χ2/df\chi^2/df2.0\leq 2.02.03.02.0 - 3.03.05.03.0 - 5.0>5.0> 5.0
CFI0.97\geq 0.970.950.960.95 - 0.960.900.940.90 - 0.94<0.90< 0.90
TLI0.97\geq 0.970.950.960.95 - 0.960.900.940.90 - 0.94<0.90< 0.90
RMSEA0.05\leq 0.050.050.060.05 - 0.060.060.080.06 - 0.08>0.10> 0.10
SRMR0.05\leq 0.050.050.060.05 - 0.060.060.080.06 - 0.08>0.10> 0.10
AVE0.70\geq 0.700.600.690.60 - 0.690.500.590.50 - 0.59<0.50< 0.50
CR0.90\geq 0.900.800.890.80 - 0.890.700.790.70 - 0.79<0.70< 0.70

Invariance Testing Hierarchy

LevelConstrained ParametersRequired For
ConfiguralNone (same pattern only)Any group comparison
MetricLoadings (Λ\boldsymbol{\Lambda})Comparing factor covariances
ScalarLoadings + Intercepts (τ\boldsymbol{\tau})Comparing factor means
StrictLoadings + Intercepts + Errors (Θϵ\boldsymbol{\Theta}_\epsilon)Comparing observed means

Invariance Decision Rule

ComparisonΔχ2\Delta\chi^2ΔCFI\Delta\text{CFI}Decision
Config → MetricNon-sig>0.010> -0.010Metric invariance ✅
Config → MetricSig0.010\leq -0.010Metric non-invariance ❌
Metric → ScalarNon-sig>0.010> -0.010Scalar invariance ✅
Metric → ScalarSig0.010\leq -0.010Scalar non-invariance ❌

Estimator Selection Guide

Data TypeNormalityRecommended Estimator
ContinuousApproximately normalML
ContinuousNon-normal (skew/kurtosis)MLR
Ordinal (5+ categories)Approximately normalML or MLR
Ordinal (<< 5 categories)AnyWLSMV
BinaryAnyWLSMV

Minimum Requirements for a Valid CFA

RequirementMinimumRecommended
Indicators per factor34–5
Sample sizen=100n = 100n200n \geq 200
Standardised loading0.30\geq 0.300.50\geq 0.50
AVE0.50\geq 0.500.60\geq 0.60
CR0.70\geq 0.700.80\geq 0.80
Model dfdf1\geq 15\geq 5

This tutorial provides a comprehensive foundation for understanding, specifying, estimating, evaluating, and interpreting Confirmatory Factor Analysis using the DataStatPro application. For further reading, consult Brown's "Confirmatory Factor Analysis for Applied Research" (2015), Kline's "Principles and Practice of Structural Equation Modeling" (4th ed., 2016), or Hair et al.'s "Multivariate Data Analysis" (8th ed., 2019). For feature requests or support, contact the DataStatPro team.