As you probably know, I’m a big fan of R’s
brms package, available from CRAN. In case you haven’t heard of it,
brms is an R package by Paul-Christian Buerkner that implements Bayesian regression of all types using an extension of R’s formula specification that will be familiar to users of
lmer. Under the hood, it translates the formula into Stan code, Stan translates this to C++, your system’s C++ compiler is used to compile the result and it’s run.
brms is impressive in its own right. But also impressive is how it continues to add capabilities and the breadth of Buerkner’s vision for it. I last posted something way back on version 0.8, when
brms gained the ability to do non-linear regression, but now we’re up to version 1.1, with 1.2 around the corner. What’s been added since 0.8, you may ask? Here are a few highlights:
You can now define functions in Stan, using
stan_funs and can use them in your formula or use them like a native R function (via
expose_functions), which is pretty exciting. A huge addition is
gam-style smoothers, allowing us to implement GAMMs (Generalized Additive Mixture Models), including spatial GAMMs (via MRF smoothers). Interval censoring has been added to the already-existing left and right censoring. You can use
monotonic effects in ordinal regression, and both
cse (category-specific) effects can be used at the individual or group levels. It now supports distributional regression models, allowing modeling of things like the heterogeneity of variances. There are many efficiency improvements, and you can now use IDs to specify that multiple groups share the same group-level effects across formulas. The
von mises family has been added to allow for circular regression. (I’ve had some difficulty making it work, I have to admit.) Last, the graphing gets better and better — it was also updated to work with
ggplot2 version 2.2 — and many of the plots will soon (
brms 1.2) use package
Buerkner’s To Do list includes items like CAR (Conditional Auto Regression) models which are state-of-the-art for spatial regression, mixture models, and errors-in-variables models. Yeah, he doesn’t rest on his laurels.
The flexibility of
brms formulas allows you to create sophisticated models easily. For example, using
cens and the Weibull family allows you to create (AFT) survival models. Add in a random effect and you have a frailty model — no need to learn something dramatically new. If you reach
brms limits, you may be able to dip your toe into Stan and include a Stan function via
stan_funs. If that’s not good enough, you can extract the Stan model, via
stan_model and then modify it and use the
rstan package and go full-fledged Stan. (
brms implements much simpler, more human-like Stan models than
rstanarm, which makes it much more practical to build on a reliable base of code.)
But you will use
brms for a long time before you need to delve into Stan. You can do
lm-style models, you can add a family to do GLMs (including logistic regression, categorical or ordinal logistic regression, Poisson, Lognormal, zero-inflated Negative Binomial, etc), you can add in random effects to create a mixed-effects model, you can add in smoothers to create GAMs, you can add smoothers and random effects to create GAMMs, you can handle censored variables and use the appropriate family (Weibull, etc) to create survival models, and you could take your survival model and add a random effect to get a frailty model. All without doing anything radically different from specifying an
brms on CRAN!
Pingback: mixed effect models | social by selection
Thanks Wayne for this awesome post about what is new! I have just a minor comment: monotonic effects can be applied in all kinds of families (essentially they can be thought of as “ordinal” predictors), whereas category specific effects are the ones that are only meaningful for ordinal families.