Функция выживания - интерполяция в 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 соответствует ок. 45 дней? Как я могу изобразить это на графике?

я пробовал (безуспешно):

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

person user1607    schedule 04.06.2018    source источник


Ответы (1)


Я полагаю, вы используете пакет 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
person Ivan Tsarev    schedule 05.06.2018