Code Monkey home page Code Monkey logo

structuralequationmodels.jl's Introduction

StructuralEquationModels.jl

Documentation Build Status Citation
Stable Dev Project Status: Active – The project has reached a stable, usable state and is being actively developed. Github Action CI codecov DOI

What is this Package for?

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
  • Regularization
  • Multigroup SEM
  • Sums of arbitrary loss functions (everything the optimizer can handle).

What are the merrits?

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 extensible 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.

At the moment, we are still working on:

  • optimizing performance for big models (with hundreds of parameters)

Questions?

If you have questions you may ask them here in the issues. Please observe our code of conduct.

structuralequationmodels.jl's People

Contributors

aaronpeikert avatar alyst avatar brandmaier avatar dependabot[bot] avatar leoniehagitte avatar maximilian-stefan-ernst avatar nickhaf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

structuralequationmodels.jl's Issues

equality constraints from nocedal + wright?

Yves told me that he uses for lavaan a method from Nocedal & Wright for equality constraints. Maybe we should consider using that too. However, we have to investigate first how this alters performance.

access hessian from optimizer

Make it possible to access the last hessian (approximation) from the optimizer; for example to compute standard errors

Stop-Kriterium

  • zufällig Kovarianzmatrizen generieren vs. Kovarianzmatrizen unter Modell generieren?
  • Hyperparameter?
  • multiples Testen?

the git repo is ridiculously big (>300mb) resulting in long download times

The following code shows the biggest files in the git history. Maybe we can remove some of them (with git filter-branch).

cd StructuralEquationModels.jl/
git rev-list --objects --all |
  git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' |
  sed -n 's/^blob //p' |
  awk '$2 >= 2^20' |
  grep -vF --file=<(git ls-tree -r HEAD | awk '{print $3}') |
  sort --numeric-sort --key=2 |
  cut -c 1-12,41- |
  $(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest

To remove e.g. "bigfile.txt" use:

git filter-branch --prune-empty -d /dev/shm/scratch \
  --index-filter "git rm --cached -f --ignore-unmatch bigfile.txt" \
  --tag-name-filter cat -- --all

se for WLS and FIML

Standard errors for WLS and FIML may not be computed correctly at the moment

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.