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