2012-02-05 7 views
23

Sto cercando di adattare e tracciare un modello Weibull su un dato di sopravvivenza. I dati hanno solo una covariata, coorte, che va dal 2006 al 2010. Quindi, qualche idea su cosa aggiungere alle due linee di codice che seguono per tracciare la curva di sopravvivenza della coorte del 2010?Come tracciare la curva di sopravvivenza generata da survreg (sopravvivenza del pacchetto di R)?

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

Realizzare lo stesso con il modello Cox PH è piuttosto semplice, con le seguenti linee. Il problema è che survfit() non accetta oggetti di tipo survreg.

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

Utilizzando il polmone di dati (dal pacchetto di sopravvivenza), ecco quello che sto cercando di realizzare.

#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') 
+2

Vorrei provare a capirlo per te se hai pubblicato un esempio completo. Abbiamo bisogno dell'oggetto subSetCdm. prova dput (subSetCdm) –

+3

Esistono degli esempi in '? predicict.survreg'. –

risposta

18

Spero che questo aiuti e non ho fatto qualche errore fuorviante:

copiato da sopra:

#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') 

per Weibull, uso prevedere, re il commento di Vincent:

#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

Il trucco qui stava invertendo gli ordini quantili per il plottaggio rispetto alla previsione. C'è probabilmente un modo migliore per farlo, ma funziona qui. In bocca al lupo!

+0

Tim, domanda veloce. Se si desidera ricreare il sotto ma NON il sottoinsieme per genere ... per esempio iniziare con-- sWei <- survreg (s ~ 1, dist = 'weibull', data = lung).Come cambieresti le tue specifiche della parte nuova della tua funzione di previsione? Sto cercando di ingannare come hai specificato quello sopra ... – Chris

+0

Ciao Chris, sono perplesso, mi dispiace, ma forse uno degli altri rispondenti lo sa. Se no, allora forse una nuova domanda. –

13

Un'opzione alternativa è quella di utilizzare il pacchetto flexsurv. Questo offre alcune funzionalità aggiuntive rispetto al pacchetto survival - incluso il fatto che la funzione di regressione parametrica flexsurvreg() ha un buon metodo di stampa che fa quello che chiedi.

Uso del polmone come sopra;

#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

È possibile tracciare sul pericolo o rischio di scala cumulativa utilizzando l'argomento type, e aggiungere intervalli di confidenza con l'argomento ci.

6

Questo è solo una nota chiarire Tim Riffe's answer, che utilizza il codice seguente:

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") 

La ragione per le due sequenze speculari, seq(.01,.99,by=.01) e seq(.99,.01,by=-.01), è perché la prevedono() metodo sta dando quantili per la distribuzione di eventi f (t) - cioè i valori dell'inverso CDF di f (t) - mentre una curva di sopravvivenza sta tracciando 1- (CDF di f) contro t. In altre parole, se tracci p contro predire (p), otterrai il CDF, e se trama 1-p contro predire (p) otterrai la curva di sopravvivenza, che è 1-CDF. Il seguente codice è più trasparente e generalizza a vettori arbitrari di valori 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")