Asks whether exposure to the shocks predicts a *pre-period* outcome (or pre-period change) — a differential pre-trend would threaten identification. This is distinct from [ssb_placebo()], which runs the *full IV* on a placebo outcome; pre-trends ask whether exposure predicts the outcome *before* the shocks, placebo asks whether the design moves an outcome it should not.
Arguments
- design
An [ssb_design()] object.
- pre_y
Column name of the pre-period outcome (or pre-period change).
- level
Confidence level.
- shock_cluster
Optional grouping of the shocks (a column name in the shocks table, or a vector of length equal to the number of shock-cells) for a cluster-robust shock-level SE on the shift route.
Value
A list (class `ssb_pretrend`) with the headline `coef`, `se`, `p`, `conf.low`/`conf.high` (route-appropriate, see Details), the `route`, a `headline` label and `level_used` (`"shock"` or `"location"`); plus the location-level reduced form (`coef_loc`, `se_ehw`, `se_cluster`, `p_ehw`) and the shock-level regression (`coef_shock`, `se_shock`, `p_shock`, `n_shocks`) regardless of route.
Details
The regression that is run follows the identification route of the design:
**share route** (Goldsmith-Pinkham, Sorkin & Swift): the location-level reduced form of the pre-period outcome on the constructed instrument (controls partialled out), with the design's cluster-robust SE if a `cluster` variable is set and EHW otherwise — conventional inference is appropriate here.
**shift route** (Borusyak, Hull & Jaravel): the **shock-level** regression of the exposure-weighted average of the (residualised) pre-period outcome, \(\bar y^{pre}_n\), on the shocks residualised on the shock-level controls (a constant, plus period fixed effects in panels), with exposure weights and HC1 (or shock-clustered) standard errors — the balance/pre-trend regression of BHJ, i.e. what `reg` reports after `ssaggregate`. A location-level regression on the instrument with EHW / cluster SEs would over-reject on this route (Adao, Kolesar & Morales 2019); its coefficient is still returned (`coef_loc`, `se_ehw`, `se_cluster`) for reference.
Note the two coefficients live on different scales (per unit of the instrument vs. per unit of the shock); it is the \(t\)/\(p\) that answers the pre-trend question either way.
Examples
sim <- ssb_simulate(n_loc = 80, n_sec = 10, seed = 1)
sim$data$y_pre <- stats::rnorm(nrow(sim$data)) # a pre-period outcome
d <- ssb_design(sim$data, sim$shares, sim$shocks, exogenous = "shift")
ssb_pretrend(d, pre_y = "y_pre") # shift route: shock-level regression
#> <ssBartik pre-trend test>
#> pre-period outcome : y_pre
#> route : exogenous SHIFT -> shock-level regression (BHJ / ssaggregate)
#> of the exposure-weighted pre-period outcome on the residualised shocks
#> coef 0.0161 se 0.0094 [shock-level, exposure-robust (HC1), 10 shocks] p = 0.087 [-0.002, 0.034]
#> (location-level reduced form on the instrument: coef 0.0988, EHW se 0.2049;
#> conventional SEs over-reject on this route -- reference only)
#> coefficient near 0 => no differential pre-trend by exposure