--- title: "Tidymodels with {equatiomatic}" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Tidymodels with {equatiomatic}} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include=FALSE} library(equatiomatic) library(recipes) library(parsnip) knitr::opts_chunk$set(collapse = TRUE, comment = "#>") ``` To paraphrase its web site, [Tidymodels](https://www.tidymodels.org) provides a series of packages for modeling and machine learning using the [tidyverse](https://www.tidyverse.org) principles. {equatiomatic} is now partly compatible with it, meaning that it can extract the equation of certain models. Here is an example (adapted from the {workflows} main page): ```{r cars} # Preparation of the dataset using {recipes} spline_cars <- recipe(mpg ~ ., data = mtcars) |> step_ns(disp, deg_free = 10) spline_cars_prepped <- prep(spline_cars, mtcars) ``` Here is a simple (tidy)model: ```{r lm} # Fitting of a least-square linear model lm_fit <- linear_reg() |> fit(mpg ~ ., data = juice(spline_cars_prepped)) ``` We can extract the equation of this model with `extract_eq()`: ```{r lm_equation} extract_eq(lm_fit, wrap = TRUE) ``` ## Working with workflows The {equatiomatic} `extract_eq()` also works with models fitted using the {workflows} package. ```{r wflow} library(workflows) # A model compatible with {equatiomatic} linear_lm <- linear_reg() # A workflow object car_wflow <- workflow() |> add_recipe(spline_cars) |> add_model(linear_lm) ``` Now you can prepare the recipe and estimate the model via a single call to `fit()`: ```{r wflow_fit} wflow_fit <- fit(car_wflow, data = mtcars) ``` You can also extract the equation from `wflow_fit`: ```{r wflow_equation} extract_eq(wflow_fit, wrap = TRUE) ``` You notice that the original name of the dependent variable is lost, but you can reset it manually using `swapt_var_names=`: ```{r wflow_equation2} extract_eq(wflow_fit, wrap = TRUE, swap_var_names = c(..y = "mpg")) ``` ## Models requiring {broom.mixed} For some models, {broom} is not enough. You need also to `library(broom.mixed)` before you can extract the equation. This is the case of a Bayes linear model using `"stan"`. Note: this code is not run in the vignette to avoid heavy extra-dependencies, but you can run this code in your R process. ```{r bayes_fit, eval=FALSE} library(broom.mixed) # Required for some models, or extract_eq() will choke! bayes_fit <- linear_reg() |> set_engine("stan") |> fit(mpg ~ hp + drat, data = mtcars) ``` And the equation would be obtained with: ```{r bayes_equation, eval=FALSE} extract_eq(bayes_fit) ``` ```{r bayes_equation2, echo=FALSE} equation("E( \\operatorname{mpg} ) = \\alpha + \\beta_{1}(\\operatorname{hp}) + \\beta_{2}(\\operatorname{drat})") ```