Hi!
I run into the "fit()
must be used with GAM models (due to its use of formulas)." error when trying to fit a GAM inside a workflow set.
I have seen this post in the community that explains that we need to add "formula = gam_formula" inside the 'add_model()' function when defining a workflow. Error in `fit_xy()` with GAM model
However, I am not sure where I could do this when defining a workflow inside a workflow set.
Here's a reprex, slightly modified from the original post:
library(tidyverse, quietly = TRUE)
library(dplyr, quietly = TRUE)
library(sf, quietly = TRUE)
library(tidymodels, quietly = TRUE)
library(EnvStats, quietly = TRUE)
dep_var <- "y"
treat_var <- "xt"
ID_vars <- c("sampleID", "replicateID")
quant_indep <- c("X1", "X2", "X3")
qual_indep <- c("N1", "N2")
all_indep_vars <- c(ID_vars, quant_indep, qual_indep)
create artificial dataset
txt <- c("A", "B", "C")
samp_ids <- c("sample1", "sample2")
repl_ids <- c("rep1", "rep2", "rep3", "rep4", "rep5")modl_df <- data.frame(y = EnvStats::rnormTrunc(250, mean = 0, sd = 0.7, min = -1.5, max = 1.5),
sampleID = array(sample(samp_ids), 250),
replicateID = array(sample(repl_ids),250),
xt = rnorm(250, mean = 0, sd = 1),
x = matrix(sample(runif(5000, min = -0.5, max = 1.5), 750), 250, 3),
c = matrix(sample(txt, 500, replace = TRUE), 250, 2))
modl_df <- modl_df %>% dplyr::rename(X1 = x.1, X2 = x.2, X3 = x.3, N1 = c.1, N2 = c.2)my_split <- initial_split(modl_df)
train <- training(my_split)
test <- testing(my_split)my_resamples <- vfold_cv(train, v = 3)
Workflow for GAM modeling
gam_formula <- as.formula("y ~ xt + sampleID + replicateID + X1 + X2 + X3 + N1 + N2")
gam_recipe <- recipe(formula = gam_formula, data= train)
gam_model <- gen_additive_mod(select_features = TRUE, engine = "mgcv") %>%
set_engine("mgcv") %>%
set_mode("regression")gam_wkflo <- workflow() %>%
#add_model(gam_model) %>%
add_model(gam_model, formula = gam_formula) %>%
add_recipe(gam_recipe)response_gam <- gam_wkflo %>% parsnip::fit(data = modl_df)
all_workflows <-
workflow_set(
preproc = list("recipe" = gam_recipe),
models = list(my_gam_spec = gam_model)
)all_workflows <- all_workflows %>%
workflow_map(resamples = my_resamples, grid = 4, verbose = TRUE)
i No tuning parameters. fit_resamples()
will be attempted
i 1 of 1 resampling: recipe_my_gam_spec
→ A | error: fit()
must be used with GAM models (due to its use of formulas).
There were issues with some computations A: x3
1 of 1 resampling: recipe_my_gam_spec failed with
Warning messages:
1: All models failed. Run show_notes(.Last.tune.result)
for more information.
2: Unknown or uninitialised column: .notes
.