## ----setup, include=FALSE-----------------------------------------------------------------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.width = 7,
  fig.height = 5
)

# Use a wider console width for readable tabular output, while preserving and
# restoring the user's original option at the end of the vignette.
old_options <- options(width = 140)

library(twoPhaseSens)

## ----example-data-------------------------------------------------------------------------------------------------------------------------
dat <- twophase_example_data(
  n = 300,
  seed = 2026
)

head(dat)

## ----phase2-structure---------------------------------------------------------------------------------------------------------------------
table(dat$phase2)

with(
  dat,
  table(
    phase2 = phase2,
    complete_marker_block = complete.cases(marker1, marker2, marker3)
  )
)

## ----one-outcome--------------------------------------------------------------------------------------------------------------------------
fit_one <- twophase_sensitivity(
  data = dat,
  outcome = "outcome1",
  exposure = "exposure",
  covariates = c("age", "sex"),
  phase2_covariates = c("marker1", "marker2", "marker3"),
  phase2 = "phase2",
  methods = c("naive", "cca", "ipw"),
  seed = 1001
)

fit_one

## ----one-outcome-summary------------------------------------------------------------------------------------------------------------------
summary(fit_one)

## ----one-outcome-table--------------------------------------------------------------------------------------------------------------------
tbl_sensitivity(
  fit_one,
  outcome_labels = c(outcome1 = "Outcome 1"),
  caption = "**Sensitivity analysis for Outcome 1**"
)

## ----one-outcome-data-frame---------------------------------------------------------------------------------------------------------------
tbl_sensitivity(
  fit_one,
  outcome_labels = c(outcome1 = "Outcome 1"),
  output = "data.frame"
)

## ----decimals-----------------------------------------------------------------------------------------------------------------------------
tbl_sensitivity(
  fit_one,
  outcome_labels = c(outcome1 = "Outcome 1"),
  estimate_digits = 2,
  p_digits = 4,
  output = "data.frame"
)

## ----se-column----------------------------------------------------------------------------------------------------------------------------
tbl_sensitivity(
  fit_one,
  outcome_labels = c(outcome1 = "Outcome 1"),
  include_se = TRUE,
  output = "data.frame"
)

## ----multiple-outcomes--------------------------------------------------------------------------------------------------------------------
fit_two <- twophase_sensitivity(
  data = dat,
  outcome = c("outcome1", "outcome2"),
  exposure = "exposure",
  covariates = c("age", "sex"),
  phase2_covariates = c("marker1", "marker2", "marker3"),
  phase2 = "phase2",
  methods = c("naive", "cca", "ipw"),
  seed = 2001
)

## ----inspect-seeds------------------------------------------------------------------------------------------------------------------------
unique(fit_two$results[c("outcome", "analysis_seed")])

## ----multiple-outcome-table---------------------------------------------------------------------------------------------------------------
tbl_sensitivity(
  fit_two,
  outcome_labels = c(
    outcome1 = "Outcome 1",
    outcome2 = "Outcome 2"
  )
)

## ----explicit-seeds-----------------------------------------------------------------------------------------------------------------------
fit_seeded <- twophase_sensitivity(
  data = dat,
  outcome = c("outcome1", "outcome2"),
  exposure = "exposure",
  covariates = c("age", "sex"),
  phase2_covariates = c("marker1", "marker2", "marker3"),
  phase2 = "phase2",
  methods = c("naive", "cca"),
  seed = c(
    outcome2 = 9002,
    outcome1 = 9001
  )
)

unique(fit_seeded$results[c("outcome", "analysis_seed")])

## ----method-subset------------------------------------------------------------------------------------------------------------------------
fit_subset <- twophase_sensitivity(
  data = dat,
  outcome = "outcome1",
  exposure = "exposure",
  covariates = c("age", "sex"),
  phase2_covariates = c("marker1", "marker2", "marker3"),
  phase2 = "phase2",
  methods = c("cca", "fcs_mi", "ipw"),
  n_imputations = 5,
  mice_maxit = 5,
  seed = 3001
)

tbl_sensitivity(
  fit_subset,
  outcome_labels = c(outcome1 = "Outcome 1")
)

