2012-02-05 159 views
23

我在试图拟合威布尔模型并绘制生存数据。数据只有一个协变量,队列,从2006年到2010年。因此,有什么想法可以添加到以下两行代码中,以绘制2010年队列的生存曲线?如何绘制survreg生成的生存曲线(R的包存活)?

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

与Cox PH模型完成相同的操作相当简单,有以下几行。问题是,survfit()不接受类型为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') 

使用数据肺(来自生存包),这是我想要完成的。

#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

如果你发布了一个完整的例子,我会试着弄清楚它的出处。我们需要subSetCdm对象。尝试dput(subSetCdm) – 2012-02-05 18:45:44

+3

'?predict.survreg'中有一些示例。 – 2012-02-05 23:46:09

回答

18

希望这有助于我还没有做出一些误导性的错误:从文森特

#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, 
    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

这里的诀窍是扭转绘图与预测的分位数顺序。有可能有更好的方法来做到这一点,但它在这里工作。祝你好运!

+0

蒂姆,快速的问题。如果你想重新创建上述而不是性别......例如从 - sWei < - survreg(s〜1,dist ='weibull',data = lung)开始。你将如何改变你的预测函数的新数据部分的规范?我正在努力克服你如何在上面说明...... – Chris 2016-10-06 18:02:08

+0

嗨克里斯,我很难过,对不起,但也许其他答复者知道。如果不是,那么也许是一个新问题。 – 2016-10-09 21:12:55

13

另一种选择是利用包装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参数添加置信区间。

6

这仅仅是一个音符澄清Tim Riffe's answer,它使用以下代码:

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) - 即f(t)的逆CDF的值 - 而生存曲线绘制1-(f的CDF)与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")