Model sorting

In RAM notation, the model implied covariance matrix is computed as

\[\Sigma = F(I-A)^{-1}S(I-A)^{-T}F^T\]

If the model is acyclic, the observed and latent variables can be reordered such that $(I-A)$ is lower triangular. This has the computational benefit that the inversion of lower triangular matrices can be carried out by specialized algorithms.

To automatically reorder your variables in a way that makes this optimization possible, we provide a sort! method that can be applied to ParameterTable objects to sort the observed and latent variables from the most exogenous ones to the most endogenous.

We use it as

sort!(parameter_table)

model = Sem(
    specification = parameter_table,
    ...
)

Models specified from sorted parameter tables will make use of the described optimizations.