Author: Markus Lange
Date: 2024-08-27

# ggplot plotting functionality

#### Markus Lange

#### August 27, 2024

    library(dpasurv)

## Load data and run analysis

    data(simdata)

    set.seed(1)

    # Perform dynamic path analysis
    s <- dpa(Surv(start,stop,event)~M+x, list(M~x), id="subject", data=simdata, boot.n=500)

    # Calculate direct, indirect and total effects
    direct <- effect(x ~ outcome, s)
    indirect <- effect(x ~ M ~ outcome, s)
    total <- sum(direct, indirect)

    # Perform dynamic path analysis under multiple treatment arms:
    s2 <- dpa(Surv(start,stop,event)~M+dose, list(M~dose), id="subject", data=simdata, boot.n=500)

    # Calculate corresponding direct, indirect and total effects
    direct2 <- effect(dose ~ outcome, s2)
    indirect2 <- effect(dose ~ M ~ outcome, s2)
    total2 <- sum(direct2, indirect2)

## Basic plotting functionality

### Single arm

    layout1x3 <- par(mfrow=c(1,3))
    plot(direct); abline(h=0, lty=2, col=2)
    plot(indirect); abline(h=0, lty=2, col=2)
    plot(total); abline(h=0, lty=2, col=2)

    # restore user's graphical parameters:
    par(layout1x3)

### Multiple arm

    layout2x3 <- par(mfrow=c(2,3))
    plot(direct2); abline(h=0, lty=2, col=2)
    plot(indirect2); abline(h=0, lty=2, col=2)
    plot(total2); abline(h=0, lty=2, col=2)

    # restore user's graphical parameters:
    par(layout2x3)

## ggplot plotting functionality

We can input an object of type “effect”

    ggplot.effect(indirect)

Alternatively, we can provide a list of “effect” objects, for example

    ggplot.effect(list(direct, indirect, total))

Different dose levels will be plotted on top of each other

    ggplot.effect(direct2)

Also works when we plot a list of “effect” objects

    ggplot.effect(list(direct2, indirect2, total2))

It is possible to customize plotting parameters, for example

    ggplot.effect(list(direct, indirect, total),
                  titles = c("Direct","Indirect","Total"),
                  x_label = "Time (in years)",
                  y_label = "Custom y-label")