The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Title: Plausible Bounds for Treatment Path Estimates
Version: 1.0.1
Description: Enhances dynamic effect plots as suggested in Freyaldenhoven and Hansen (2026) https://simonfreyaldenhoven.github.io/papers/Plausible_bounds.pdf. Data-driven smoothing delivers a smooth estimated path with potentially improved point estimation properties and confidence regions covering a surrogate that can be substantially tighter than conventional pointwise or uniform bands.
License: MIT + file LICENSE
Depends: R (≥ 3.5)
Imports: dplyr, ggplot2, Matrix, MASS, magrittr, cli
Suggests: knitr, rmarkdown, doParallel, foreach, testthat (≥ 3.0.0)
Config/testthat/edition: 3
Encoding: UTF-8
LazyData: true
RoxygenNote: 7.3.3
URL: https://github.com/SimonFreyaldenhoven/plausibounds
BugReports: https://github.com/SimonFreyaldenhoven/plausibounds/issues
VignetteBuilder: knitr
Config/Needs/website: quarto, rmarkdown
NeedsCompilation: no
Packaged: 2026-01-14 17:19:36 UTC; C1RAK01
Author: Simon Freyaldenhoven [aut, cph], Christian Hansen [aut, cph], Ryan Kobler [aut, cre, cph]
Maintainer: Ryan Kobler <kobleary@gmail.com>
Repository: CRAN
Date/Publication: 2026-01-20 10:30:02 UTC

plausibounds: Plausible Bounds for Treatment Path Estimates

Description

Enhances dynamic effect plots as suggested in Freyaldenhoven and Hansen (2026). Data-driven smoothing delivers a smooth estimated path with potentially improved point estimation properties and confidence regions covering a surrogate that can be substantially tighter than conventional pointwise or uniform bands.

Main Functions

Example Datasets

The package includes example datasets to demonstrate the functionality:


Pipe operator

Description

See magrittr::%>% for details.

Usage

lhs %>% rhs

Arguments

lhs

A value or the magrittr placeholder.

rhs

A function call using the magrittr semantics.

Value

The result of calling rhs(lhs).


Create Plot for Plausible Bounds

Description

This function creates a plot of plausible bounds from a plausible_bounds object. The plot displays plausible bounds as the main visualization, with optional pointwise and sup-t bounds overlays. Supports event study designs with pre-treatment periods.

Usage

create_plot(
  result,
  show_supt = TRUE,
  show_pointwise = TRUE,
  show_annotations = TRUE
)

Arguments

result

A plausible_bounds object returned by the plausible_bounds() function

show_supt

Whether to show sup-t bounds (default: TRUE)

show_pointwise

Whether to show pointwise bounds (default: TRUE)

show_annotations

Whether to show annotations with test statistics and ATE (default: TRUE)

Value

A ggplot2 object

Examples


# Example with bighump estimates and correlation between estimates
data(estimates_bighump)
data(var_bighump)
result_complex <- plausible_bounds(estimates_bighump[1:4], var_bighump[1:4, 1:4])
plot_complex <- create_plot(result_complex)


Sinusoidal Estimates with Moderate Correlation

Description

A dataset containing estimates with a curved sinusoidal pattern in the first 6 periods that then converges to zero for the remaining 30 periods. The effect is a smooth curved trajectory with a large dip before the treatment effect quickly returns to 0. Generated with moderate correlation (rho = 0.5).

Usage

estimates_bighump

Format

A numeric vector with 36 elements

Source

Generated from simulation with sinusoidal design and moderate correlation (rho = 0.5)

Examples

data(estimates_bighump)
data(var_bighump)
result <- plausible_bounds(estimates_bighump[1:4], var_bighump[1:4, 1:4])
create_plot(result)

Constant Estimates

Description

A dataset containing estimates from a simple constant design, no correlation across horizons.

Usage

estimates_constant

Format

A numeric vector with 12 elements

Source

Generated from simulation with constant design and no correlation across horizons

Examples

data(estimates_constant)
data(var_constant)
result <- plausible_bounds(estimates_constant[1:4], var_constant[1:4, 1:4])
create_plot(result)

Smooth Estimates from Freyaldenhoven and Hansen (2026)

Description

A dataset containing smooth treatment effect estimates that dip down and then converge to zero. The first 8 observations comprise the preperiods, the next 36 are post-period.

Usage

estimates_smooth

Format

A numeric vector with 44 elements (8 preperiods, 36 postperiods)

Source

Point estimates from Figure 1 of Freyaldenhoven and Hansen (2026)

Examples

data(estimates_smooth)
data(var_smooth)
result <- plausible_bounds(estimates_smooth[9:13], var_smooth[9:13, 9:13])
create_plot(result)

Calculate Plausible Bounds

Description

This function calculates the plausible bounds for a vector of estimates along with average treatment effect, Wald tests, and optional pointwise/sup-t bounds. Supports pre-treatment periods for event study designs.

Usage

