Compute the additive feasibility index (Efron or Morris)
Source:R/layer2-diagnostics.R
feasibility_index.RdCompute one of two additive feasibility statistics built on the per-site shrinkage \(S_j = \sigma_\tau^2 / (\sigma_\tau^2 + \widehat{se}_j^2)\): the Efron form \(\sum_{j=1}^{J} S_j\) (total effective information; default) or the Morris form \(\sum_{j=1}^{J} (1 - S_j)\) (total residual variation). Group A diagnostic (top-of-funnel feasibility — Dr. Chen's question 1: "Is there enough effective site-level information for partial pooling to do real work?"). Run this before committing a long simulation to disk.
Usage
feasibility_index(
se2_j,
sigma_tau = NULL,
kind = c("efron", "morris"),
warn = TRUE
)Arguments
- se2_j
A positive numeric \(\widehat{se}_j^2\) vector, or a
multisitedgp_dataobject whosese2_jcolumn will be used.- sigma_tau
Numeric scalar (\(\ge 0\)). Between-site SD. Required when
se2_jis numeric; optional whense2_jis a data object (auto-read from the attached design whenNULL). DefaultNULL.- kind
Character. Feasibility convention.
"efron"(default) returns \(\sum_j S_j\);"morris"returns \(\sum_j (1 - S_j)\).- warn
Logical. If
TRUE(default), emit a warning when the Efron statistic lands in the FAIL band defined bydefault_thresholds()$feasibility_min. Ignored forkind = "morris".
Details
Two conventions. kind = "efron" returns \(\sum_j S_j\),
interpretable as "the equivalent number of perfectly-informative
sites": a design with \(J = 50\) and \(\sum_j S_j = 8\) has the
effective information of about eight noise-free sites.
kind = "morris" returns \(\sum_j (1 - S_j)\), the
residual-variation form used in Morris-style empirical-Bayes
diagnostics. The two are linked by
\(\sum_j S_j + \sum_j (1 - S_j) = J\).
Reading guide. The canonical quality gate is the Efron form
\(\sum_j S_j \ge 5\) (see
default_thresholds()$feasibility_min = 5.0). Designs that fall
below this threshold are unlikely to support partial-pooling
estimators well — heterogeneity cannot be reliably recovered from
the available site-level information. With warn = TRUE (default),
the function emits a warning when the Efron statistic crosses into
the FAIL band.
Method dispatch. When se2_j is a multisitedgp_data
object, sigma_tau is auto-read from
attr(se2_j, "design")$sigma_tau if not supplied; the function then
operates on se2_j$se2_j. When se2_j is a bare numeric vector,
sigma_tau is required.
For how feasibility interacts with the other Group A/B/C/D gates see the A3 · Diagnostics in practice vignette.
References
Lee, J., Che, J., Rabe-Hesketh, S., Feller, A., & Miratrix, L. (2025). Improving the estimation of site-specific effects and their distribution in multisite trials. Journal of Educational and Behavioral Statistics, 50(5), 731–764. doi:10.3102/10769986241254286 .
See also
compute_shrinkage for the per-site \(S_j\) the
index sums;
informativeness for the geometric-mean Group A
companion;
mean_shrinkage for the Group D mean of \(S_j\);
default_thresholds for the feasibility_min gate;
scenario_audit for the audit pipeline;
the A3 ·
Diagnostics in practice vignette.
Other family-diagnostics:
bhattacharyya_coef(),
compute_I(),
compute_kappa(),
compute_shrinkage(),
default_thresholds(),
heterogeneity_ratio(),
informativeness(),
ks_distance(),
mean_shrinkage(),
realized_rank_corr(),
realized_rank_corr_marginal(),
scenario_audit()
Examples
dat <- sim_multisite(J = 10L, seed = 1L)
# Efron form (default): sum of S_j; equivalent number of perfectly
# informative sites.
feasibility_index(dat, warn = FALSE)
#> [1] 3.453587
# Morris form: sum of (1 - S_j); total residual variation.
feasibility_index(dat, kind = "morris", warn = FALSE)
#> [1] 6.546413
# The two conventions sum to J.
feasibility_index(dat, kind = "efron", warn = FALSE) +
feasibility_index(dat, kind = "morris", warn = FALSE)
#> [1] 10
# Numeric path: pass se2_j and sigma_tau directly.
feasibility_index(dat$se2_j, sigma_tau = 0.20, warn = FALSE)
#> [1] 3.453587