TuringGLM makes easy to specify Bayesian Generalized Linear Models using the formula syntax and returns an instantiated Turing model.
Heavily inspired by brms (uses RStan or CmdStanR) and bambi (uses PyMC3).
@formula
The @formula
macro is extended from StatsModels.jl
along with MixedModels.jl
for the random-effects (a.k.a. group-level predictors).
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)
TuringGLM supports any Tables.jl
-compatible data interface.
The most popular ones are DataFrame
s and NamedTuple
s.
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 regressionStudent()
: robust linear regressionLogistic()
: logistic regressionPois()
: Poisson count data regressionNegBin()
: negative binomial robust count data regression