Nothing
## -----------------------------------------------------------------------------
#| label: setup
#| message: false
library(qte)
library(ggplot2)
library(ptetools)
set.seed(42)
data(mpdta, package = "did")
## -----------------------------------------------------------------------------
#| 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/staggered-adoption-results.rds and re-render to regenerate
# after a code change (see CLAUDE.md).
cache_file <- "precomputed/staggered-adoption-results.rds"
use_cache <- file.exists(cache_file)
if (use_cache) {
cached <- readRDS(cache_file)
res_qtt <- cached$res_qtt
res_att <- cached$res_att
res_cic <- cached$res_cic
res_qdid <- cached$res_qdid
res_pqtt <- cached$res_pqtt
res_ddid <- cached$res_ddid
res_mdid <- cached$res_mdid
res_lou <- cached$res_lou
} else {
res_qtt <- cic(
yname = "lemp",
gname = "first.treat",
tname = "year",
idname = "countyreal",
data = mpdta,
biters = 100,
gt_type = "qtt",
probs = seq(0.1, 0.9, by = 0.1)
)
res_att <- cic(
yname = "lemp",
gname = "first.treat",
tname = "year",
idname = "countyreal",
data = mpdta,
biters = 100,
gt_type = "att"
)
res_cic <- cic(
yname = "lemp", gname = "first.treat", tname = "year",
idname = "countyreal", data = mpdta,
gt_type = "qtt", probs = 0.5, biters = 100
)
res_qdid <- qdid(
yname = "lemp", gname = "first.treat", tname = "year",
idname = "countyreal", data = mpdta,
gt_type = "qtt", probs = 0.5, biters = 100
)
res_pqtt <- panel_qtt(
yname = "lemp", gname = "first.treat", tname = "year",
idname = "countyreal", data = mpdta,
gt_type = "qtt", probs = 0.5, biters = 100
)
res_ddid <- ddid(
yname = "lemp", gname = "first.treat", tname = "year",
idname = "countyreal", data = mpdta,
gt_type = "qtt", probs = 0.5, biters = 100
)
res_mdid <- mdid(
yname = "lemp", gname = "first.treat", tname = "year",
idname = "countyreal", data = mpdta,
gt_type = "qtt", probs = 0.5, biters = 100
)
res_lou <- lou_qtt(
yname = "lemp", gname = "first.treat", tname = "year",
idname = "countyreal", data = mpdta,
gt_type = "qtt", probs = 0.5, biters = 100
)
saveRDS(
list(res_qtt = res_qtt, res_att = res_att, res_cic = res_cic,
res_qdid = res_qdid, res_pqtt = res_pqtt, res_ddid = res_ddid,
res_mdid = res_mdid, res_lou = res_lou),
cache_file
)
}
## -----------------------------------------------------------------------------
#| label: data-summary
table(mpdta$first.treat)
## -----------------------------------------------------------------------------
#| label: qtt-estimate
#| eval: false
# res_qtt <- cic(
# yname = "lemp",
# gname = "first.treat",
# tname = "year",
# idname = "countyreal",
# data = mpdta,
# biters = 100,
# gt_type = "qtt",
# probs = seq(0.1, 0.9, by = 0.1)
# )
## -----------------------------------------------------------------------------
#| label: qtt-summary
summary(res_qtt)
## -----------------------------------------------------------------------------
#| label: qtt-plot
#| fig-alt: "Overall QTT curve from cic()"
autoplot(res_qtt)
## -----------------------------------------------------------------------------
#| label: qtt-dynamic-single
#| fig-alt: "Event-study plot for the median QTT"
autoplot(res_qtt, type = "dynamic", plot_probs = 0.5)
## -----------------------------------------------------------------------------
#| label: qtt-dynamic-multi
#| fig-alt: "Event-study plot for multiple quantiles of the QTT"
autoplot(res_qtt, type = "dynamic", plot_probs = c(0.1, 0.5, 0.9))
## -----------------------------------------------------------------------------
#| label: att-estimate
#| eval: false
# res_att <- cic(
# yname = "lemp",
# gname = "first.treat",
# tname = "year",
# idname = "countyreal",
# data = mpdta,
# biters = 100,
# gt_type = "att"
# )
# summary(res_att)
## -----------------------------------------------------------------------------
#| label: att-estimate-output
#| echo: false
summary(res_att)
## -----------------------------------------------------------------------------
#| label: att-event-study
#| fig-alt: "Event-study plot of ATT estimates by event time"
autoplot(res_att, type = "dynamic")
## -----------------------------------------------------------------------------
#| label: compare-estimators
#| eval: false
# res_cic <- cic(
# yname = "lemp", gname = "first.treat", tname = "year",
# idname = "countyreal", data = mpdta,
# gt_type = "qtt", probs = 0.5, biters = 100
# )
#
# res_qdid <- qdid(
# yname = "lemp", gname = "first.treat", tname = "year",
# idname = "countyreal", data = mpdta,
# gt_type = "qtt", probs = 0.5, biters = 100
# )
#
# res_pqtt <- panel_qtt(
# yname = "lemp", gname = "first.treat", tname = "year",
# idname = "countyreal", data = mpdta,
# gt_type = "qtt", probs = 0.5, biters = 100
# )
#
# res_ddid <- ddid(
# yname = "lemp", gname = "first.treat", tname = "year",
# idname = "countyreal", data = mpdta,
# gt_type = "qtt", probs = 0.5, biters = 100
# )
#
# res_mdid <- mdid(
# yname = "lemp", gname = "first.treat", tname = "year",
# idname = "countyreal", data = mpdta,
# gt_type = "qtt", probs = 0.5, biters = 100
# )
#
# res_lou <- lou_qtt(
# yname = "lemp", gname = "first.treat", tname = "year",
# idname = "countyreal", data = mpdta,
# gt_type = "qtt", probs = 0.5, biters = 100
# )
## -----------------------------------------------------------------------------
#| label: compare-table
median_qtt <- function(res, label) {
row <- res$overall[res$overall$probs == 0.5, ]
data.frame(estimator = label, qtt = round(row$qtt, 4), se = round(row$se, 4))
}
do.call(rbind, list(
median_qtt(res_cic, "cic()"),
median_qtt(res_qdid, "qdid()"),
median_qtt(res_pqtt, "panel_qtt()"),
median_qtt(res_ddid, "ddid()"),
median_qtt(res_mdid, "mdid()"),
median_qtt(res_lou, "lou_qtt()")
))
## -----------------------------------------------------------------------------
#| label: rcs-example
#| eval: false
# res_rcs <- cic(
# yname = "lemp",
# gname = "first.treat",
# tname = "year",
# data = mpdta, # no idname
# panel = FALSE,
# biters = 100
# )
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.