R语言recipe中step_interact报错求助:需保留交互项
解决R中recipe::step_interact交互项报错问题
错误原因
- 变量名变更:执行
step_dummy(all_nominal())后,原分类变量sex会被转换为哑变量(例如sex_male,具体名称取决于因子水平),原变量名sex已从数据集中移除,导致step_interact中引用sex无法找到对应变量。 - 参数规范问题:
step_interact需要通过terms参数明确指定交互项公式,且必须匹配预处理后的变量名。
修正方案
方案1:使用选择器自动匹配哑变量
通过starts_with("sex")选择器匹配所有sex开头的哑变量,无需手动指定具体哑变量名称,适用性更强:
recipe1 <- recipe(survived~pclass+sex+age+sib_sp+parch+fare,data=training) %>% step_impute_linear(age) %>% step_dummy(all_nominal()) %>% step_interact(terms = ~ starts_with("sex"):fare + age:fare) log1 <- logistic_reg() %>% set_engine("glm") %>% set_mode("classification") workflow1 <- workflow() %>% add_model(log1) %>% add_recipe(recipe1) fit1 <- fit(workflow1,data=training)
方案2:手动指定哑变量名称
先查看预处理后的变量名,再直接引用哑变量构建交互项:
- 先执行预处理查看变量名:
temp_recipe <- recipe(survived~pclass+sex+age+sib_sp+parch+fare,data=training) %>% step_impute_linear(age) %>% step_dummy(all_nominal()) %>% prep(training) # 输出处理后的所有变量名 bake(temp_recipe, training) %>% colnames()
- 根据输出的哑变量名称(例如
sex_male)修改step_interact:
recipe1 <- recipe(survived~pclass+sex+age+sib_sp+parch+fare,data=training) %>% step_impute_linear(age) %>% step_dummy(all_nominal()) %>% step_interact(terms = ~ sex_male:fare + age:fare) log1 <- logistic_reg() %>% set_engine("glm") %>% set_mode("classification") workflow1 <- workflow() %>% add_model(log1) %>% add_recipe(recipe1) fit1 <- fit(workflow1,data=training)
内容的提问来源于stack exchange,提问作者Ovr
相关产品推荐
相关产品推荐

