Tidymodels与Glmnet:Cox模型交叉验证非一致参数报错解决
解决tidymodels中Cox模型交叉验证的维度不匹配错误
你的代码报错的核心原因是未对分类预测变量(treatment、sex)进行数值编码,glmnet引擎要求输入纯数值矩阵,未编码的字符/因子变量会导致矩阵转换时出现维度不兼容问题。
修改步骤
只需在数据预处理配方中添加分类变量编码逻辑,具体修改如下:
- 更新预处理配方
# DATA PRE-PROCESSING ph_preprocess <- recipe(event_surv ~ ., data = df) %>% step_filter(time > 0) %>% step_select(-time, -event) %>% update_role(patid, new_role = "ID") %>% # 将字符型分类变量转为因子 step_mutate_at(vars(treatment, sex), factor) %>% # 对所有分类预测变量生成哑变量(适配glmnet正则化需求) step_dummy(all_nominal_predictors(), one_hot = FALSE)
- 保持其他代码不变,重新运行
tune_grid()即可正常执行交叉验证。
关键说明
step_mutate_at:确保分类变量以因子类型存在,避免字符型变量在编码时出现异常;step_dummy:将分类变量转换为glmnet可处理的数值哑变量,one_hot=FALSE避免生成冗余列,更适合正则化模型的训练;- 移除了多余的
update_role(event_surv, new_role = "outcome"),因为公式event_surv ~ .已明确指定其为结果变量。
内容的提问来源于stack exchange,提问作者Lukas D. Sauer
相关产品推荐
相关产品推荐

