modelbased
modelbased is a lightweight package helping with model-based
estimations, used in the computation of marginal means, contrast
analysis and model predictions.
Installation
Run the following to install the stable release of modelbased from CRAN:
install.packages("modelbased")Or this one to install the latest development version:
install.packages("remotes")
remotes::install_github("easystats/modelbased")Documentation
Click on the buttons above to access the package documentation and the easystats blog, and check-out these vignettes:
- Visualisation matrix
- Marginal means
- Contrast analysis
- Use a model to make predictions
- Describe non-linear curves
Features
The package is built around 5 main functions:
estimate_means(): Estimates the average values at each factor levelsestimate_contrasts(): Estimates and tests contrasts between different factor levelsestimate_slopes(): Estimates the slopes of numeric predictors at different factor levelsestimate_response(): Predict the response variable using the modelestimate_smooth(): Describes a non-linear term (e.g. in GAMs) by its linear parts
These functions are powered by the
visualisation_matrix()
function, a smart tool for guessing the appropriate reference grid.
The package currently only supports rstanarm models, but will be
expanded to cover a large variety of frequentist and Bayesian models.
Examples
Create smart grids to represent complex interactions
Check-out this vignette to create this plot:
Estimate marginal means
Check-out this vignette to create this plot:
library(rstanarm)
model <- stan_glm(Sepal.Width ~ Species, data = iris)
estimate_means(model)## Species | Mean | 95% CI
## --------------------------------
## setosa | 3.43 | [3.34, 3.52]
## versicolor | 2.77 | [2.68, 2.86]
## virginica | 2.98 | [2.88, 3.07]Contrast analysis
Check-out this vignette to create this plot:
estimate_contrasts(model)
## Level1 | Level2 | Difference | 95% CI | pd | % in ROPE | Std_Difference
## -------------------------------------------------------------------------------------------
## setosa | versicolor | 0.66 | [ 0.53, 0.79] | 100% | 0% | 1.51
## setosa | virginica | 0.45 | [ 0.31, 0.57] | 100% | 0% | 1.04
## versicolor | virginica | -0.21 | [-0.33, -0.07] | 99.83% | 6.53% | -0.47Check the contrasts at different points of another linear predictor
model <- stan_glm(Sepal.Width ~ Species * Petal.Length, data = iris)
estimate_contrasts(model, modulate = "Petal.Length", length = 3)## Level1 | Level2 | Petal.Length | Difference | 95% CI | pd | % in ROPE | Std_Difference
## ---------------------------------------------------------------------------------------------------------
## setosa | versicolor | 1.00 | 1.68 | [ 1.05, 2.29] | 100% | 0% | 3.85
## setosa | virginica | 1.00 | 1.34 | [ 0.63, 2.08] | 99.98% | 0.05% | 3.08
## versicolor | virginica | 1.00 | -0.33 | [-1.25, 0.62] | 76.02% | 13.23% | -0.75
## setosa | versicolor | 3.95 | 1.61 | [ 0.67, 2.56] | 99.95% | 0.12% | 3.70
## setosa | virginica | 3.95 | 1.66 | [ 0.64, 2.63] | 99.92% | 0.12% | 3.82
## versicolor | virginica | 3.95 | 0.05 | [-0.24, 0.34] | 64.03% | 48.77% | 0.13
## setosa | versicolor | 6.90 | 1.51 | [-0.45, 3.65] | 92.27% | 2.38% | 3.47
## setosa | virginica | 6.90 | 1.97 | [-0.05, 4.06] | 96.95% | 1.60% | 4.53
## versicolor | virginica | 6.90 | 0.44 | [-0.10, 0.99] | 94.38% | 7.83% | 1.02Find a predictor’s slopes at each factor level
estimate_slopes(model)
## Species | Median | 95% CI | pd | % in ROPE | Std. Median
## ----------------------------------------------------------------------
## setosa | 0.34 | [-0.03, 0.71] | 95.58% | 10.30% | 1.37
## versicolor | 0.36 | [ 0.17, 0.54] | 99.98% | 0.27% | 1.46
## virginica | 0.23 | [ 0.08, 0.38] | 99.85% | 5.42% | 0.93Generate predictions from your model to compare it with original data
Check-out this vignette to create this plot:
estimate_response(model)| Sepal.Length | Species | Predicted | CI_low | CI_high |
|---|---|---|---|---|
| 5.1 | setosa | 1.48 | 1.01 | 2.07 |
| 4.9 | setosa | 1.45 | 0.93 | 1.98 |
| 4.7 | setosa | 1.41 | 0.88 | 1.89 |
| 4.6 | setosa | 1.41 | 0.83 | 1.92 |
| 5.0 | setosa | 1.46 | 0.96 | 1.98 |
| 5.4 | setosa | 1.52 | 1.01 | 2.04 |
Estimate the link between the response and a predictor
See this vignette to create this plot:
model <- stan_glm(Sepal.Width ~ poly(Petal.Length, 2), data=iris)
estimate_link(model)| Petal.Length | Predicted | CI_low | CI_high |
|---|---|---|---|
| 1.00 | 3.62 | 3.49 | 3.76 |
| 1.98 | 3.18 | 3.10 | 3.26 |
| 2.97 | 2.89 | 2.80 | 2.99 |
| 3.95 | 2.78 | 2.68 | 2.86 |
| 4.93 | 2.83 | 2.76 | 2.90 |
| 5.92 | 3.05 | 2.94 | 3.17 |
| 6.90 | 3.44 | 3.20 | 3.68 |
Describe the smooth term by its linear parts
estimate_smooth(model)
## Part | Start | End | Size | Trend | Linearity
## ----------------------------------------------------
## 1 | 1.00 | 4.11 | 53.00% | -8.07e-03 | 0.94
## 2 | 4.11 | 6.90 | 47.00% | 6.89e-03 | 0.93