## ----echo = FALSE-------------------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>", eval = TRUE, fig.width = 6, fig.height = 4)
options(width = 80)

## ----setup--------------------------------------------------------------------
library(testflow)
cardio <- make_cardio_data()

## -----------------------------------------------------------------------------
x <- test_two_groups(sbp_3m ~ sex, data = cardio)
x                # print.testflow(): formatted console report
summary(x)       # summary.testflow(): compact summary list
report(x)        # report.testflow(): report-ready sentence
as_tibble(x)     # as_tibble.testflow(): one-row tidy summary

## -----------------------------------------------------------------------------
sumtab(~ age + sbp_3m + ldl | treatment, data = cardio)

## -----------------------------------------------------------------------------
x_one_sample <- test_one_sample(cardio, sbp_3m, mu = 140)
x_one_sample
plot(x_one_sample)

## -----------------------------------------------------------------------------
x_two_groups <- test_two_groups(sbp_3m ~ sex, data = cardio)
x_two_groups
plot(x_two_groups)

## -----------------------------------------------------------------------------
x_paired <- test_paired(sbp_3m ~ sbp_baseline, data = cardio)
x_paired
plot(x_paired)

## -----------------------------------------------------------------------------
x_groups <- test_groups(sbp_3m ~ treatment, data = cardio)
x_groups
plot(x_groups)

## -----------------------------------------------------------------------------
x_factorial <- test_factorial(sbp_3m ~ sex * treatment, data = cardio)
x_factorial
plot(x_factorial)

## -----------------------------------------------------------------------------
x_repeated <- test_repeated(cardio, c(sbp_baseline, sbp_3m, sbp_6m), id = id)
x_repeated
plot(x_repeated)

## -----------------------------------------------------------------------------
long_sbp <- tidyr::pivot_longer(
  cardio, c(sbp_baseline, sbp_3m, sbp_6m),
  names_to = "time", values_to = "sbp"
)
test_repeated_long(long_sbp, outcome = sbp, within = time, id = id)

## -----------------------------------------------------------------------------
x_categorical <- test_categorical(treatment ~ controlled_3m, data = cardio)
x_categorical
plot(x_categorical)

## -----------------------------------------------------------------------------
x_proportion <- test_proportion(cardio, controlled_3m, success = "yes", p = 0.5)
x_proportion
plot(x_proportion)

## -----------------------------------------------------------------------------
x_multinomial <- test_multinomial(cardio, treatment)
x_multinomial
plot(x_multinomial)

## -----------------------------------------------------------------------------
x_paired_cat <- test_paired_categorical(cardio, controlled_baseline, controlled_3m)
x_paired_cat
plot(x_paired_cat)

## -----------------------------------------------------------------------------
x_repeated_cat <- test_repeated_categorical(cardio, c(controlled_baseline, controlled_3m, controlled_6m))
x_repeated_cat
plot(x_repeated_cat)

## -----------------------------------------------------------------------------
x_correlation <- test_correlation(sbp_3m ~ age, data = cardio)
x_correlation
plot(x_correlation)

## -----------------------------------------------------------------------------
x_corr_matrix <- test_correlation_matrix(cardio, c(age, sbp_baseline, ldl, crp), method = "spearman")
x_corr_matrix
plot(x_corr_matrix)

## -----------------------------------------------------------------------------
x_linreg <- test_linear_regression(sbp_3m ~ age + ldl, data = cardio)
x_linreg
plot(x_linreg)

## -----------------------------------------------------------------------------
x_logreg <- test_logistic_regression(controlled_3m ~ age + ldl, data = cardio)
x_logreg
plot(x_logreg)

## -----------------------------------------------------------------------------
set.seed(1)
n <- 100
survival_dat <- tibble::tibble(
  time = rexp(n, 0.1),
  status = rbinom(n, 1, 0.7),
  arm = rep(c("control", "treatment"), each = n / 2),
  age = rnorm(n, 60, 10)
)

