r语言 - ' Augment() ' '的' coxph() '输出在一个tidymodels工作流?



我正试图找到一种有效的方法来创建一个包含原始数据、系数估计、模型拟合和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),以及四个列表列data,fit,glancetidy。我想添加一个列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返回一个错误:

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()的更多信息,请查看此处。

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包(v2.0.1)创建于2021-08-14

最新更新