123456789101112131415161718192021222324252627282930313233 |
- #' Create a KM plot
- #'
- #' @param x a data frame that contains followup and censored columns
- #' @param var a categorical variable to split the data to sub-curves
- #' @param comment An additional piece of text to write in the curve
- #'
- #' @return p probability that curves split by var differ significantly
- #'
- #' @export
- kaplan.meier<-function(x,var,comment=''){
- #x should have followup and censored columns
- surv.obj<-survival::Surv(x$followup,x$censored)
- m=base::max(x$followup)
- f<-stats::as.formula(paste('surv.obj',var,sep='~'))
- s1<-survival::survfit(f,data=x)
- #str(s1)
- tit=base::sprintf('Kaplan-Meier plot by %s',var)
- cols=base::c('red','blue')
- labels=base::c(base::sprintf('%s=true',var),base::sprintf('%s=false',var))
- #plot(s1,mark.time=TRUE,col=c('red','blue'),pch=labels,main=tit)
- graphics::plot(s1,mark.time=TRUE,col=c('red','blue'),main=tit)
- s=survival::survdiff(f,data=x)
- #str(s)
- p=stats::pchisq(s$chisq, length(s$n)-1, lower.tail = FALSE)
- sv=base::sprintf("p=%.3f",p)
- nLab=base::sprintf('N=%d',nrow(x))
- graphics::text(x=c(0.9*m,0.3*m,0.9*m),y=c(0.2,0.1,0.3),label=c(sv,comment,nLab),cex=1.2)
- lLab <- base::gsub("x=","",base::names(s1$strata)) ## legend labels
- graphics::legend("top",legend=lLab,col=cols,lty=c(1,1),horiz=FALSE, bty='n')
- p
- }
|