plausible_bounds(
  estimates,
  var,
  alpha = 0.05,
  preperiods = 0,
  include_pointwise = TRUE,
  include_supt = TRUE,
  parallel = FALSE,
  n_cores = NULL
)

Arguments

estimates

A numeric vector or single-row/single-column matrix of point estimates. If preperiods > 0, the first preperiods elements are pre-treatment estimates, followed by post-treatment estimates.

var

The variance-covariance matrix of the estimates

alpha

Significance level (default: 0.05)

preperiods

Number of pre-treatment periods (default: 0). Period 0 is assumed to be normalized and not included in estimates.

include_pointwise

Whether to include pointwise bounds (default: TRUE)

include_supt

Whether to include sup-t bounds (default: TRUE)

parallel

Whether to use parallel processing for restricted bounds calculation (default: FALSE)

n_cores

Number of cores to use for parallel processing (default: NULL, which uses detectCores() - 1). Only used when parallel = TRUE.

Value

A list containing:

alpha

Significance level

preperiods

Number of pre-treatment periods

wald_test

List with post (and pre if preperiods > 0) Wald test results

restricted_bounds

Data frame with horizon, unrestr_est, restr_est, lower, upper

restricted_bounds_metadata

List with supt_critval, supt_b, degrees_of_freedom, K, lambda1, lambda2, restr_class, best_fit_model

avg_treatment_effect

List with estimate, se, lower, upper

pointwise_bounds

List with lower and upper vectors (if include_pointwise = TRUE)

supt_bounds

List with lower and upper vectors (if include_supt = TRUE)

Examples

# Example with constant estimates and no correlation (simple case)
data(estimates_constant)
data(var_constant)
pb <- plausible_bounds(estimates_constant[1:4], var_constant[1:4, 1:4])
print(pb)
summary(pb)



Print method for plausible_bounds objects

Description

Print method for plausible_bounds objects

Usage

## S3 method for class 'plausible_bounds'
print(x, ...)

Arguments

x

A plausible_bounds object

...

Additional arguments passed to print

Value

Invisibly returns a plausible_bounds object and displays summary of main results

Examples

# Example with constant estimates and no correlation (simple case)
data(estimates_constant)
data(var_constant)
pb <- plausible_bounds(estimates_constant[1:4], var_constant[1:4, 1:4])
print(pb)


Print method for summary.plausible_bounds objects

Description

Print method for summary.plausible_bounds objects

Usage

## S3 method for class 'summary.plausible_bounds'
print(x, ...)

Arguments

x

A summary.plausible_bounds object

...

Additional arguments passed to print

Value

Invisibly returns the input summary.plausible_bounds object and displays summary data.frame of restricted estimates and plausible bounds.

Examples

# Example with constant design and no correlation
data(estimates_constant)
data(var_constant)
pb <- plausible_bounds(estimates_constant[1:4], var_constant[1:4, 1:4])
pb_df <- summary(pb)
print(pb_df)


Summary method for plausible_bounds objects

Description

Summary method for plausible_bounds objects

Usage

## S3 method for class 'plausible_bounds'
summary(object, ...)

Arguments

object

A plausible_bounds object

...

Additional arguments passed to summary

Value

A data.frame containing the horizon, unrestricted estimates, restricted estimates, and plausible bounds

Examples

# Example with constant estimates and no correlation (simple case)
data(estimates_constant)
data(var_constant)
pb <- plausible_bounds(estimates_constant[1:4], var_constant[1:4, 1:4])
print(pb)
summary(pb)


Variance Matrix for Sinusoidal Estimates

Description

A variance matrix for the sinusoidal estimates with moderate correlation structure (rho = 0.5). This matrix has non-zero off-diagonal elements representing moderate correlation across time periods.

Usage

var_bighump

Format

A 36 x 36 matrix

Source

Generated from simulation with sinusoidal design and moderate correlation (rho = 0.5)

Examples

data(estimates_bighump)
data(var_bighump)
result <- plausible_bounds(estimates_bighump[1:4], var_bighump[1:4, 1:4])
create_plot(result)

Variance Matrix for Constant Estimates

Description

A variance matrix for the constant estimates. This is a diagonal matrix representing no correlation across time periods.

Usage

var_constant

Format

A 12 x 12 matrix

Source

Generated from simulation with constant design and no correlation across horizons.

Examples

data(estimates_constant)
data(var_constant)
result <- plausible_bounds(estimates_constant[1:4], var_constant[1:4, 1:4])
create_plot(result)

Variance Matrix for Smooth Estimates

Description

A variance matrix for the smooth estimates. This matrix captures the correlation structure of the estimates. The first 8 rows and 8 columns comprise the variance matrix for the 8 preperiods.

Usage

var_smooth

Format

A 44 x 44 matrix

Source

Variance Matrix from Figure 1 of Freyaldenhoven and Hansen (2026)

Examples

data(estimates_smooth)
data(var_smooth)
result <- plausible_bounds(estimates_smooth[9:13], var_smooth[9:13, 9:13])
create_plot(result)

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.