Skip to content

Releases: StructuralEquationModels/StructuralEquationModels.jl

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 21 Jun 15:43

StructuralEquationModels v0.5.0

Diff since v0.4.2

StructuralEquationModels.jl v0.5.0

This is a large, breaking release centered on a modular redesign of the model/type system to unify single models and collections/multigroup models.

Highlights

  • a Sem is now a weighted sum of loss terms, each SEM loss bundling its own observed + implied parts.
  • New inference methods: CFI, p-values (z-test) and confidence intervals, parallel bootstrap.
  • Multigroup χ²/RMSEA/estimates now match lavaan.
  • Optimization backends (NLopt, Proximal) moved to package extensions.
  • Data simulation, FIML mean structures, and efficient re-fitting via replace_observed.

Breaking changes

  • Type-system & evaluation overhaul.
    • Loss functions are now AbstractLoss/SemLoss; evaluate! is implemented per loss term (no model argument) (#214).
    • SemImplySemImplied (#235).
    • Multigroup/collections handled by the new Sem term structure (#317).
    • Specification and Variables APIs refactored (#203, #207).
  • SemOptimizer API refactor (#299).
  • Optimization backends are now extensions — you must using NLopt / using ProximalAlgorithms to enable engine = :NLopt / :Proximal (#228, #234).
  • Renames: params / param_labels (#253, #257); dfdof (#254).
  • Multigroup fit statistics now use the per-group Wishart/GLS convention: χ² = Σ_g (N_g−1)·F_g (new :nsamples_corrected default weighting; N−G χ² multiplier for ML/WLS; matching RMSEA). Multigroup ML/WLS results now match lavaan wishart/GLS; single-group results are unchanged except ML RMSEA. FIML is unchanged.

New features

  • CFI fit measure (#313).
  • Inference: z-test p-values and normal-theory confidence intervals (#316).
  • Bootstrap standard errors refactored, with optional parallel fitting (#314).
  • replace_observed for collections (#266).

Bug fixes

  • Multigroup fit-measure corrections (#311), RMSEA correction, and the χ² multiplier/weighting fix.

Merged pull requests:

Closed issues:

  • se for WLS and FIML (#57)
  • v0.4.1 (#261)
  • v0.4.2 (#263)
  • sem_fit() was deprecated for fit()? (#267)
  • (in)equality constraints via StenoGraphs specification (#270)
  • Status message for converged models (#273)
  • Error (#274)
  • Numerical precision of model-implied covariance matrix (#276)
  • Simulate data from a model (#282)
  • StenoGraphs has to be loaded manually (#289)

v0.4.2

Choose a tag to compare

@Maximilian-Stefan-Ernst Maximilian-Stefan-Ernst released this 16 Apr 15:09

What's Changed

  • remove deprecated tolerance options from Optim.jl

v0.4.1

Choose a tag to compare

@Maximilian-Stefan-Ernst Maximilian-Stefan-Ernst released this 16 Apr 15:07
c44d8d8

What's Changed

  • Fix some outdated docstrings
  • Remove unused code

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 18 Mar 20:18

StructuralEquationModels v0.4.0

Diff since v0.3.0

Breaking changes

The package now conforms to StatsAPI.jl (or throws an explanatory error message where it doesn't).

Merged pull requests:

Closed issues:

  • rename solution (#159)
  • Add methods for arrows for integers to allow nice meanstructure syntax (#166)
  • v0.3.0 (#212)
  • Rename SemImply to SemImplied (#233)

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 04 Feb 20:34
aa1fcf6

StructuralEquationModels v0.3.0

Diff since v0.2.4

Breaking changes

  • SemSpecification objects are now dispatched on
  • SemOptimizer is not part of the model anymore, but passed to sem_fit
  • NLopt and ProximalAlgorithms backends are now supported via package extensions

Merged pull requests:

Closed issues:

  • Index into type-heterogenous tuples in for loops (#20)
  • local testing only runs unit tests (#140)
  • Update installation instructions in docs (#155)
  • Multigroup SEM constructor (#157)
  • rename sem_summary (#158)
  • Is there a copy(::ParameterTable) method? (#170)
  • v0.2.3 (#177)
  • Variables/Parameters/Observations terminology & API Cleanup (#199)
  • v0.2.4 (#201)
  • New constructor for EnsembleParameterTable (#205)
  • Fixed and Labeled loadings don't show up in the degrees of freedom. (#208)
  • Add option to control the printed columns in sem_summary (#213)
  • start_simple ignores keyword arguments (#216)
  • Write a small wrapper function to sample from model parameters from normally distributed data (#223)
  • Rename swap_observed() to replace_observed() (#232)
  • consistent naming: params (#238)

v0.2.4

Choose a tag to compare

@Maximilian-Stefan-Ernst Maximilian-Stefan-Ernst released this 22 Apr 21:42
f4e104e

Formatting/Refactoring

  • The whole codebase is now formatted to follow a specific JuliaFormatter style.
  • We now have JuliaFormatter running in the tests as well as in each PR.
  • A lot of cosmetic cleanups and simplifications.

Testing

  • Tests now give more specific feedback when failing.

Performance

  • Linear algebra tweaks in objective/gradient/hessian computation.
  • Optimizations in fabin 3 starting value computation.
  • Optimizations in RAM Matrices construction.

What's Changed

Full Changelog: v0.2.3...v0.2.4

v0.2.3

Choose a tag to compare

@github-actions github-actions released this 17 Apr 09:10
8cd36c3

StructuralEquationModels v0.2.3

Diff since v0.2.2

Merged pull requests:

Closed issues:

  • Usage for social research (#154)
  • Update for new version dependencies (#161)
  • v0.2.2 (#163)

v0.2.2

Choose a tag to compare

@github-actions github-actions released this 09 Jan 17:14
51ca4a9

StructuralEquationModels v0.2.2

Diff since v0.2.0

Merged pull requests:

Closed issues:

  • What types of models do not need an imply? (#108)
  • CI fails mysteriously from time to time (#117)
  • Release v0.2.0 (#122)
  • Update installation instructions (#128)
  • export optimizer field access method (#130)
  • TagBot file does not have an extension (#132)
  • update to julia 1.9 (#139)
  • Constant mean parameters do not work (#151)
  • Release v0.2.1 (#153)
  • Update installation instructions in docs (#155)

Major Release 0.2.0

Choose a tag to compare

@Maximilian-Stefan-Ernst Maximilian-Stefan-Ernst released this 14 Jun 11:23
e0ce63c

What's Changed

New Contributors

Full Changelog: v0.1.0...v0.2.0

Initial Release v0.1.0

Choose a tag to compare

@aaronpeikert aaronpeikert released this 24 Jun 08:43

StructuralEquationModels v0.1.0

This is a package for Structural Equation Modeling.
It is still in development.
Models you can fit include

  • Linear SEM that can be specified in RAM (or LISREL) notation
  • ML, GLS and FIML estimation
  • Ridge Regularization
  • Multigroup SEM
  • Sums of arbitrary loss functions (everything the optimizer can handle).

We provide fast objective functions, gradients, and for some cases hessians as well as approximations thereof.
As a user, you can easily define custom loss functions.
For those, you can decide to provide analytical gradients or use finite difference approximation / automatic differentiation.
You can choose to mix and match loss functions natively found in this package and those you provide.
In such cases, you optimize over a sum of different objectives (e.g. ML + Ridge).
This mix and match strategy also applies to gradients, where you may supply analytic gradients or opt for automatic differentiation or mix analytical and automatic differentiation.

You may consider using this package if:

  • you want to extend SEM (e.g. add a new objective function) and need an extendable framework
  • you want to extend SEM, and your implementation needs to be fast (because you want to do a simulation, for example)
  • you want to fit the same model(s) to many datasets (bootstrapping, simulation studies)
  • you are planning a study and would like to do power simulations

The package makes use of

  • Symbolics.jl for symbolically precomputing parts of the objective and gradients to generate fast, specialized functions.
  • SparseArrays.jl to speed up symbolic computations.
  • Optim.jl and NLopt.jl to provide a range of different Optimizers/Linesearches.
  • FiniteDiff.jl and ForwardDiff.jl to provide gradients for user-defined loss functions.

Registration

JuliaRegistries/General#62956

What's Changed

New Contributors

Full Changelog: https://github.com/StructuralEquationModels/StructuralEquationModels.jl/commits/v0.1.0