## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

# URLs:
url_riskyr_org <- "https://riskyr.org/"

## ----comp-PPV, messages = FALSE, warning = FALSE------------------------------
library("riskyr")  # loads the package

comp_PPV(prev = .01, sens = .80, spec = (1 - .096))

## ----comp_prob_prob_1---------------------------------------------------------
# Compute probabilities from 3 essential probabilities:                 # Input arguments:
p1 <- comp_prob_prob(prev = .01, sens = .80, spec =   NA, fart = .096)  # prev, sens, NA,   fart
p2 <- comp_prob_prob(prev = .01, sens = .80, spec = .904, fart =   NA)  # prev, sens, spec, NA 
p3 <- comp_prob_prob(prev = .01, sens = .80, spec = .904, fart = .096)  # prev, sens, spec, fart

# Check equality of outputs:
all.equal(p1, p2)
all.equal(p2, p3)

## ----print-p1-----------------------------------------------------------------
unlist(p1)

## ----comp-prob-prob-2---------------------------------------------------------
# Compute probabilities from 3 ratios of frequencies (probabilities):       # Input arguments:
p4 <- comp_prob_prob(prev = 10/1000, sens = 8/10, spec = NA, fart = 95/990) # prev, sens, NA, fart

p4$PPV

## ----comp-freq-prob-1---------------------------------------------------------
# Compute frequencies from probabilities:
f1 <- comp_freq_prob(prev =     .01, sens =  .80, spec = NA, fart =   .096, N = 1000)
f2 <- comp_freq_prob(prev = 10/1000, sens = 8/10, spec = NA, fart = 95/990, N = 1000)

# Check equality of outputs:
all.equal(f1, f2)

## ----comp-freq-prob-2, eval = FALSE-------------------------------------------
#  # Compute frequencies from probabilities (without rounding):
#  f3 <- comp_freq_prob(prev =     .01, sens =  .80, spec = NA, fart =   .096, N = 1000, round = FALSE)
#  f4 <- comp_freq_prob(prev = 10/1000, sens = 8/10, spec = NA, fart = 95/990, N = 1000, round = FALSE)
#  
#  ## Check equality of outputs:
#  all.equal(f3, f4)  # => shows slight differences in some frequencies:

## ----print-f1-----------------------------------------------------------------
unlist(f1)

## ----comp-prob-freq-----------------------------------------------------------
# Compute probabilities from frequencies:
p5 <- comp_prob_freq(hi = 8, mi = 2, fa = 95, cr = 895)  # => provide 4 essential frequencies

## ----equality-p4p5, eval = FALSE----------------------------------------------
#  # Check equality of outputs:
#  all.equal(p5, p4)

## ----full-circle, eval = FALSE------------------------------------------------
#  # Pick 3 random probability inputs:
#  rand.p <- runif(n = 3, min = 0, max = 1)
#  rand.p
#  
#  # Translation 1: Compute frequencies from probabilities (without rounding):
#  freq <- comp_freq_prob(prev = rand.p[1], sens = rand.p[2], spec = rand.p[3], round = FALSE)
#  
#  # Translation 2: Compute probabilities from frequencies:
#  prob <- comp_prob_freq(hi = freq$hi, mi = freq$mi, fa = freq$fa, cr = freq$cr)
#  
#  ## Verify that results match original probabilities:
#  all.equal(prob$prev, rand.p[1])
#  all.equal(prob$sens, rand.p[2])
#  all.equal(prob$spec, rand.p[3])

## ----full_circle_2, eval = FALSE----------------------------------------------
#  # Pick 4 random frequencies:
#  rand.f <- round(runif(n = 4, min = 0, max = 10^3), 0)
#  rand.f
#  # sum(rand.f)
#  
#  # Translation 1: Compute probabilities from frequencies:
#  prob <- comp_prob_freq(hi = rand.f[1], mi = rand.f[2], fa = rand.f[3], cr = rand.f[4])
#  # prob
#  
#  # Translation 2: Compute frequencies from probabilities (for original N, without rounding):
#  freq <- comp_freq_prob(prev = prob$prev, sens = prob$sens, spec = prob$spec,
#                         N = sum(rand.f), round = FALSE)
#  # freq
#  
#  # Verify that results match original frequencies:
#  all.equal(freq$hi, rand.f[1])
#  all.equal(freq$mi, rand.f[2])
#  all.equal(freq$fa, rand.f[3])
#  all.equal(freq$cr, rand.f[4])

