Replication of O'Connell & Laniyonu (2025) — CSC actuarial-risk disparity
Source:R/laniyonu_actuarial_risk_disparity.R
morie_laniyonu_actuarial_risk_disparity.RdR port of morie.laniyonu.actuarial_risk_disparity. Audits
the Correctional Service of Canada's four ordinal risk instruments
(Static, DFIA-R Dynamic, Offender Security Level, Reintegration
Potential) and the two binary downstream outcomes (parole granted;
institutional housing level) for race x gender bias.
Pass one of the four ordinal risk scores ("static",
"dynamic", "osl", "reintegration") to run the
Stage 1 threshold-specific ordinal logit; pass "parole" or
"housing" to run the Stage 2 score-net-residual binary logit.
Usage
morie_laniyonu_actuarial_risk_disparity(
df,
outcome,
race_cols,
gender_col = "gender",
score_col = NULL,
control_cols = NULL,
ordinal_levels = c("low", "medium", "high"),
outcome_col = NULL,
split_by_gender = TRUE,
bootstrap_replicates = 200L,
random_state = 20260513L
)Arguments
- df
Sentence-level (one row per sentence) CSC microdata.
- outcome
One of
"static","dynamic","osl","reintegration","parole","housing".- race_cols
Character vector of 0/1 race indicator columns (White is the implicit reference; pass non-reference levels).
- gender_col
Categorical gender column.
- score_col
Required when
outcomeis"parole"or"housing"; the actuarial score column name (e.g."reintegration_score_numeric"for parole).- control_cols
Optional additional control columns (age, priors, sentence length, etc.). Pre-dummy any categoricals.
- ordinal_levels
Level ordering for ordinal outcomes (default
c("low", "medium", "high")).- outcome_col
Optional override for the default column name.
- split_by_gender
If
TRUE(default), stratifies bygender_col; ifFALSE, folds one-hot gender into the design.- bootstrap_replicates
Stage 2 only; bootstrap reps for residual race-coefficient SEs.
- random_state
Seed for bootstrap.
Value
A named list of class morie_laniyonu_ard_result
carrying the per-stratum coefficients and a multi-paragraph
interpretation string.
A named list of class morie_laniyonu_ard_result.
Details
Two empirical stages match the paper:
Stage 1 (ordinal scores): threshold-specific cumulative-logit, fit as two separate binary logits at the low->medium and medium->high cutoffs, plus a proportional-odds LR test. The headline pattern is much larger |beta| at the low->medium cut than at medium->high.
Stage 2 (binary outcomes): the score-net-residual audit - logistic regression of outcome on actuarial score + race indicators (+ controls). A non-zero residual race coefficient is the disparate-treatment signal.
Caveat surfaced via warning() on every call (Goel et al. 2021):
a non-zero residual race coefficient is evidence of OUTPUT disparity,
not PREDICTIVE-VALIDITY disparity. The two are conceptually
distinct; the paper's disparate-treatment claim rests on the former.
References
O'Connell, C., & Laniyonu, A. (2025). Race, gender, and risk assessments in Canadian federal prison. Race & Justice, 15(3), 428-453.
Goel, S., Shroff, R., Skeem, J., & Slobogin, C. (2021). The accuracy, equity, and jurisprudence of criminal risk assessment. In Research Handbook on Big Data Law (pp. 9-28).