## ----label = "setup", include = FALSE-----------------------------------------

################################################################################
###                          !!! IMPORTANT NOTE !!!                          ###
###                                                                          ###
###          THIS FILE WAS GENERATED BY vignette-spinners/phoenix.R          ###
###                                                                          ###
###                         MAKE EDITS IN THAT FILE                          ###
################################################################################

library(qwraps2)
options(qwraps2_markup = "markdown")
knitr::opts_chunk$set(collapse = TRUE)

## -----------------------------------------------------------------------------
library(phoenix)
packageVersion("phoenix")

## ----echo = FALSE, results = "hide", fig.width = 7, fig.height = 4------------
resp_data <-
  expand.grid(pfr = seq(0, 450, by = 10), sfr = seq(0, 450, by = 10), imv = c(0, 1), o2 = c(0, 1))
resp_data$o2 <- pmax(resp_data$imv, resp_data$o2)
resp_data <- unique(resp_data)
resp_data$phoenix_respiratory_score <- factor(phoenix_respiratory(pfr, sfr, imv, o2, data = resp_data))

resp_data$oxygen_support <-
  factor(
    interaction(resp_data$imv, resp_data$o2),
    levels = c("0.0", "0.1", "1.1"),
    labels = c("No Oxygen Support", "Non-invasive Oxygen Support", "Invasive Oxygen Support")
  )

ggplot2::ggplot(data = resp_data) +
  ggplot2::theme_classic() +
  ggplot2::aes(x = sfr, y = pfr, fill = phoenix_respiratory_score) +
  ggplot2::geom_tile() +
  ggplot2::facet_wrap( ~ oxygen_support, nrow = 1) +
  ggplot2::scale_fill_brewer(name = "Phoenix Respiratory Score", palette = "Spectral", direction = -1) +
  ggplot2::ylab(expression(PaO[2] : FiO[2])) +
  ggplot2::xlab(expression(SpO[2] : FiO[2])) +
  ggplot2::theme(legend.position = "bottom")

## -----------------------------------------------------------------------------
phoenix_respiratory(
  sf_ratio = 87 / 0.40,
  other_respiratory_support = 1)

