Fixed the double DiD control set of the DiD case: with M >= 3 events a control cohort with an event that the target cohort does not have was used, which biased ATT^1. A control must now be not yet confounded by every such event
The DiD case of double DiD is now reported for the post-periods of the first event only, as the theorem states
Fixed the influence function of the double DiD weights: the weights are a signed pair and each period is normalized on its own
Fixed the control cohorts of double DiD when a first-stage cell is missing: both periods now normalize over the cohorts available at both
anticipation2 now moves the boundary of the direct case, and enters the not-yet-treated control cutoff of the first stage
Added validation of the confounding cohort columns: a missing value drops the unit with a warning, and a fractional value raises an error
Added a warning when no event-specific post-period effect is identified for any cohort
Fixed small-group variance understatement: the residual influence of each 2x2 group is inflated by the Kish effective size, sqrt(ess/(ess-1)). Without the inflation the plug-in variance of a group of m units is deflated by (m-1)/m, which under-covers when cells are small (for example the cross-cohorts of double DiD)
A 2x2 cell with fewer than 2 effective units in a group is now skipped with a warning: its residual is zero, so its variance is not estimable and the standard error understates the truth
Extended double DiD to support M>2 treatment events: cohortvar2 now accepts a character vector of length M-1 (e.g. c("G2", "G3") for three events)
Added add_base_period parameter: inserts a zero-ATT placeholder at the base period in result_type = "dynamic" results
Added experimental options only_est_min and only_est_max in exper: restrict estimation to a specific event-time range in dynamic mode, skipping g-t pairs outside the window
Improved input validation: errors on negative anticipation/anticipation2, time-varying weights, and balanced_event_time exceeding data range
Restored parglm dependency for multi-threaded propensity score estimation; thread count automatically matched to getDTthreads() (or 1 when parallel = TRUE)
Various bug fixes and robustness improvements for double DiD aggregation and weight handling
parallel, parallization for unix systems, useful if the number of g-t is large.full, return full result such as influence function, aggregate scheme, and suchmin/max_dynamic, custom_scheme to experimental features0.9.9.1 (2024/9/13): fix a bug that affects not-yet control with max treated group != max time
Some BREAKING change is introduced in this update.
cband and significance level alpha, confidence interval are now provided in result as column att_ciub and att_cilbfiltervar, max_control_cohort_diff, min_control_cohort_diff are moved into the experimental features. See the above section for the explanation.max_dynamic and min_dynamic as experimental features.gt, some internal interface overhaul0.9.3.1 (2024/5/24): fix the bug with univar == clustervar (TODO: address problems with name-changing and collision).
0.9.3.2 (2024/7/17): fix group_time result when using control_type = "notyet" and make the base period in plots adapt to anticipation.
0.9.3.3 (2024/7/22): fix anticipation out of bound problem, more permanent solution for group_time target problem