--- title: "Gallery" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Gallery} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup04, include=FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "fig/function-", fig.ext = "png", fig.width = 6, fig.height = 4, dpi = 300, fig.retina = 2, fig.align = "center", out.width = "70%" ) if (requireNamespace("cifmodeling", quietly = TRUE)) { library(cifmodeling) } else { stop("Package 'cifmodeling' is not available during vignette build.") } library(nleqslv) library(boot) library(ggplot2) library(ggsurvfit) library(patchwork) data("diabetes.complications", package = "cifmodeling") set.seed(1) ``` ### Default for survival data ```{r gallery-1-01, fig.cap="Default of cifplot() for survival data", warning=FALSE, message=FALSE} data(diabetes.complications) diabetes.complications$d <- as.integer(diabetes.complications$epsilon>0) diabetes.complications$fruitq1 <- ifelse( diabetes.complications$fruitq == "Q1","Q1","Q2 to Q4" ) cifplot(Event(t,d) ~ fruitq1, data = diabetes.complications, outcome.type = "survival") ``` ### Default for competing risks data ```{r gallery-1-02, fig.cap="Default of cifplot() for competing risks data", warning=FALSE, message=FALSE} cifplot(Event(t,epsilon) ~ fruitq1, data = diabetes.complications, outcome.type = "competing-risk") ``` ### Visual elements ```{r gallery-2-01, fig.cap="Hide confidence interval, risk table, and censor marks", warning=FALSE, message=FALSE} cifplot(Event(t,epsilon) ~ fruitq1, data = diabetes.complications, outcome.type = "competing-risk", add.conf = FALSE, add.risktable = FALSE, add.censor.mark = FALSE) ``` ```{r gallery-2-02, fig.cap="Add a table of CIF estimates and event-2 time marks", warning=FALSE, message=FALSE} cifplot(Event(t,epsilon) ~ fruitq1, data = diabetes.complications, outcome.type = "competing-risk", add.risktable = FALSE, add.estimate.table = TRUE, add.censor.mark = FALSE, add.competing.risk.mark = TRUE) ``` ```{r gallery-2-03, fig.cap="Add event-2 time marks using external event-2 time", warning=FALSE, message=FALSE} # Extract event-2 time from data frame time_to_event <- extract_time_to_event(Event(t, epsilon) ~ fruitq1, data = diabetes.complications, which.event = "event2") # Ensure named list by strata stopifnot(is.list(time_to_event), length(time_to_event) > 0) # Add event-2 time marks using external event-2 time cifplot(Event(t, epsilon) ~ fruitq1, data = diabetes.complications, outcome.type = "competing-risk", add.risktable = FALSE, add.estimate.table = TRUE, add.censor.mark = FALSE, add.competing.risk.mark = TRUE, competing.risk.time = time_to_event) ``` ```{r gallery-2-04, fig.cap="Use (open) circle for strata in estimate table and event-2 time marks", warning=FALSE, message=FALSE} cifplot(Event(t, epsilon) ~ fruitq1, data = diabetes.complications, outcome.type = "competing-risk", add.risktable = FALSE, add.estimate.table = TRUE, symbol.risk.table = "circle", add.censor.mark = FALSE, add.competing.risk.mark = TRUE, shape.competing.risk.mark = 1, size.competing.risk.mark = 4, competing.risk.time = time_to_event) ``` ### Risk ratio label ```{r gallery-3-01, fig.cap="Add risk ratio label using polyreg() and effect_label.polyreg()", warning=FALSE, message=FALSE} # Fit direct polytomous regression output1 <- polyreg(nuisance.model=Event(t,epsilon)~1, exposure="fruitq1", data=diabetes.complications, effect.measure1="RR", effect.measure2="RR", time.point=8, outcome.type="competing-risk") # Create a label of the risk ratio of event1 output2 <- effect_label.polyreg(output1, event="event1", add.exposure.levels=FALSE, add.outcome=FALSE, add.conf=FALSE) output3 <- cifplot(Event(t,epsilon) ~ fruitq1, data = diabetes.complications, outcome.type = "competing-risk") # Add the label output4 <- output3$plot + ggplot2::annotate("text", x=6, y=0.8, label=output2, hjust=1, vjust=1) print(output4) ``` ### Panel mode ```{r gallery-4-01, fig.cap="Cumulative incidence curves per each stratification variable", warning=FALSE, message=FALSE} cifplot(Event(t,epsilon) ~ fruitq + fruitq1, data = diabetes.complications, outcome.type = "competing-risk", panel.per.variable = TRUE) ``` ```{r gallery-4-02, fig.cap="Cumulative incidence curves for event 1 vs event 2", warning=FALSE, message=FALSE} cifplot(Event(t,epsilon) ~ fruitq1, data = diabetes.complications, outcome.type = "competing-risk", panel.per.event = TRUE) ``` ```{r gallery-4-03, fig.cap="Survival curves for event vs censoring", warning=FALSE, message=FALSE} cifplot(Event(t,d) ~ fruitq1, data = diabetes.complications, outcome.type = "survival", panel.censoring = TRUE) ``` ## Zoomed-in-view ```{r gallery-5-01, fig.cap="Zoomed-in-view panel using cifpanel()", warning=FALSE, message=FALSE} output5 <- cifpanel( title.plot = c("Fruit intake and macrovascular complications", "Zoomed-in view"), inset.panel = TRUE, formula = Event(t, epsilon) ~ fruitq, data = diabetes.complications, outcome.type = "competing-risk", code.events = list(c(2,1,0), c(2,1,0)), label.y = c("CIF of macrovascular complications", ""), label.x = c("Years from registration", ""), limits.y = list(c(0,1), c(0,0.15)), inset.left = 0.40, inset.bottom = 0.45, inset.right = 1.00, inset.top = 0.95, inset.legend.position = "none", legend.position = "bottom", add.conf = FALSE ) print(output5) ``` ### Font, style and palette ```{r gallery-6-01, fig.cap="Adjust font size", warning=FALSE, message=FALSE} cifplot(Event(t,epsilon) ~ fruitq, data = diabetes.complications, outcome.type = "competing-risk", add.conf = FALSE, font.size = 16, font.size.risk.table = 3) ``` ```{r gallery-6-02, fig.cap="Select font family, style, linewidth and palette", warning=FALSE, message=FALSE} cifplot(Event(t,epsilon) ~ fruitq, data = diabetes.complications, outcome.type = "competing-risk", add.conf = FALSE, style = "bold", font.family = "serif", palette = c("blue1", "cyan3", "navy", "deepskyblue3")) cifplot(Event(t,epsilon) ~ fruitq, data = diabetes.complications, outcome.type = "competing-risk", add.conf = FALSE, style = "framed", font.family = "serif", linewidth = 1.3, linetype = TRUE, palette = c("azure4", "gray", "black", "darkgray")) cifplot(Event(t,epsilon) ~ fruitq, data = diabetes.complications, outcome.type = "competing-risk", add.conf = FALSE, style = "gray", font.family = "mono", palette = c("cyan3", "deepskyblue4", "darkseagreen2", "deepskyblue3")) cifplot(Event(t,epsilon) ~ fruitq, data = diabetes.complications, outcome.type = "competing-risk", add.conf = FALSE, style = "ggsurvfit", font.family = "mono", palette = c("brown", "orange", "purple", "darkgoldenrod")) ``` ### Axis and label ```{r gallery-7-01, fig.cap="Customize labels with explicit level mapping (safe against factor order)", warning=FALSE, message=FALSE} cifplot(Event(t,d) ~ fruitq1, data = diabetes.complications, outcome.type = "survival", label.y = "Survival (no complications)", label.x = "Years from registration", label.strata = c("High intake","Low intake"), level.strata = c("Q2 to Q4","Q1"), order.strata = c("Q1", "Q2 to Q4")) ``` ```{r gallery-7-02, fig.cap="Plot 1 - survival and set axis limits", warning=FALSE, message=FALSE} cifplot(Event(t,d) ~ fruitq1, data = diabetes.complications, outcome.type = "survival", label.y = "Risk of diabetes complications", label.x = "Years from registration", label.strata = c("High intake","Low intake"), level.strata = c("Q2 to Q4","Q1"), order.strata = c("Q1", "Q2 to Q4"), type.y = "risk", limits.y = c(0, 0.5), breaks.y = seq(0, 0.5, by=0.1), limits.x = c(0, 8), breaks.x = 0:8, use.coord.cartesian = TRUE) ``` ### Proportional hazards check by a log-log plot ```{r gallery-8-01, fig.cap="Check the proportional hazards assumption by a log-log plot", warning=FALSE, message=FALSE} cifplot(Event(t,d) ~ fruitq1, data = diabetes.complications, outcome.type = "survival", type.y = "cloglog") ```