2012-02-05 11 views
23

Estoy tratando de ajustar y trazar un modelo de Weibull a los datos de supervivencia. Los datos tienen solo una covariable, cohorte, que va de 2006 a 2010. Entonces, ¿alguna idea sobre qué agregar a las dos líneas de código que siguen para trazar la curva de supervivencia de la cohorte de 2010?Cómo trazar la curva de supervivencia generada por survreg (supervivencia del paquete de R)?

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

Lo mismo con el modelo Cox PH es bastante sencillo, con las siguientes líneas. El problema es que survfit() no acepta objetos de 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') 

Usando el pulmón de datos (del paquete de supervivencia), esto es lo que estoy tratando de lograr.

#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

que iba a tratar de averiguarlo para ti si has publicado un ejemplo completo. Necesitamos el objeto subSetCdm. try dput (subSetCdm) –

+3

Hay ejemplos en '? predict.survreg'. –

Respuesta

18

Espero que esto ayude y no he hecho algún error engañosa:

copiado desde arriba:

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

de Weibull, el uso de predecir, re el comentario de Vicente:

#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

El truco aquí era revertir las órdenes de cuantiles para trazar versus predecir. Es probable que haya una mejor manera de hacerlo, pero funciona aquí. ¡Buena suerte!

+0

Tim, pregunta rápida. Si desea recrear el subconjunto anterior pero NO por género ... por ejemplo, comience con-- sWei <- survreg (s ~ 1, dist = 'weibull', data = lung).¿Cómo cambiarías tu especificación de la nueva porción de datos de tu función de predicción? Estoy tratando de asimilar cómo lo especificó en lo anterior ... – Chris

+0

Hola Chris, estoy perplejo, lo siento, pero quizás uno de los otros contestadores lo sepa. Si no, entonces tal vez una nueva pregunta. –

13

Una opción alternativa es hacer uso del paquete flexsurv. Esto ofrece alguna funcionalidad adicional sobre el paquete survival, incluyendo que la función de regresión paramétrica flexsurvreg() tiene un buen método de trazado que hace lo que usted pregunta.

Usando pulmón como arriba;

#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

Puede representar en la escala de peligro o riesgo acumulado con el argumento type, y añadir intervalos de confianza con el argumento ci.

6

Esto es sólo una nota aclaratoria Tim Riffe's answer, que utiliza el siguiente código: método

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 razón de las dos secuencias de imagen especular, seq(.01,.99,by=.01) y seq(.99,.01,by=-.01), es porque el predicen() está dando cuantiles para la distribución de eventos f (t), es decir, los valores de CDF inverso de f (t), mientras que una curva de supervivencia está trazando 1- (CDF de f) frente a t. En otras palabras, si trazas p versus predicción (p), obtendrás el CDF, y si trazas 1-p versus predicción (p) obtendrás la curva de supervivencia, que es 1-CDF. El siguiente código es más transparente y se generaliza a vectores arbitrarios de los valores de 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") 
Cuestiones relacionadas