使用tidymodels运行多元回归模型

6

最近我一直在使用tidymodels运行模型,并选择最符合某个目标函数的参数。例如,使用虚拟回归对mtcars数据进行分析(以这个问题底部答案中的回归示例为例)。

library(tidymodels)
library(tidyverse)

#some regression model
cars_recipe <- recipe(mpg ~ disp + drat, data = mtcars)

wf <- workflow() %>%
  add_recipe(cars_recipe)

(与这篇博客文章中的语法大致相似,仅用于比较;为了在本例中保持清晰,我不会执行诸如分离测试/训练等多个步骤)

然后,我可以运行多个模型并获取这些模型的指标(在这种情况下,是一些弹性网络的各种惩罚值)

#run over a parameter space and find metrics as an objective
mtcars_bootstrap <- bootstraps(mtcars)

tune_spec <- linear_reg(penalty = tune(), mixture = 1) %>%
  set_engine("glmnet")

lambda_grid <- grid_regular(penalty(), levels = 50)

lasso_grid <- tune_grid(
  wf %>% add_model(tune_spec),
  resamples = mtcars_bootstrap,
  grid = lambda_grid
)

但是假设我有充分的理由认为存在两个不同的模型,可能最能捕捉汽车油耗等因素的影响,因此我创建了第二个模型作为一种配方。

cars_recipe2 <- recipe(mpg ~ I(disp + drat), data = mtcars)

现在,我也可以使用lapply或purrr函数族将此配方通过上述管道运行,但是,我想知道是否有一种内置方式可以通过tidymodels运行多个配方?尽管这似乎应该是可能的,但我认为这可能会被设计为防止p-hacking。
1个回答

3
我们正在开发一个名为workflowsets的实验性软件包,可以用它来实现这个目标。如果您愿意尝试一下这个新的、仍在开发中的软件包,您可以暂时从GitHub上安装它。
devtools::install_github("tidymodels/workflowsets")

然后你可以像这样设置分析:
library(tidymodels)
library(workflowsets)

mtcars_boot <- bootstraps(mtcars)

rec1 <- recipe(mpg ~ disp + drat, data = mtcars)
rec2 <- recipe(mpg ~ disp + drat, data = mtcars) %>%
  step_log(disp) %>%
  step_normalize(disp, drat)

lasso_spec <- linear_reg(penalty = tune(), mixture = 1) %>%
  set_engine("glmnet")

# put it all together in a "workflow set"
car_models <- 
  workflow_set(
    preproc = list(simple = rec1, preproc = rec2),
    models = list(lasso = lasso_spec),
    cross = TRUE
  )
car_models
#> # A workflow set/tibble: 2 x 4
#>   wflow_id      info             option    result    
#>   <chr>         <list>           <list>    <list>    
#> 1 simple_lasso  <tibble [1 × 4]> <opts[0]> <list [0]>
#> 2 preproc_lasso <tibble [1 × 4]> <opts[0]> <list [0]>

现在您已经设置好了工作流程,可以使用“map”对其进行映射,例如使用tune_grid()以及其他要使用的参数,如重采样和网格。
lambda_grid <- grid_regular(penalty(range = c(-2, 0)), levels = 10)

car_res <- car_models %>%
  workflow_map("tune_grid", resamples = mtcars_boot, 
               grid = lambda_grid, verbose = TRUE)
#> i 1 of 2 tuning:     simple_lasso
#> ✓ 1 of 2 tuning:     simple_lasso (7.7s)
#> i 2 of 2 tuning:     preproc_lasso
#> ✓ 2 of 2 tuning:     preproc_lasso (8.4s)

## some autoplot methods are available
autoplot(car_res)

该文本是由 reprex package(v1.0.0)于2021年2月9日创建的

如果您有高稳定性需求,请等待几个月再使用它,因为它目前仍在进行中。但我们对它能够满足人们的需求感到兴奋!


完美的 - 期待使用它! - Robert Hickman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接