## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.width = 7,
  fig.height = 4.5
)
hasDiagrammeR <- requireNamespace("DiagrammeR", quietly = TRUE)

## ----setup--------------------------------------------------------------------
library(nlmixr2plot)

## -----------------------------------------------------------------------------
two.cmt <- function() {
  ini({
    tka <- log(1.5)
    tcl <- log(3)
    tv <- log(20)
    tq <- log(2)
    tvp <- log(40)
    add.sd <- 0.2
  })
  model({
    ka <- exp(tka)
    cl <- exp(tcl)
    v <- exp(tv)
    q <- exp(tq)
    vp <- exp(tvp)
    d/dt(depot) <- -ka * depot
    d/dt(central) <- ka * depot - cl / v * central - q / v * central +
      q / vp * periph
    d/dt(periph) <- q / v * central - q / vp * periph
    cp <- central / v
    cp ~ add(add.sd)
  })
}

## -----------------------------------------------------------------------------
modelDiagram(two.cmt, engine = "ggplot2")

## ----eval = FALSE-------------------------------------------------------------
# plot(rxode2::rxode2(two.cmt), engine = "ggplot2")

## ----eval = hasDiagrammeR-----------------------------------------------------
modelDiagram(two.cmt, engine = "DiagrammeR")

## -----------------------------------------------------------------------------
cat(modelDiagram(two.cmt, engine = "dot"))

## ----eval = FALSE-------------------------------------------------------------
# options(nlmixr2plot.diagram.engine = "ggplot2")

## -----------------------------------------------------------------------------
modelDiagram(two.cmt, engine = "ggplot2", labels = TRUE)

## -----------------------------------------------------------------------------
g <- modelGraph(two.cmt)
g

## ----eval = FALSE-------------------------------------------------------------
# plot(g, engine = "ggplot2")

## -----------------------------------------------------------------------------
pk.turnover <- function() {
  ini({
    tktr <- log(1)
    tka <- log(1)
    tcl <- log(0.1)
    tv <- log(10)
    poplogit <- 2
    tec50 <- log(0.5)
    tkout <- log(0.05)
    te0 <- log(100)
    prop.err <- 0.1
    pdadd.err <- 10
  })
  model({
    ktr <- exp(tktr)
    ka <- exp(tka)
    cl <- exp(tcl)
    v <- exp(tv)
    emax <- expit(poplogit)
    ec50 <- exp(tec50)
    kout <- exp(tkout)
    e0 <- exp(te0)
    DCP <- center / v
    PD <- 1 - emax * DCP / (ec50 + DCP)
    effect(0) <- e0
    kin <- e0 * kout
    d/dt(depot) <- -ktr * depot
    d/dt(gut) <- ktr * depot - ka * gut
    d/dt(center) <- ka * gut - cl / v * center
    d/dt(effect) <- kin * PD - kout * effect
    cp <- center / v
    cp ~ prop(prop.err)
    effect ~ add(pdadd.err)
  })
}
modelDiagram(pk.turnover, engine = "ggplot2")

## ----eval = hasDiagrammeR-----------------------------------------------------
modelDiagram(pk.turnover, engine = "DiagrammeR")

## -----------------------------------------------------------------------------
pkpd <- rxode2::rxode2({
  C2 <- centr / V2
  C3 <- peri / V3
  C4 <- peri2 / V4
  d/dt(depot) <- -KA * depot
  d/dt(centr) <- KA * depot - CL * C2 - Q * C2 + Q * C3 - Q2 * C2 + Q2 * C4 -
    kmet * centr
  d/dt(peri) <- Q * C2 - Q * C3
  d/dt(peri2) <- Q2 * C2 - Q2 * C4
  d/dt(met) <- kmet * centr - kelm * met
  d/dt(ce) <- ke0 * (C2 - ce)
  d/dt(resp) <- kin - kout * (1 - ce / (ec50 + ce)) * resp
})
modelDiagram(pkpd, engine = "ggplot2")

## -----------------------------------------------------------------------------
tmdd <- rxode2::rxode2({
  d/dt(central) <- -kel * central - kon * central * target + koff * complex
  d/dt(target) <- ksyn - kdeg * target - kon * central * target +
    koff * complex
  d/dt(complex) <- kon * central * target - koff * complex - kint * complex
})
modelGraph(tmdd, dosing = "central")
modelDiagram(tmdd, dosing = "central", engine = "ggplot2")

## -----------------------------------------------------------------------------
d <- data.frame(
  id = 1, time = c(0, 0, 1, 2),
  amt = c(100, 50, 0, 0), evid = c(1, 1, 0, 0),
  cmt = c("depot", "central", "central", "central"), dv = 0
)
modelGraph(two.cmt, data = d)$nodes

## -----------------------------------------------------------------------------
modelDiagram(two.cmt, dosing = "central", engine = "ggplot2")

## ----eval = FALSE-------------------------------------------------------------
# fit <- nlmixr2(two.cmt, nlmixr2data::theo_sd, est = "focei")
# modelDiagram(fit)

## -----------------------------------------------------------------------------
pk.lag <- rxode2::rxode2({
  d/dt(depot) <- -ka * depot
  alag(depot) <- tlag
  f(depot) <- fbio
  d/dt(central) <- ka * depot - cl / v * central
  dur(central) <- d1
})
modelGraph(pk.lag)
modelDiagram(pk.lag, engine = "ggplot2")

## ----eval = "linToOde" %in% getNamespaceExports("rxode2")---------------------
one.cmt <- function() {
  ini({
    tka <- 0.45
    tcl <- 1
    tv <- 3.45
    add.sd <- 0.7
  })
  model({
    ka <- exp(tka)
    cl <- exp(tcl)
    v <- exp(tv)
    linCmt() ~ add(add.sd)
  })
}
modelDiagram(one.cmt, engine = "ggplot2")

