为什么使用交互效应时Tidymodels Recipe无法正常工作?
解决tidymodels Recipe中交互效应的报错问题
错误原因
tidymodels的recipe()函数对公式语法有严格限制:公式仅用来指定原始变量的基础关联(比如用+分隔预测变量),像*这种自动生成主效应+交互项的语法会被判定为「内联函数操作」,违反了recipe的设计逻辑——所有特征工程操作(包括创建交互项)都必须通过专门的step_*()系列函数来定义,而不是直接写在公式里。
解决方案
要创建交互项,需先在recipe()公式中列出所有主效应变量,再通过step_interact()函数明确生成交互项,示例代码如下:
library(tidyverse) library(ISLR) data("Auto") library(tidymodels) auto_data <- initial_split(Auto, strata = origin) auto_train <- training(auto_data) auto_test <- testing(auto_data) # 正确创建含交互项的recipe recipe <- recipe(mpg ~ horsepower + origin, data = auto_train) %>% step_interact(terms = ~ horsepower:origin)
其中horsepower:origin表示两个变量的交互项,如果你需要的是horsepower * origin等价的「主效应+交互项」,上面的写法就完全对应(公式里的+已经包含主效应,step_interact添加交互项)。
为什么无交互项的公式不报错
mpg ~ horsepower + origin只是单纯指定了预测变量和响应变量的关联,没有任何特征变换操作,完全符合recipe()对公式的要求,因此不会触发错误。
内容的提问来源于stack exchange,提问作者ryanasaurus
相关产品推荐
相关产品推荐

