在 tidymodels 工作流程中`Augment()`ing `coxph()` 输出?

`Augment()`ing `coxph()` output in a tidymodels workflow?

我正在尝试找到一种有效的方法来创建包含原始数据、系数估计、模型拟合和来自 coxph() 生存模型的拟合观测值的数据集。目前,我的代码如下所示:

ex_model <- lung%>% #lung dataset from survival package
    nest(-sex)%>%
    mutate(fit = map(data, ~
                                        coxph(Surv(time, status) ~ age +
                                                        wt.loss +
                                                        meal.cal,
                                                    data = .)),
                glance = map(fit, glance),
                tidy = map(fit, tidy)))%>%
    glimpse()

# output

Columns: 5
# $ sex    <dbl> 1, 2
# $ data   <list> [<tbl_df[138 x 9]>], [<tbl_df[90 x 9]>]
# $ fit    <list> [0.0205745842, 0.0047088643, -0.0001776546, 1.962976e-04, -3.220915e-06, 1.011575e-06, -3.220915e-06, 5.999414e-05, -1.525540e-07, 1.011575e-06, -1.~
# $ glance <list> [<tbl_df[1 x 18]>], [<tbl_df[1 x 18]>]
# $ tidy   <list> [<tbl_df[3 x 5]>], [<tbl_df[3 x 5]>]

这给了我一个数据框,其中有一列用于嵌套变量 (sex),以及四个列表列 datafitglancetidy。我想添加一列 augment,其中包含每个观察值的拟合值,但未能成功将扩充函数映射到 fit

这是一个代码示例,它使用 lm() 而不是 coxph()

生成我想要的输出
ex_model <- lung%>% #lung dataset from survival package
    nest(-sex)%>%
    mutate(fit = map(data, ~
                                        lm(status ~ age +
                                                        wt.loss +
                                                        meal.cal,
                                                    data = .)),
                glance = map(fit, glance),
                tidy = map(fit, tidy),
                augment = map(fit, augment))%>%
    glimpse()

# output
# $ sex     <dbl> 1, 2
# $ data    <list> [<tbl_df[138 x 9]>], [<tbl_df[90 x 9]>]
# $ fit     <list> [1.415301e+00, 7.049341e-03, 6.981800e-04, -7.171368e-05, 0.18272053, 0.25767747, -0.90016296, 0.25907699, 0.15038564, 0.23754238, 0.22724620, 0.32~
# $ glance  <list> [<tbl_df[1 x 12]>], [<tbl_df[1 x 12]>]
# $ tidy    <list> [<tbl_df[4 x 5]>], [<tbl_df[4 x 5]>]
# $ augment <list> [<tbl_df[106 x 11]>], [<tbl_df[65 x 11]>]

当我将 mutate(augment = map(fit, augment))%>% 语法与 coxph() 一起使用时,RStudio returns 出现错误:

Did you want `data = c(inst, time, status, age, ph.ecog, ph.karno, pat.karno, meal.cal, 
    wt.loss)`?Error: Problem with `mutate()` input `augment`.
x Must specify either `data` or `newdata` argument.
i Input `augment` is `map(fit, augment)`.

这是我的语法问题,还是有更根本的原因我不能在这里 augment(fit)?解决此问题的最有效方法是什么?

您要关注的错误是

x Must specify either `data` or `newdata` argument.

此错误来自 augment(),它表示要使用扩充,除了模型之外还必须传入数据。所以你需要做augment(model_fit, newdata = my_new_data)。有关 augment.coxph() 的更多信息,请查看 here.

library(tidyverse)
library(survival)
library(broom)

ex_models <- lung %>%
    nest(data = c(inst, time, status, age, ph.ecog, ph.karno, pat.karno, meal.cal, wt.loss)) %>%
    mutate(fit = map(data, ~ coxph(Surv(time, status) ~ age + wt.loss + meal.cal, data = .)),
           glance = map(fit, glance),
           tidy = map(fit, tidy),
           augment = map(fit, augment, newdata = lung))

glimpse(ex_models)
#> Rows: 2
#> Columns: 6
#> $ sex     <dbl> 1, 2
#> $ data    <list> [<tbl_df[138 x 9]>], [<tbl_df[90 x 9]>]
#> $ fit     <list> [0.0205745842, 0.0047088643, -0.0001776546, 1.962976e-04, -3.2…
#> $ glance  <list> [<tbl_df[1 x 18]>], [<tbl_df[1 x 18]>]
#> $ tidy    <list> [<tbl_df[3 x 5]>], [<tbl_df[3 x 5]>]
#> $ augment <list> [<tbl_df[228 x 12]>], [<tbl_df[228 x 12]>]

reprex package (v2.0.1)

于 2021-08-14 创建