11.3 Summary#
This section summarises the key steps and syntax for specifying, fitting, inspecting, and visualising CFA and SEM models using semopy.
Specifying a Model#
In SEM, models are defined using a string-based syntax that separates the measurement model (relationships between observed and latent variables) from the structural model (relationships between latent variables).
desc = '''# Measurement model
latent_factor1 =~ x1 + x2 + x3
latent_factor2 =~ x4 + x5 + x6
# Structural model
latent_factor2 ~ latent_factor1'''
This example specifies two latent variables, each measured by three observed variables, and a structural regression in which latent_factor1 predicts latent_factor2.
Higher-order Factors#
Latent variables can themselves be indicators of a higher-order latent variable:
desc = '''# First-order measurement model
latent_factor1 =~ x1 + x2 + x3
latent_factor2 =~ x4 + x5 + x6
# Higher-order factor
general_factor =~ latent_factor1 + latent_factor2'''
Variances and Covariances#
Variances and covariances are specified using the ~~ operator:
desc = '''latent_factor1 =~ x1 + x2 + x3
latent_factor2 =~ x4 + x5 + x6
# Allow latent factors to covary
latent_factor1 ~~ latent_factor2
'''
Covariances can be fixed to zero to impose independence assumptions:
latent_factor1 ~~ 0*latent_factor2
Overview of Operators#
=~associates observed variables with latent factors (and latent factors with higher-order factors)~specifies regression relationships~~specifies variances and covariances
Fitting a Model#
model = semopy.Model(desc)
model_fit = model.fit(data)
Extracting Model Estimates#
estimates = model.inspect(std_est=True)
print(estimates)
Extracting Fit Measures#
stats = semopy.calc_stats(model)
print(stats.T)
Visualising the Model#
semopy.semplot(model, plot_covs=True, std_ests=True, filename='data/plot.pdf')
Key Takeaways
CFA focuses on the measurement model; SEM extends CFA by adding directional relationships between latent variables.
SEM models consist of a measurement model and a structural model.
Individual parameter estimates and overall model fit address different questions and must be interpreted jointly.
Standardised estimates aid interpretation, while unstandardised estimates are required for statistical inference.