## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
library(dtametaTMB)


## -----------------------------------------------------------------------------
#| label: controlled-data

controlled_data <- data.frame(
  study = paste("Study", LETTERS[1:7]),
  TP = c(20, 80, 320, 800, 1600, 4000, 16000),
  FP = c(5, 20, 80, 200, 400, 1000, 4000),
  FN = c(5, 20, 80, 200, 400, 1000, 4000),
  TN = c(20, 80, 320, 800, 1600, 4000, 16000)
)

controlled_data$sens <- with(
  controlled_data,
  TP / (TP + FN)
)

controlled_data$spec <- with(
  controlled_data,
  TN / (TN + FP)
)

controlled_data


## -----------------------------------------------------------------------------
#| label: controlled-calculations

n1 <- with(controlled_data, TP + FN)
n0 <- with(controlled_data, FP + TN)

# Sample-size measures
q_ss_se <- sqrt(n1)
q_ss_sp <- sqrt(n0)
c_ss <- 9 / mean(pmax(q_ss_se, q_ss_sp))

# Inverse-standard-error measures
q_ise_se <- with(
  controlled_data,
  sqrt(n1 * sens * (1 - sens))
)

q_ise_sp <- with(
  controlled_data,
  sqrt(n0 * spec * (1 - spec))
)

c_se <- 9 / mean(pmax(q_ise_se, q_ise_sp))

comparison <- data.frame(
  study = controlled_data$study,
  sample_size_width = (3 + c_ss * q_ss_sp) / 10,
  sample_size_height = (3 + c_ss * q_ss_se) / 10,
  inverse_se_width = (3 + c_se * q_ise_sp) / 10,
  inverse_se_height = (3 + c_se * q_ise_se) / 10
)

comparison


## -----------------------------------------------------------------------------
#| label: fit-example
#| eval: TRUE

fit <- fitRutterGatsonis(
  data = controlled_data,
  TP = TP,
  FP = FP,
  FN = FN,
  TN = TN,
  study = study
)
fit


## -----------------------------------------------------------------------------
#| label: plot-sample-size
#| fig.height: 8
#| fig.width: 8
#| eval: TRUE
plot(fit,
     symbol = "rectangle",
     size = "sampsize_revman",
     scale = 0.02,
     HSROC = FALSE)


## -----------------------------------------------------------------------------
#| label: plot-inverse-se
#| fig.height: 8
#| fig.width: 8
#| eval: TRUE
plot(fit,
     symbol = "rectangle",
     size = "se_revman",
     scale = 0.02,
     HSROC = FALSE)


## -----------------------------------------------------------------------------
#| label: plot-scale
#| fig.height: 8
#| fig.width: 8
#| eval: TRUE

plot(fit,
     symbol = "rectangle",
     size = "se_revman",
     scale = 0.02*1.5, # 50% larger than the default
     HSROC = FALSE)

plot(fit,
     symbol = "triangle",
     size = "se_revman",
     scale = 0.02*1.5, # 50% larger than the default
     HSROC = FALSE)