## ----mi-settings, eval=FALSE--------------------------------------------------------------------------------------------------------------
# fit_full <- twophase_sensitivity(
#   data = dat,
#   outcome = "outcome1",
#   exposure = "exposure",
#   covariates = c("age", "sex"),
#   phase2_covariates = c("marker1", "marker2", "marker3"),
#   phase2 = "phase2",
#   n_imputations = 50,
#   mice_maxit = 20,
#   jomo_nburn = 2000,
#   jomo_nbetween = 1000,
#   seed = 4001
# )

## ----confidence-level---------------------------------------------------------------------------------------------------------------------
fit_90 <- twophase_sensitivity(
  data = dat,
  outcome = "outcome1",
  exposure = "exposure",
  covariates = c("age", "sex"),
  phase2_covariates = c("marker1", "marker2", "marker3"),
  phase2 = "phase2",
  methods = c("naive", "cca"),
  conf_level = 0.90
)

tbl_sensitivity(
  fit_90,
  outcome_labels = c(outcome1 = "Outcome 1"),
  output = "data.frame"
)

## ----diagnostics--------------------------------------------------------------------------------------------------------------------------
diagnostics(fit_one)

## ----diagnostics-status-------------------------------------------------------------------------------------------------------------------
diagnostics(fit_one, type = "status")

## ----diagnostics-weights------------------------------------------------------------------------------------------------------------------
diagnostics(fit_one, type = "weights")

## ----diagnostics-mi, eval=FALSE-----------------------------------------------------------------------------------------------------------
# diagnostics(fit_full, type = "mi")

## ----diagnostics-filter-------------------------------------------------------------------------------------------------------------------
diagnostics(
  fit_two,
  outcome = "outcome2",
  method = "ipw"
)

## ----one-outcome-forest-------------------------------------------------------------------------------------------------------------------
plot_sensitivity(
  fit_one,
  outcome_labels = c(outcome1 = "Outcome 1")
)

## ----one-outcome-forest-generic, eval=FALSE-----------------------------------------------------------------------------------------------
# plot(fit_one)

## ----multiple-outcome-forest, fig.width=12.5, fig.height=5.4------------------------------------------------------------------------------
plot_sensitivity(
  fit_two,
  outcome_labels = c(
    outcome1 = "Outcome 1",
    outcome2 = "Outcome 2"
  ),
  annotate = TRUE
)

## ----multiple-outcome-forest-fixed, fig.width=12.5, fig.height=5.4------------------------------------------------------------------------
plot_sensitivity(
  fit_two,
  outcome_labels = c(
    outcome1 = "Outcome 1",
    outcome2 = "Outcome 2"
  ),
  facet_scales = "fixed",
  annotate = TRUE
)

## ----save-forest-examples, eval=FALSE-----------------------------------------------------------------------------------------------------
# p_one <- plot_sensitivity(
#   fit_one,
#   outcome_labels = c(outcome1 = "Primary outcome"),
#   estimate_label = "Adjusted beta"
# )
# 
# ggplot2::ggsave(
#   "sensitivity_single_outcome.png",
#   p_one,
#   width = 9.5,
#   height = 6,
#   dpi = 320,
#   bg = "white"
# )
# 
# p_two <- plot_sensitivity(
#   fit_two,
#   outcome_labels = c(
#     outcome1 = "Outcome 1",
#     outcome2 = "Outcome 2"
#   ),
#   estimate_label = "Adjusted beta",
#   facet_scales = "fixed"
# )
# 
# ggplot2::ggsave(
#   "sensitivity_two_outcomes.png",
#   p_two,
#   width = 14,
#   height = 6,
#   dpi = 320,
#   bg = "white"
# )

## ----custom-labels------------------------------------------------------------------------------------------------------------------------
tbl_sensitivity(
  fit_one,
  method_labels = c(
    Naive = "Phase-1 naive",
    CCA = "Complete case"
  ),
  outcome_labels = c(
    outcome1 = "Primary outcome"
  ),
  output = "data.frame"
)

## ----restore-options, include=FALSE-------------------------------------------
options(old_options)

