如何使用R tidymodels workflow拟合无截距项的模型?
tidymodels拟合无截距项模型的正确实现方法
tidymodels的add_formula()方法默认不支持在公式内直接添加+0/0+/-1这类移除截距的语法,属于框架的预设规则,需要通过框架提供的专用参数或预处理步骤实现,以下是两种常用的可行方案:
方案1:通过模型接口的intercept参数直接设置(最简便)
parsnip包封装的回归模型统一提供了intercept参数,直接设置为FALSE即可移除截距,无需修改公式:
library(tidymodels) workflow() %>% add_model(linear_reg(intercept = FALSE) %>% set_engine("lm")) %>% add_formula(mpg ~ cyl + wt) %>% fit(mtcars)
方案2:通过recipe预处理步骤移除截距
如果需要在数据预处理流程中统一控制截距项,可以用step_intercept()指定移除:
library(tidymodels) # 构建预处理配方 no_intercept_rec <- recipe(mpg ~ cyl + wt, data = mtcars) %>% step_intercept(remove = TRUE) # 拟合模型 workflow() %>% add_model(linear_reg() %>% set_engine("lm")) %>% add_recipe(no_intercept_rec) %>% fit(mtcars)
两种方案输出的系数结果和直接运行lm(mpg ~ 0 + cyl + wt, data = mtcars)的结果完全一致。
内容的提问来源于stack exchange,提问作者David Rubinger
相关产品推荐
相关产品推荐

