Soss - Examples/tutorials

I am moving a graduate course I teach on statistics from frequentist to Bayesian and from Python to Julia. I mostly work with Python in my day job and have only implemented some basic Bayesian models with PyMC3.

I was looking into Turing since it’s the most similar to PyMC3 but Soss features caught my eye, mainly that you can construct a model without reference to the sampling algorithm or target variables which you perform inference with/on in that model. This separation of model, data, and algorithm seem like a very good idea pedagogically.

There doesn’t seem to be much documentation or examples of Soss. Am I missing something? If the full extent of the documentation is this then maybe I could help out by building some examples and contributing to documentation.

  • I’m pretty new to both Bayesian stats and Julia so how viable would this be?
  • What are the main channels of communication to contribute to Soss?

@cscherrer will be able to advise!


Thanks for the heads-up @nilshg!

Hi @franco, it’s great to hear you’re interested in Soss! Yes, the biggest challenge we’ve had is that there was only a brief period when I was able to work on Soss full-time. There have been lots of other contributors, but of course they all have other things going on as well. I’d really appreciate any docs you can add, and I’d be happy to help with any snags you hit along the way.

Some general things about Soss:

  • The “models as functions” approach is very powerful
  • Code generation has a huge potential potential for speed, but we’re not there yet. Currently we’re mostly focusing on expressiveness and making it easy to use.
  • Generally I think it’s a great choice pedagogically, but
  • Error messages are currently not great, and sometimes just awful (also a codegen thing) OTOH
  • It’s always easy to ask Soss for the generated code/ Running this “by hand” usually helps expose any problem
  • So far we’ve focused on DynamicHMC (because it fits Stan-like models and was ready to go at the time)
  • We need to connect more inference methods. In principle this shouldn’t be too hard
  • Our current push is on SossMLJ, which will let us easily use a Soss model in the MLJ framework. @dilumaluthge is helping a lot with this and knows the guts of MLJ better than I do. I feel like we’re getting close to having this working well.

As far as communication channels, there’s