## ----riskyr_scenario_def------------------------------------------------------
s <- riskyr(scen_lbl = "Mammography screening", 
            cond_lbl = "breast cancer",
            cond_true_lbl = "cancer", cond_false_lbl = "no cancer",
            dec_lbl = "screening test",
            dec_pos_lbl = "predict cancer", dec_neg_lbl = "predict no cancer",
            prev = .01, 
            sens = .80, 
            spec = NA, 
            fart = .096)

## ----riskyr-scenario-summary--------------------------------------------------
summary(s)  # provides an overview over key scenario information:

## ----riskyr-scenario-plot, fig.width = 6, fig.height = 5----------------------
plot(s)  # a prism/network diagram of key frequencies and probabilities (by default):

## ----plot-icons-1, warning = FALSE, fig.width = 6, fig.height = 4, fig.show = 'hold', fig.cap = "An icon array showing the mammography scenario for a population of 1000 individuals."----
plot_icons(prev = .01, sens = .80, spec = NA, fart = .096, N = 1000, 
           icon_types = c(21, 21, 22, 22),
           title_lbl = "Mammography screening")

## ----plot-tree-cd, fig.width = 6, fig.height = 4, fig.show = 'hold', fig.cap = "A tree diagram that applies the provided probabilities and frequencies to a population of 1000 individuals."----
plot_prism(prev = .01, sens = .80, spec = NA, fart = .096, N = 1000, 
           by = "cd", title_lbl = "Mammography screening")

## ----plot-mosaic-cd, eval = TRUE, fig.align = "center", fig.width = 6, fig.height = 5, fig.show = 'hold', fig.cap = "An area plot in which area sizes represent the probabilities/relative frequencies of subgroups."----
plot_area(prev = .01, sens = .80, spec = NA, fart = .096, N = 1000,
          title_lbl = "Mammography screening")

## ----plot-bar, eval = FALSE, fig.width = 6, fig.height = 5, fig.show = 'hold', fig.cap = "A bar plot."----
#  plot_bar(prev = .01, sens = .80, spec = NA, fart = .096, N = 1000,
#           by = "all", dir = 2, title_lbl = "Mammography screening")

## ----plot-prism, fig.width = 6, fig.height = 5, fig.show = 'hold', fig.cap = "A prism plot that integrates 2 tree diagrams and represents relative frequency by area size."----
plot_prism(prev = .01, sens = .80, spec = NA, fart = .096, N = 1000, 
           by = "cddc", area = "sq", title_lbl = "Mammography screening")

## ----plot-tree-dc, eval = FALSE, fig.width = 6, fig.height = 4.5, fig.show = 'hold', fig.cap = "Alternative tree diagram that splits the population by decision."----
#  plot_prism(prev = .01, sens = .80, spec = NA, fart = .096, N = 1000,
#             by = "dc", title_lbl = "Mammography screening", col_pal = pal_mod)

## ----plot-tree-ac, eval = FALSE, fig.width = 6, fig.height = 4.5, fig.show = 'hold', fig.cap = "Alternative tree diagram that splits the population by accuracy"----
#  plot_prism(prev = .01, sens = .80, spec = NA, fart = .096, N = 1000,
#             by = "ac", title_lbl = "Mammography screening")

## ----plot-mosaic-dc, eval = FALSE, fig.align = "center", fig.width = 6, fig.height = 4.5, fig.show = 'hold', fig.cap = "Alternative mosaic plot that first splits the population (horizontally) by decision."----
#  plot_area(prev = .01, sens = .80, spec = NA, fart = .096, N = 1000,
#            by = "cddc",    # show by condition x decision
#            p_split = "h",  # horizontal perspective is primary
#            title_lbl = "Mammography screening")

## ----plot-tree-dc-vr, eval = FALSE, fig.width = 6, fig.height = 4.5, fig.show = 'asis', fig.cap = "A prism diagram that represents relative frequencies as the width of horizontal rectangles."----
#  plot_prism(prev = .01, sens = .80, spec = NA, fart = .096, N = 1000,
#             by = "dc", area = "hr", title_lbl = "Mammography screening")

## ----plot-icons-mosaic, eval = FALSE, warning = FALSE, fig.width = 6, fig.height = 4.5, fig.show = 'asis', fig.cap = "An icon array showing the mammography scenario for 1000 mosaic puzzle parts."----
#  plot_icons(prev = .01, sens = .80, spec = NA, fart = .096, N = 1000,
#             arr_type = "mosaic", icon_types = c(21, 21, 22, 22), icon_size = 2,
#             title_lbl = "Mammography screening")

