
RobustFlow is an R package for auditing temporal drift, subgroup disparities, and robustness in longitudinal decision systems. It implements three new metrics and provides an interactive Shiny application for exploratory analysis and reproducible reporting.
Researchers who study repeated decisions — risk classifications, tracking placements, intervention assignments — face three questions that existing tools do not address together:
RobustFlow answers all three in a single, coherent workflow.
| Metric | Symbol | Definition |
|---|---|---|
| Drift Intensity Index | DII | Frobenius norm of consecutive transition matrix differences |
| Bias Amplification Index | BAI | Gap_T − Gap_1 (change in disparity from first to last wave) |
| Temporal Fragility Index | TFI | Minimum hidden-bias attenuation to nullify a longitudinal trend |
Install the development version from GitHub:
# install.packages("pak")
pak::pak("causalfragility-lab/RobustFlow")Once on CRAN:
install.packages("RobustFlow")library(RobustFlow)
# 1. Validate panel data
validated <- validate_panel_data(
data = my_data,
id = "child_id",
time = "wave",
decision = "risk_math",
group = "ses_group"
)
# 2. Build decision paths
paths <- build_paths(
data = validated$data,
id = "child_id",
time = "wave",
decision = "risk_math"
)
paths$path_counts # frequency table
paths$transition_matrix # pooled transition matrix
paths$path_entropy # Shannon entropy
# 3. Drift Intensity Index (DII)
drift <- compute_drift(validated$data, "child_id", "wave", "risk_math")
drift$summary # DII per wave
drift$mean_dii # mean DII across all periods
# 4. Group gaps and Bias Amplification Index (BAI)
gaps <- compute_group_gaps(validated$data, "wave", "risk_math", "ses_group")
bai <- compute_bai(gaps$gap)
bai$bai # e.g. 0.12
bai$direction # "amplification"
# 5. Temporal Fragility Index (TFI)
tfi <- compute_tfi_simple(drift$summary$DII[!is.na(drift$summary$DII)])
tfi$tfi # minimum attenuation to nullify trend
# 6. Launch the interactive Shiny app
run_app()run_app() opens a browser-based interface with seven
tabs:
| Tab | Content |
|---|---|
| Data | Upload (CSV/RDS), variable mapping, balance diagnostics, missingness |
| Paths | Path bar chart, frequency table, transition matrix |
| Drift | Prevalence over time, DII trend plot, drift summary table |
| Disparities | Group trajectories, gap plot, BAI summary |
| Robustness | TFI value, sensitivity curve, robustness summary |
| Intervention | Highest-risk transitions, disparity-generating steps |
| Report | HTML report download, CSV bundle, reproducible R script |
| Function | Purpose |
|---|---|
validate_panel_data() |
Validate and prepare longitudinal panel data |
build_paths() |
Construct individual decision paths and transition matrix |
compute_transition_matrix_all() |
Pooled transition matrix across all individuals |
compute_drift() |
Compute the Drift Intensity Index (DII) |
compute_group_gaps() |
Group-specific trajectories and disparity gaps |
compute_bai() |
Compute the Bias Amplification Index (BAI) |
compute_tfi_simple() |
Compute the Temporal Fragility Index (TFI) |
generate_r_script() |
Export a self-contained reproducible R script |
run_app() |
Launch the interactive Shiny application |
The package vignette demonstrates a simulated longitudinal study of mathematics risk status across five elementary school waves for 200 children, with three SES groups. This mimics the structure of the Early Childhood Longitudinal Study, Kindergarten Class of 2010–11 (ECLS-K:2011).
vignette("introduction", package = "RobustFlow")If you use RobustFlow in published research, please cite:
@Manual{RobustFlow2026,
title = {{RobustFlow}: Robustness and Drift Auditing for Longitudinal
Decision Systems},
author = {Subir Hait},
year = {2026},
note = {R package version 0.1.0},
url = {https://github.com/causalfragility-lab/RobustFlow}
}Bug reports and feature requests are welcome at
https://github.com/causalfragility-lab/RobustFlow/issues
GPL (>= 3)