Measuring Economic Resilience and Recovery with ERRI

Anbukkani Perumal, Mrinmoy Ray, and Chiranjit Mazumder

2026-09-18

Purpose

Economic resilience is not a single observed variable. ERRI represents it as six complementary dimensions calculated relative to an estimated no-shock counterfactual. Let the observed outcome for unit \(i\) at time \(t\) be \(Y_{it}\) and its counterfactual be \(Y^{(0)}_{it}\). The scaled adverse gap is

\[ G_{it}=\frac{Y^{(0)}_{it}-Y_{it}}{s_i}, \]

where \(s_i\) is the pre-shock standard deviation, absolute mean, or one.

The package measures maximum adverse gap (depth), summed adverse gap (cumulative loss), time required to remain within a tolerance, strength of recovery, post-shock residual volatility relative to pre-shock volatility, and positive performance beyond the counterfactual after recovery.

Example

library(ERRI)
dat <- erri_example_data()
head(dat)
#>   region year income
#> 1  North 2010   82.0
#> 2  North 2011   84.3
#> 3  North 2012   85.5
#> 4  North 2013   88.4
#> 5  North 2014   90.1
#> 6  North 2015   92.8

The example contains three fictional regional income series. The shock begins in 2020.

fit <- erri(dat, time = "year", outcome = "income", unit = "region",
            shock_time = 2020, method = "trend", scale = "sd",
            epsilon = 0.25, consecutive = 2)
fit
#> Economic Resilience and Recovery Index (ERRI)
#> Counterfactual: trend | Scale: sd 
#> 
#>     unit shock_depth cumulative_loss recovery_time recovered stability_ratio
#>    North         2.4             4.6             3      TRUE              20
#>  Central         2.8            12.9             6     FALSE              16
#>    South         1.6             2.7             2      TRUE              19
#>  transformation ERRI
#>            0.15   65
#>            0.00   17
#>            0.13   85
plot(fit, type = "trajectory", unit = "North")
Observed and counterfactual paths with a prediction interval.
Observed and counterfactual paths with a prediction interval.
plot(fit, type = "index")
Comparison of composite ERRI estimates.
Comparison of composite ERRI estimates.

Uncertainty

Residual bootstrap intervals propagate uncertainty in the pre-shock counterfactual. At least several hundred replications are recommended for an empirical study.

boot <- erri_bootstrap(fit, R = 99, seed = 2026)
subset(boot$intervals, measure == "ERRI")
#>       unit measure estimate    lower    upper
#> 7    North    ERRI 65.14507 60.65423 81.55388
#> 14 Central    ERRI 16.66667  0.00000 16.66667
#> 21   South    ERRI 85.00570 76.14313 98.86119
rank_probability(boot)
#>             North Central      South
#> North   0.5000000     1.0 0.06060606
#> Central 0.0000000     0.5 0.00000000
#> South   0.9393939     1.0 0.50000000

Weight sensitivity

The default weights are equal. The following analysis draws random weights from the simplex and recalculates scores and rankings.

sens <- erri_sensitivity(fit, R = 250, seed = 2026)
aggregate(ERRI ~ unit, sens, function(x) c(mean = mean(x), sd = sd(x)))
#>      unit ERRI.mean   ERRI.sd
#> 1 Central 16.113964 13.904171
#> 2   North 65.881862 13.402322
#> 3   South 85.271982  9.087783

Interpretation and limitations

A higher score denotes stronger measured resilience under the selected model, scale, tolerance, and weights. The score is not automatically causal. A shock date must be substantively justified, and a trend, mean, or AR(1) counterfactual may be inadequate when other events affect the outcome. Report component estimates, bootstrap intervals, and weight sensitivity rather than only the composite index.

mirror server hosted at Truenetwork, Russian Federation.