如何使用R tidymodels workflow拟合没有截距的模型?

3
我该如何在这个 tidymodels 工作流中使用模型?
library(tidymodels)
workflow() %>% 
  add_model(linear_reg() %>% set_engine("lm")) %>% 
  add_formula(mpg ~ 0 + cyl + wt) %>% 
  fit(mtcars)
#> Error: `formula` must not contain the intercept removal term: `+ 0` or `0 +`.

似乎您需要找出限制被施加的位置(最好还要知道原因)……绕过它可能会破坏下游的某些东西,如果所有软件包机制都假定截距存在的话... - Ben Bolker
1个回答

2

您可以使用formula参数来覆盖模型的术语,从而向add_model()添加模型。这通常用于生存和贝叶斯模型,因此在执行此操作时要非常小心,因为您正在绕过tidymodels的一些保护措施:

library(tidymodels)
#> Registered S3 method overwritten by 'tune':
#>   method                   from   
#>   required_pkgs.model_spec parsnip

mod <- linear_reg()
rec <- recipe(mpg ~ cyl + wt, data = mtcars)

workflow() %>%
  add_recipe(rec) %>%
  add_model(mod, formula = mpg ~ 0 + cyl + wt) %>%
  fit(mtcars)
#> ══ Workflow [trained] ══════════════════════════════════════════════════════════
#> Preprocessor: Recipe
#> Model: linear_reg()
#> 
#> ── Preprocessor ────────────────────────────────────────────────────────────────
#> 0 Recipe Steps
#> 
#> ── Model ───────────────────────────────────────────────────────────────────────
#> 
#> Call:
#> stats::lm(formula = mpg ~ 0 + cyl + wt, data = data)
#> 
#> Coefficients:
#>   cyl     wt  
#> 2.187  1.174

本文是由 reprex包 (v2.0.1) 创建于2021年9月1日。


1
谢谢!这需要绕过标准工作流程的原因是什么? - David Rubinger
@JuliaSilge,您是否考虑使用step_rm来简化删除配方中截距的界面? - kennyB

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