## -----------------------------------------------------------------------------
DF <- read.table(sep = "|", header = TRUE, text =
"
pfr | sfr | imv | o2
    | 438 |     |
    | 175 |     | 1
    | 175 |     | 1
186 |     |  1  | 0
300 | 277 |  0  | 1
    |     |     |
")

DF$resp_score <- phoenix_respiratory(pfr, sfr, imv, o2, DF)

DF

## -----------------------------------------------------------------------------
resp_example <- sepsis[c("pid", "fio2", "pao2", "spo2", "vent")]

## ----results = "hide"---------------------------------------------------------
resp_example$score <-
  phoenix_respiratory(
  pf_ratio = pao2 / fio2,
  sf_ratio = ifelse(spo2 <= 97, spo2 / fio2, NA_real_),
  imv = vent,
  other_respiratory_support = as.integer(fio2 > 0.21),
  data = sepsis
  )
resp_example

## ----echo = FALSE, results = "asis"-------------------------------------------
knitr::kable(resp_example)

## ----echo = FALSE, results = "hide", fig.width = 7, fig.height = 7------------
DF <- expand.grid(vasoactives = 0:2,
                  lactate = seq(0, 15, by = 1),
                  age = seq(0, 18 * 12, by = 1),
                  MAP = seq(00, 60, by = ))
DF$phoenix_cardiovascular_score <-
  factor(
    phoenix_cardiovascular(vasoactives, lactate, age, MAP, data = DF)
  )
DF$lactate_bin <- cut(DF$lactate, breaks = c(0, 5, 11, Inf), right = F)
levels(DF$lactate_bin) <- paste("Lactate", levels(DF$lactate_bin))

ggplot2::ggplot(DF) +
  ggplot2::theme_classic() +
  ggplot2::aes(x = age, y = MAP, fill = phoenix_cardiovascular_score) +
  ggplot2::geom_tile() +
  ggplot2::facet_grid(lactate_bin ~ paste("Vasoactive Medications:", vasoactives)) +
  ggplot2::scale_fill_brewer(name = "Phoenix Cardiovascular Score", palette = "Spectral", direction = -1) +
  ggplot2::ylab("Mean Arterial Pressue (mmHg)") +
  ggplot2::xlab("Age (months)") +
  ggplot2::guides(fill = ggplot2::guide_legend(nrow = 1)) +
  ggplot2::theme(legend.position = "bottom")

## ----results = "hide"---------------------------------------------------------
card_example <-
  sepsis[c("pid", "dobutamine", "dopamine", "epinephrine", "milrinone", "norepinephrine", "vasopressin", "lactate", "dbp", "sbp", "age")]

card_example$score <-
  phoenix_cardiovascular(
    vasoactives = dobutamine + dopamine + epinephrine + milrinone + norepinephrine + vasopressin,
    lactate = lactate,
    age = age,
    map = dbp + (sbp - dbp)/3,
    data = sepsis)

card_example

## ----results = "asis", echo = FALSE-------------------------------------------
knitr::kable(card_example)

## ----echo = FALSE, results = "hide", fig.height = 7, fig.width = 7------------
DF <- expand.grid(platelets = c(10, 150),
                  inr = c(1.0, 1.5),
                  d_dimer = c(1.2, 4.0),
                  fib = c(10, 150))
DF$plt_bin <-
  factor(DF$platelets, levels = c(150, 10), labels = c("Platelets >= 100", "Platelets < 100"))

DF$inr_bin <-
  factor(DF$inr, levels = c(1.0, 1.5), labels = c("INR <= 1.3", "INR > 1.3"))

DF$ddm_bin <-
  factor(DF$d_dimer, levels = c(1.2, 4.0), labels = c("D-dimer <= 2", "D-dimer > 2"))

DF$fib_bin <- factor(DF$fib, levels = c(150, 10),
                     labels = c("Fibrinogen >= 100", "Fibrinogen < 100"))

DF$phoenix_coagulation_score <-
  factor(
    phoenix_coagulation(platelets, inr, d_dimer, fib, data = DF)
  )

ggplot2::ggplot(DF) +
  ggplot2::theme_classic() +
  ggplot2::aes(x = plt_bin, y = fib_bin, fill = phoenix_coagulation_score) +
  ggplot2::geom_tile() +
  ggplot2::facet_grid(inr_bin ~ ddm_bin) +
  ggplot2::scale_fill_brewer(name = "Phoenix Coagulation Score", palette = "Spectral", direction = -1) +
  ggplot2::ylab("")+
  ggplot2::xlab("")+
  ggplot2::theme(legend.position = "bottom")

## ----results = "hide"---------------------------------------------------------
coag_example <- sepsis[c("pid", "platelets", "inr", "d_dimer", "fibrinogen")]
coag_example$score <-
  phoenix_coagulation(platelets, inr, d_dimer, fibrinogen, data = sepsis)
coag_example

## ----echo = FALSE, results = 'asis'-------------------------------------------
knitr::kable(coag_example)

## ----results = 'hide'---------------------------------------------------------
neuro_example <- sepsis[c("pid", "gcs_total", "pupil")]
neuro_example$score <-
  phoenix_neurologic(gcs = gcs_total, fixed_pupils = as.integer(pupil == "both-fixed"), data = sepsis)
neuro_example

## ----echo = FALSE, results = "asis"-------------------------------------------
knitr::kable(neuro_example)

## ----results = 'hide'---------------------------------------------------------
endo_example <- sepsis[c("pid", "glucose")]
endo_example$score <- phoenix_endocrine(glucose, data = sepsis)
endo_example

## ----echo = FALSE, results = "asis"-------------------------------------------
knitr::kable(endo_example)

## ----results = "hide"---------------------------------------------------------
immu_example <- sepsis[c("pid", "anc", "alc")]
immu_example$score <- phoenix_immunologic(anc, alc, sepsis)
immu_example

## ----echo = FALSE, results = "asis"-------------------------------------------
knitr::kable(immu_example)

## ----results = "hide"---------------------------------------------------------
renal_example <- sepsis[c("creatinine", "age")]
renal_example$score <- phoenix_renal(creatinine, age, sepsis)
renal_example

## ----echo = FALSE, results = "asis"-------------------------------------------
knitr::kable(renal_example)

## ----results = "hide"---------------------------------------------------------
hep_example <- sepsis[c("pid", "bilirubin", "alt")]
hep_example$score <- phoenix_hepatic(bilirubin, alt, sepsis)
hep_example

## ----echo = FALSE, results = "asis"-------------------------------------------
knitr::kable(hep_example)

## -----------------------------------------------------------------------------
phoenix_scores <-
  phoenix(
    # respiratory
      pf_ratio = pao2 / fio2,
      sf_ratio = ifelse(spo2 <= 97, spo2 / fio2, NA_real_),
      imv = vent,
      other_respiratory_support = as.integer(fio2 > 0.21),
    # cardiovascular
      vasoactives = dobutamine + dopamine + epinephrine + milrinone + norepinephrine + vasopressin,
      lactate = lactate,
      age = age,
      map = dbp + (sbp - dbp)/3,
    # coagulation
      platelets = platelets,
      inr = inr,
      d_dimer = d_dimer,
      fibrinogen = fibrinogen,
    # neurologic
      gcs = gcs_total,
      fixed_pupils = as.integer(pupil == "both-fixed"),
    data = sepsis
  )

str(phoenix_scores)

## ----echo = FALSE, results = "asis"-------------------------------------------
names(phoenix_scores) <- gsub("_", "\n", names(phoenix_scores))
knitr::kable(phoenix_scores, format = "html", align = "c")

## -----------------------------------------------------------------------------
phoenix8_scores <-
  phoenix8(
    # respiratory
      pf_ratio = pao2 / fio2,
      sf_ratio = ifelse(spo2 <= 97, spo2 / fio2, NA_real_),
      imv = vent,
      other_respiratory_support = as.integer(fio2 > 0.21),
    # cardiovascular
      vasoactives = dobutamine + dopamine + epinephrine + milrinone + norepinephrine + vasopressin,
      lactate = lactate,
      age = age, # Also used in the renal assessment.
      map = dbp + (sbp - dbp)/3,
    # coagulation
      platelets = platelets,
      inr = inr,
      d_dimer = d_dimer,
      fibrinogen = fibrinogen,
    # neurologic
      gcs = gcs_total,
      fixed_pupils = as.integer(pupil == "both-fixed"),
    # endocrine
      glucose = glucose,
    # immunologic
      anc = anc,
      alc = alc,
    # renal
      creatinine = creatinine,
      # no need to specify age again
    # hepatic
      bilirubin = bilirubin,
      alt = alt,
    data = sepsis
  )

str(phoenix8_scores)

## ----echo = FALSE, results = "asis"-------------------------------------------
names(phoenix8_scores) <- gsub("_", "\n", names(phoenix8_scores))
knitr::kable(phoenix8_scores, format = "html", align = "c")

## -----------------------------------------------------------------------------
phoenix(
  vasoactives = 1,  # norepinephrine drip
  map = 32 + (67 - 32) / 3, # 43.667 mmHg
  platelets = 95,
  gcs = 14, # irritability
  age = 3 * 12 # expected input for age is in months
  )

## -----------------------------------------------------------------------------
phoenix(
  gcs = 2 + 2 + 4, # eye + verbal + motor
  map = 52,
  imv = 1,
  sf_ratio = 92 / 0.45,
  platelets = 120,
  lactate = 2.9,
  inr = 1.7,
  d_dimer = 4.4,
  fibrinogen = 120)

