Threshold-specific ordinal-logit primitive (MRM)
Source:R/mrm_primitives_ordinal.R
mrm_primitives_ordinal.RdR parity of morie.mrm_primitives.threshold_specific_ordinal().
Adapted from O'Connell & Laniyonu (2025) Race & Justice
15(3):428–453, where a Bayesian cumulative-logit model is fit with
race / gender coefficients allowed to VARY by cumulative threshold.
The empirically critical finding – bias concentrated at the
low->medium cutoff but not the medium->high cutoff – is invisible
to standard proportional-odds specifications.
Details
This R port is the frequentist analogue: for each cutpoint
\(k = 1, \ldots, K-1\) a separate binary logit is fit to the
indicator \(1\{Y \le k\}\), so the coefficient vector
\(\beta_k\) is unconstrained across thresholds. When
MASS is available we delegate to polr
for the proportional-odds (PO) baseline; otherwise the PO baseline
is fit by a stacked-IRLS approximation matching the Python
implementation. The threshold-specific fits always run via
glm with family = binomial("logit").
Standard threshold (proportional-odds, K levels, p covariates): $$P(Y \le k \mid X) = \mathrm{logit}^{-1}(\alpha_k - X \beta)$$
Threshold-specific extension (one coefficient vector per cutpoint): $$P(Y \le k \mid X) = \mathrm{logit}^{-1}(\alpha_k - X \beta_k)$$