## -----------------------------------------------------------------------------
#| label: setup
#| message: false
library(qte)
library(ggplot2)
set.seed(42)
data(lalonde)
xf <- ~ age + I(age^2) + education + black + hispanic + married + nodegree


## -----------------------------------------------------------------------------
#| label: compute-results
#| include: false
# Results are precomputed and cached so CRAN's vignette rebuild doesn't have
# to re-run the bootstrap on every check. Delete precomputed/intro-results.rds
# and re-render to regenerate after a code change (see CLAUDE.md).
cache_file <- "precomputed/intro-results.rds"
use_cache <- file.exists(cache_file)

if (use_cache) {
  cached   <- readRDS(cache_file)
  res_exp  <- cached$res_exp
  res_psid <- cached$res_psid
  res_qtt  <- cached$res_qtt
} else {
  res_exp <- unc_qte(
    yname  = "re78",
    dname  = "treat",
    data   = lalonde.exp,
    target = "qte",
    probs  = seq(0.1, 0.9, 0.1),
    biters = 100
  )
  res_psid <- unc_qte(
    yname      = "re78",
    dname      = "treat",
    data       = lalonde.psid,
    xformla    = xf,
    est_method = "aipw",
    target     = "qte",
    probs      = seq(0.1, 0.9, 0.1),
    biters     = 100
  )
  res_qtt <- unc_qte(
    yname      = "re78",
    dname      = "treat",
    data       = lalonde.psid,
    xformla    = xf,
    est_method = "aipw",
    target     = "qtt",
    probs      = seq(0.1, 0.9, 0.1),
    biters     = 100
  )
  # pscore.reg (fitted glm) carries a full copy of the training data and is
  # never read by summary()/autoplot(); dropping it keeps the cache small.
  save_psid <- res_psid; save_psid$pscore.reg <- NULL
  save_qtt  <- res_qtt;  save_qtt$pscore.reg  <- NULL
  saveRDS(list(res_exp = res_exp, res_psid = save_psid, res_qtt = save_qtt), cache_file)
}


## -----------------------------------------------------------------------------
#| label: random-qte
#| eval: false
# res_exp <- unc_qte(
#   yname  = "re78",
#   dname  = "treat",
#   data   = lalonde.exp,
#   target = "qte",
#   probs  = seq(0.1, 0.9, 0.1),
#   biters = 100
# )
# summary(res_exp)


## -----------------------------------------------------------------------------
#| label: random-qte-output
#| echo: false
summary(res_exp)


## -----------------------------------------------------------------------------
#| label: random-qte-plot
#| fig-alt: "QTE curve under random assignment"
autoplot(res_exp, ylab = "QTE (earnings, 1978)")


## -----------------------------------------------------------------------------
#| label: obs-qte
#| eval: false
# xf <- ~ age + I(age^2) + education + black + hispanic + married + nodegree
# 
# res_psid <- unc_qte(
#   yname      = "re78",
#   dname      = "treat",
#   data       = lalonde.psid,
#   xformla    = xf,
#   est_method = "aipw",
#   target     = "qte",
#   probs      = seq(0.1, 0.9, 0.1),
#   biters     = 100
# )
# summary(res_psid)


## -----------------------------------------------------------------------------
#| label: obs-qte-output
#| echo: false
summary(res_psid)


## -----------------------------------------------------------------------------
#| label: obs-qte-plot
#| fig-alt: "QTE curve under unconfoundedness"
autoplot(res_psid, ylab = "QTE (earnings, 1978)")


## -----------------------------------------------------------------------------
#| label: qtt
#| eval: false
# res_qtt <- unc_qte(
#   yname      = "re78",
#   dname      = "treat",
#   data       = lalonde.psid,
#   xformla    = xf,
#   est_method = "aipw",
#   target     = "qtt",
#   probs      = seq(0.1, 0.9, 0.1),
#   biters     = 100
# )
# summary(res_qtt)


## -----------------------------------------------------------------------------
#| label: qtt-output
#| echo: false
summary(res_qtt)


## -----------------------------------------------------------------------------
#| label: qtt-plot
#| fig-alt: "QTT curve under unconfoundedness"
autoplot(res_qtt, ylab = "QTT (earnings, 1978)")


## -----------------------------------------------------------------------------
#| label: custom-plot
#| eval: false
# autoplot(res_qtt) +
#   ggplot2::labs(title = "QTT — Lalonde (observational)",
#                 subtitle = "AIPW with pre-treatment covariates")

