生存函数 - R 中的插值

Survival function - interpolation in R

我构造了一个生存函数如:

  [![plot(survfit(Surv(inf.time,infection)~1),xlab="Time (days)",ylab="Survival Probability",
                        main="Time Until Staphylococcus Infection",
                        conf.int = F)][1]][1]

现在我想确定 40% 的患者在哪个时间感染了? 如何用 R 编写? 要么作为给我一个数值结果的命令,要么直接绘制到生存函数图中。

我知道生存函数描述了没有感染的概率,因此我可以从图中读出 0.6 的生存概率对应于 ca。 45天?我如何将其绘制到图表中?

我试过了(没有运气):

inf.time[which(survfit(Surv(inf.time,infection)~1) == 0.6)]

我想,您正在使用 survival 包,对吧? 因此,您可以从 "survfit" 对象或轻松地从 "summary.survfit 获取生存曲线所有点的数据框,因为它是 list 类型。 然后你可以通过生存概率过滤 df。 一些例子:

library(survival)

s <- Surv(lung$time, lung$status)

sfit <- survfit(s~1)  #get usual "survfit" object

summary_sfit = summary(sfit)

surv_df = data.frame(summary_sfit[2:6])  #somehow coerce it to data.frame

head(surv_df)

##    time n.risk n.event n.censor      surv
##  1    5    228       1        0 0.9956140
##  2   11    227       3        0 0.9824561


surv_df[max(which(surv_df$surv > 0.60)), ] 
##     time n.risk n.event n.censor      surv
##  68  245    117       1        2 0.6018576

或者您可以只对 survfit$time 进行子集化而不创建数据框

sfit$time[max(which(sfit$surv > 0.6))]

## [1] 245