在tidymodels工作流中如何对coxph()模型输出执行Augment()操作?
问题解答
原因说明
这不是语法错误,是broom包针对不同模型类的augment方法设计差异导致的:
lm类的拟合对象默认会存储训练用的数据集副本,因此augment.lm可以自动提取数据计算观测级拟合指标,无需额外传参coxph类的拟合对象出于内存占用优化的考虑,不会存储原始训练数据,因此调用augment.coxph时必须显式传入data或newdata参数指定用于计算拟合值的数据集。
解决方案
不需要修改原有逻辑,只需要将仅遍历fit列的map改为同时遍历fit和对应分组训练集data的map2,显式给augment传入数据参数即可。
完整可运行代码
# 需提前加载依赖包:survival、tidyverse、broom ex_model <- lung %>% nest(data = -sex) %>% mutate( fit = map(data, ~ coxph(Surv(time, status) ~ age + wt.loss + meal.cal, data = .)), glance = map(fit, glance), tidy = map(fit, tidy), # 同时传入模型对象和对应分组数据集 augment = map2(fit, data, ~ augment(x = .x, data = .y)) ) %>% glimpse()
运行后生成的augment列会存储每个分组下所有观测的原始数据+对应cox模型拟合指标,和你用lm得到的输出结构一致。
内容的提问来源于stack exchange,提问作者Rob Lytle
相关产品推荐
相关产品推荐

