--- title: "jskm" author: "Jinseob Kim" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{jskm} %\VignetteEncoding{UTF-8} %\VignetteEngine{knitr::rmarkdown} editor_options: chunk_output_type: console --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) library(jskm) ``` ## Install ```r install.packages("devtools") library(devtools) install_github("jinseob2kim/jskm") library(jskm) ``` ## Example ### Survival probability ```{r} # Load dataset library(survival) data(colon) fit <- survfit(Surv(time, status) ~ rx, data = colon) # Plot the data jskm(fit) jskm(fit, table = T, pval = T, label.nrisk = "No. at risk", size.label.nrisk = 8, xlabs = "Time(Day)", ylabs = "Survival", ystratalabs = c("Obs", "Lev", "Lev + 5FU"), ystrataname = "rx", marks = F, timeby = 365, xlims = c(0, 3000), ylims = c(0.25, 1), showpercent = T ) ``` ### Cumulative incidence: 1- Survival probability ```{r} jskm(fit, ci = T, cumhaz = T, mark = F, ylab = "Cumulative incidence (%)", surv.scale = "percent", pval = T, pval.size = 6, pval.coord = c(300, 0.7)) ``` ### Landmark analysis ```{r} jskm(fit, mark = F, surv.scale = "percent", pval = T, table = T, cut.landmark = 500, showpercent = T) ``` ### Competing risk analysis `status2` variable: 0 - censoring, 1 - event, 2 - competing risk ```{r} ## Make competing risk variable, Not real colon$status2 <- colon$status colon$status2[1:400] <- 2 colon$status2 <- factor(colon$status2) fit2 <- survfit(Surv(time, status2) ~ rx, data = colon) jskm(fit2, mark = F, surv.scale = "percent", table = T, status.cmprsk = "1") jskm(fit2, mark = F, surv.scale = "percent", table = T, status.cmprsk = "1", showpercent = T, cut.landmark = 500) ``` ### Theme Jama ```{r} jskm(fit, theme = "jama", cumhaz = T, table = T, mark = F, ylab = "Cumulative incidence (%)", surv.scale = "percent", pval = T, pval.size = 6, pval.coord = c(300, 0.7)) ``` ### Theme Nejmoa ```{r} jskm(fit, theme = "nejm", nejm.infigure.ratiow = 0.6, nejm.infigure.ratioh = 0.4, nejm.infigure.ylim = c(0, 0.7), cumhaz = T, table = T, mark = F, ylab = "Cumulative incidence (%)", surv.scale = "percent", pval = T, pval.size = 6, pval.coord = c(300, 0.7)) ``` ### Weighted Kaplan-Meier plot - `svykm.object` in **survey** package ```{r} library(survey) data(pbc, package = "survival") pbc$randomized <- with(pbc, !is.na(trt) & trt > 0) biasmodel <- glm(randomized ~ age * edema, data = pbc) pbc$randprob <- fitted(biasmodel) dpbc <- svydesign(id = ~1, prob = ~randprob, strata = ~edema, data = subset(pbc, randomized)) s1 <- svykm(Surv(time, status > 0) ~ 1, design = dpbc) s2 <- svykm(Surv(time, status > 0) ~ sex, design = dpbc) svyjskm(s1) svyjskm(s2) svyjskm(s2, cumhaz = T, ylab = "Cumulative incidence(%)", surv.scale = "percent", showpercent = T) ``` If you want to get **confidence interval**, you should apply `se = T` option to `svykm` object. ```{r} s3 <- svykm(Surv(time, status > 0) ~ sex, design = dpbc, se = T) svyjskm(s3) svyjskm(s3, ci = F, showpercent = T) svyjskm(s3, ci = F, surv.scale = "percent", pval = T, table = T, cut.landmark = 1000) ``` ### Theme #### JAMA ```{r} svyjskm(s2, theme = "jama", pval = T, table = T, design = dpbc) ``` #### NEJM ```{r} svyjskm(s2, theme = "nejm", nejm.infigure.ratiow = 0.4, nejm.infigure.ratioh = 0.4, nejm.infigure.ylim = c(0.2, 1), pval = T, table = T, design = dpbc) ```