parameters: a powerful and lightweight alternative to broom to describe your models' coefficients

Okay, “an alternative to broom” might be a bit of an overstatement (at least for now…)

But the parameters package, finally on CRAN, already has some cool features!

parameters

We have recently decided to collaborate around the easystats project, a set of packages designed to make your life easier. This project encompasses several packages, devoted for instance to model internal access, Bayesian analysis, as well as indices of model performance and quality.

parameters' primary goal is to provide utilities for processing the parameters of various statistical models. Beyond computing p-values, CIs, Bayesian indices and other measures for a wide variety of models, this package implements features like standardization or bootstrapping of parameters and models, feature reduction (feature extraction and variable selection) as well as conversion between indices of effect size.

The main function of the package is model_parameters(), which allows you to extract the parameters and their characteristics from various models in a consistent way. It can be considered as a lightweight alternative to broom::tidy(), with some notable differences:

  • The names of the returned dataframe are specific to their content. For instance, the column containing the statistic is named following the statistic name, i.e., t, z, etc., instead of a generic name such as statistic.
  • It is able to compute or extract indices not available by default, such as p values, CIs, etc.
  • It includes feature engineering capabilities, including bootstrapping and standardization of parameters.

Examples

ANOVAs

df <- iris
df$Sepal.Big <- ifelse(df$Sepal.Width >= 3, "Yes", "No")

model <- aov(Sepal.Length ~ Sepal.Big, data = df)
model_parameters(model, eta_squared = "partial")
## Parameter | Sum_Squares |  df | Mean_Square |    F |    p | Eta_Sq (partial)
## ----------------------------------------------------------------------------
## Sepal.Big |        1.10 |   1 |        1.10 | 1.61 | > .1 |             0.01
## Residuals |      101.07 | 148 |        0.68 |      |      |

Mixed models

library(lme4)

model <- lmer(Sepal.Width ~ Petal.Length + Petal.Width + (1|Species), data = iris)
model_parameters(model, standardize = "refit")
## Parameter    | Coefficient |   SE |        95% CI |    t |      p | Coefficient (std.)
## --------------------------------------------------------------------------------------
## (Intercept)  |        1.78 | 0.69 | [-1.71, 5.26] | 2.56 |  < .05 |               0.00
## Petal.Length |        0.15 | 0.06 | [-0.14, 0.43] | 2.26 |  < .05 |               0.59
## Petal.Width  |        0.61 | 0.14 | [-0.59, 1.81] | 4.49 | < .001 |               1.07

And you can also directly plot the parameters with the see package!

library(see)

lmer(Sepal.Width ~ Petal.Length * Petal.Width + (1|Species), data = iris) %>% 
  model_parameters() %>% 
  plot()

Bayesian models

library(rstanarm)

model <- stan_glm(mpg ~ wt + cyl, data = mtcars)
model_parameters(model)
## Parameter   | Median |         89% CI |     pd | % in ROPE |  ESS |  Rhat |               Prior
## -----------------------------------------------------------------------------------------------
## (Intercept) |  39.68 | [36.74, 42.35] |   100% |        0% | 4836 | 0.999 | Normal (0 +- 60.27)
## wt          |  -3.19 | [-4.41, -2.03] | 99.98% |     0.05% | 2276 | 1.000 | Normal (0 +- 15.40)
## cyl         |  -1.50 | [-2.21, -0.88] |   100% |     1.75% | 2300 | 1.000 |  Normal (0 +- 8.44)

Get Involved

There is definitely room for improvement, and some new exciting features are already planned. Feel free to let us know how we could further improve this package!

Note that easystats is a new project in active development, looking for contributors and supporters. Thus, do not hesitate to contact us if you want to get involved :)

  • Check out our other blog posts here!