run_benchmark
run_benchmark(
result,
*,
condition_col='condition',
control='HC',
dataset_col=None,
age_col='age',
alpha=0.05,
)The AA1 and AA2 tests, and the score that combines them.
AA2 – for a dataset with controls: is the condition group’s age acceleration higher than its own controls’? One-sided Mann-Whitney, BH corrected across datasets.
AA1 – for a dataset without controls: is the condition group’s acceleration above zero? One-sided Wilcoxon signed-rank.
MedAE and MedE – median absolute error and median signed error against chronological age, on healthy controls only. MedE is the bias, and it discounts the AA1 credit in the total:
.. code-block:: text
total = AA2 + AA1 * (1 - max(0, MedE) / MedAE)
Without that discount a clock that simply over-predicts everybody sweeps AA1, because every group looks accelerated when the baseline is wrong. This is the correction ComputAgeBench introduced and it is the reason the benchmark ranks differently from a plain “does it separate cases” tally.
Median absolute error against chronological age is reported but never ranked on. A perfect chronological oracle would score zero here and be useless – it would have no age acceleration to detect anything with.