I am excited to announce TuringGLM.jl!
It uses the well-known @formula macro from JuliaStats ecosystem (StatsModels.jl, GLM.jl and MixedModels.jl) to specify a Bayesian model and returns a ready to be sampled/run Turing.jl model.
It is still a proof-of-concept package and many functionalities are still in the roadmap.
It is also heavily inspired by python’s bambino (PyMC) and R’s brms (Stan).
@formula
The syntax is done by using the @formula macro and then specifying the dependent variable followed by a tilde ~ then the independent variables separated by a plus sign + .
Example:
@formula(y ~ x1 + x2 + x3)
Moderations/interactions can be specified with the asterisk sign * , e.g. x1 * x2 . This will be expanded to x1 + x2 + x1:x2 , which, following the principle of hierarchy, the main effects must also be added along with the interaction effects. Here x1:x2 means that the values of x1 will be multiplied (interacted) with the values of x2 .
Random-effects (a.k.a. group-level effects) can be specified with the (term | group) inside the @formula , where term is the independent variable and group is the categorical representation (i.e., either a column of String s or a CategoricalArray in data ). You can specify a random-intercept with (1 | group) .
Example:
@formula(y ~ (1 | group) + x1)
Data
TuringGLM supports any Tables.jl -compatible data interface. The most popular ones are DataFrame s and NamedTuple s.
Supported Models
TuringGLM supports non-hiearchical and hierarchical models. For hierarchical models, only single random-intercept hierarchical models are supported.
For likelihoods, TuringGLM.jl supports:
-
Gaussian()(the default if not specified): linear regression -
Student(): robust linear regression -
Logistic(): logistic regression -
Pois(): Poisson count data regression -
NegBin(): negative binomial robust count data regression
Tutorials
We have several tutorials in the documentation at Home · TuringGLM.jl.
Acknowledgements
I would like to thank the whole TuringGLM.jl dev team, specially @yebai for the support and trust. Also, @rikh was fundamental in the whole development and I probably could not have done without him. Thanks!