绘制简单的Survreg Weibul Survival Fit

时间:2019-03-04 01:39:05

标签: r plot survival-analysis weibull

这是已在How to plot the survival curve generated by survreg (package survival of R)?

回答的问题的一个简单变体
# Create simple Weibull survival fit using library(survival)
  surmo<-survreg( Surv(validtimes, status)~1, dist="weibull")

# Getting Kaplan-Meier
  fKM<-survfit( Surv(validtimes, status)~1)

# Plot Kaplan-Meier
  plot(fKM,xlab="Time,Days",conf.int=TRUE,mark.time=TRUE,ylab="Fraction",main="Kaplan-Meier Plot")

一切正常,没有任何问题。

当我想在数据上覆盖预测的Weibull拟合时出现问题。基于我使用的示例。

 pct <- seq(.01,.99,by=.01)
 maxvalidtimes<-max(validtimes)
# Getting the Weibull lines to overlay
  lines(predict(surmo,newdata=list(1:maxvalidtimes),type="quantile",p=pct),1-pct,col="red")

我收到错误

  

xy.coords(x,y)中的错误:'x'和'y'的长度不同

我认为问题出在以下方面:        newdata = list(1:maxvalidtimes)

我试图删除newdata术语,并将newdata = list(1:99)设置为无效。

我在flexsurv软件包中尝试了同样的事情,并且不费吹灰之力就得到了想要的精确绘图。

 # Using flexsurv package here
  surmof  <- flexsurvreg( Surv(validtimes, status)~1,dist='weibull')
  plot(surmof,mark.time=TRUE,xlab="Time,Days",ylab="Fraction",main="FlexSurv Plot")

1 个答案:

答案 0 :(得分:1)

由于您未提供任何数据,因此我将在?predict.survreg页中使用lung数据集修改最后一个示例。您不需要任何新数据,因为您只需要分位数类型的图,并且需要将向量参数赋予p

lfit <- survreg(Surv(time, status) ~ 1, data=lung)
pct <- 1:98/100   # The 100th percentile of predicted survival is at +infinity
ptime <- predict(lfit,  type='quantile',
                  p=pct, se=TRUE)
 str(ptime)
#------------
List of 2
 $ fit   : num [1:228, 1:98] 12.7 12.7 12.7 12.7 12.7 ...
 $ se.fit: num [1:228, 1:98] 2.89 2.89 2.89 2.89 2.89 ...

所以实际上您有太多的数据点,如果您查看ptime中的228行数据,您会发现每一行都是相同的,因此只需使用第一行。

identical( ptime$fit[1,], ptime$fit[2,])
#[1] TRUE


 str(ptime$fit[1,])
# num [1:98] 12.7 21.6 29.5 36.8 43.8 ...

因此,您对每个分位数都有一个预计的时间,请记住,生存函数仅是分位数函数的1减去,并且y值是给定的优先级,而其时间是形成x值的时间:

 plot(x=ptime$fit[1,], y=1-pct, type="l")

enter image description here