## -----------------------------------------------------------------------------
x_survival <- test_survival(Surv(time, status) ~ arm, data = survival_dat)
x_survival
plot(x_survival)

## -----------------------------------------------------------------------------
x_cox <- test_cox(Surv(time, status) ~ age + arm, data = survival_dat)
x_cox
plot(x_cox)

## -----------------------------------------------------------------------------
set.seed(1)
diag_dat <- tibble::tibble(
  test = c(rep("positive", 55), rep("negative", 98)),
  reference = c(rep("positive", 45), rep("negative", 10), rep("positive", 8), rep("negative", 90))
)
x_diagnostic <- test_diagnostic(diag_dat, test, reference)
x_diagnostic
plot(x_diagnostic)

## -----------------------------------------------------------------------------
roc_dat <- tibble::tibble(
  marker = c(rnorm(60, 2, 1), rnorm(50, 0, 1)),
  disease = c(rep("yes", 60), rep("no", 50))
)
x_roc <- test_roc(roc_dat, marker, disease)
x_roc
plot(x_roc)

## -----------------------------------------------------------------------------
agree_dat <- tibble::tibble(
  rater1 = sample(c("mild", "moderate", "severe"), 100, replace = TRUE),
  rater2 = sample(c("mild", "moderate", "severe"), 100, replace = TRUE)
)
x_agreement <- test_agreement(agree_dat, rater1, rater2)
x_agreement
plot(x_agreement)

## -----------------------------------------------------------------------------
icc_dat <- tibble::tibble(
  rater1 = rnorm(30, 50, 10),
  rater2 = rnorm(30, 50, 10),
  rater3 = rnorm(30, 50, 10)
)
x_icc <- test_icc(icc_dat, c(rater1, rater2, rater3))
x_icc
plot(x_icc)

## -----------------------------------------------------------------------------
x_outliers <- test_outliers(c(sbp_3m, ldl, crp), data = cardio)
x_outliers
plot(x_outliers)

## ----eval = FALSE-------------------------------------------------------------
# sample_size(
#   endpoint = c("continuous", "binary", "survival", "ordinal"),
#   design = c("parallel", "paired", "repeated"),
#   objective = c("superiority", "noninferiority", "equivalence"),
#   ...
# )

## -----------------------------------------------------------------------------
ss_parallel <- sample_size_continuous(design = "parallel", objective = "superiority", delta = 5, sd = 10, alpha = 0.05, power = 0.90)
ss_parallel
plot(ss_parallel, type = "summary")

## -----------------------------------------------------------------------------
ss_paired <- sample_size_continuous(design = "paired", objective = "superiority", delta = 5, sd_diff = 10, alpha = 0.05, power = 0.90)
ss_paired
plot(ss_paired, type = "both")

## -----------------------------------------------------------------------------
sample_size_binary(design = "parallel", objective = "superiority", p1 = 0.4, p2 = 0.25, method = "pooled", alpha = 0.05, power = 0.90)

## -----------------------------------------------------------------------------
sample_size_survival(hr = 0.7, survival_a = 0.8, survival_b = 0.7, alpha = 0.05, power = 0.90)

## -----------------------------------------------------------------------------
sample_size_ordinal(p_superiority = 0.65, alpha = 0.05, power = 0.90)

## -----------------------------------------------------------------------------
sample_size_bioequivalence(design = "crossover", gmr = 0.95, cv_within = 0.30, alpha = 0.05, power = 0.90)

## -----------------------------------------------------------------------------
sample_size_precision(endpoint = "continuous", design = "one_sample", width = 2, sd = 10, alpha = 0.05)
sample_size_precision(endpoint = "binary", design = "two_sample", width = 0.08, p1 = 0.4, p2 = 0.3, allocation = 2)

## -----------------------------------------------------------------------------
sample_size_precision(endpoint = "binary", design = "one_sample", width = 0.02, p = 0.01, method = "wilson")

## -----------------------------------------------------------------------------
sample_size_cluster_adjust(100, m = 20, rho = 0.02)
sample_size_adjust_dropout(100, dropout = 0.15)

