Как построить кривую выживания, сгенерированную с помощьюregreg (пакетная выживаемость R)? - PullRequest
26 голосов
/ 05 февраля 2012

Я пытаюсь подобрать и построить модель Вейбулла для данных о выживании. Данные имеют только одну ковариату, когорту, которая работает с 2006 по 2010 год. Итак, есть ли идеи о том, что добавить к двум следующим строкам кода, чтобы построить кривую выживания когорты 2010 года?

library(survival)
s <- Surv(subSetCdm$dur,subSetCdm$event)
sWei <- survreg(s ~ cohort,dist='weibull',data=subSetCdm)

Выполнить то же самое с моделью Кокса PH довольно просто, со следующими линиями. Проблема в том, что Surfit () не принимает объекты типа Surreg.

sCox <- coxph(s ~ cohort,data=subSetCdm)
cohort <- factor(c(2010),levels=2006:2010)
sfCox <- survfit(sCox,newdata=data.frame(cohort))
plot(sfCox,col='green')

Используя легкое данных (из пакета на выживание), вот что я пытаюсь сделать.

#create a Surv object
s <- with(lung,Surv(time,status))

#plot kaplan-meier estimate, per sex
fKM <- survfit(s ~ sex,data=lung)
plot(fKM)

#plot Cox PH survival curves, per sex
sCox <- coxph(s ~ as.factor(sex),data=lung)
lines(survfit(sCox,newdata=data.frame(sex=1)),col='green')
lines(survfit(sCox,newdata=data.frame(sex=2)),col='green')

#plot weibull survival curves, per sex, DOES NOT RUN
sWei <- survreg(s ~ as.factor(sex),dist='weibull',data=lung)
lines(survfit(sWei,newdata=data.frame(sex=1)),col='red')
lines(survfit(sWei,newdata=data.frame(sex=2)),col='red')

Ответы [ 3 ]

22 голосов
/ 07 февраля 2012

Надеюсь, это поможет, и я не допустил какой-то вводящей в заблуждение ошибки:

скопировано сверху:

    #create a Surv object
    s <- with(lung,Surv(time,status))

    #plot kaplan-meier estimate, per sex
    fKM <- survfit(s ~ sex,data=lung)
    plot(fKM)

    #plot Cox PH survival curves, per sex
    sCox <- coxph(s ~ as.factor(sex),data=lung)
    lines(survfit(sCox,newdata=data.frame(sex=1)),col='green')
    lines(survfit(sCox,newdata=data.frame(sex=2)),col='green')

для Weibull, используйте предикат, повторите комментарий Винсента:

    #plot weibull survival curves, per sex,
    sWei <- survreg(s ~ as.factor(sex),dist='weibull',data=lung)

    lines(predict(sWei, newdata=list(sex=1),type="quantile",p=seq(.01,.99,by=.01)),seq(.99,.01,by=-.01),col="red")
    lines(predict(sWei, newdata=list(sex=2),type="quantile",p=seq(.01,.99,by=.01)),seq(.99,.01,by=-.01),col="red")

plot output

Хитрость здесь была в том, чтобы поменять квантильные порядки для построения графиков и прогнозирования.Вероятно, есть лучший способ сделать это, но он работает здесь.Удачи!

15 голосов
/ 14 марта 2014

Альтернативным вариантом является использование пакета flexsurv. Это предлагает некоторые дополнительные функции по сравнению с пакетом survival, включая то, что функция параметрической регрессии flexsurvreg() имеет хороший метод построения графика, который выполняет то, что вы просите.

Использование легких, как указано выше;

#create a Surv object
s <- with(lung,Surv(time,status))

require(flexsurv)
sWei  <- flexsurvreg(s ~ as.factor(sex),dist='weibull',data=lung)
sLno  <- flexsurvreg(s ~ as.factor(sex),dist='lnorm',data=lung)   

plot(sWei)
lines(sLno, col="blue")

output from plot.flexsurvreg

Вы можете построить график на шкале совокупной опасности или опасности, используя аргумент type, и добавить доверительные интервалы с аргументом ci.

7 голосов
/ 13 мая 2015

Это просто примечание, разъясняющее ответ Тима Риффа , в котором используется следующий код:

lines(predict(sWei, newdata=list(sex=1),type="quantile",p=seq(.01,.99,by=.01)),seq(.99,.01,by=-.01),col="red")
lines(predict(sWei, newdata=list(sex=2),type="quantile",p=seq(.01,.99,by=.01)),seq(.99,.01,by=-.01),col="red")

Причина двух последовательностей зеркального отображения: seq(.01,.99,by=.01) и seq(.99,.01,by=-.01), потому что метод предиката () дает квантили для распределения событий f (t), то есть значений обратного CDF для f (t), в то время как кривая выживания строит график 1- (CDF для f) по сравнению с t,Другими словами, если вы построите график p в сравнении с прогнозом (p), вы получите CDF, а если вы построите график 1-p в сравнении с прогнозом (p), вы получите кривую выживания, которая равна 1-CDF.Следующий код более прозрачен и обобщает произвольные векторы значений p:

pct <- seq(.01,.99,by=.01)
lines(predict(sWei, newdata=list(sex=1),type="quantile",p=pct),1-pct,col="red")
lines(predict(sWei, newdata=list(sex=2),type="quantile",p=pct),1-pct,col="red")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...