Endpoints, derived
and adjudicated
RECIST from tumor measurements, two readers, two named censoring conventions.
Two rules, and
the answer key
RECIST 1.1 derived from one lesion set. Two independent readers and an adjudicator. Two named censoring conventions that disagree on the same subjects, and a ground-truth file that says, per subject and per convention, what actually happened.
Here are two defensible rules. Here is where they diverge. Here is the answer key. That is a conversation no one can have on real data before the study exists.
One timepoint · SUBJ-0142 · STUDY-A
Investigator · RSEVAL = INVESTIGATORSD
Reader 1 · RSEVALID = READER 1PD
Reader 2 · RSEVALID = READER 2SD
Adjudicator · RSACPTFL = Y, the accepted readPD
The endpoint you
could not rehearse
Synthetic data is not a convenience here. Before the trial is real, it is the only oncology efficacy data anyone can work with.
Efficacy pipelines are tested at lock
Nobody can test an oncology PFS derivation on real data before the study exists. So the missed scan, the unconfirmed progression, the new lesion after a partial response and the disagreeing reader are all exercised for the first time when the real data arrives.
Central review is noisy by construction
Two readers disagree for medically justifiable reasons, an adjudicator breaks the tie, and a statistical programr has had no way to rehearse any of that ahead of the first read.
Response is derived, not drawn
An earlier version drew response per subject while the lesions shrank independently, so the two could contradict each other. The layer was rebuilt so that the endpoint is derived from the measurements.
One stage calls a model;
the rest is Python
The assessment schedule is extracted. Everything after it is deterministic: the lesions, the RECIST rule, the readers, the censoring, the answer key and the Kaplan–Meier estimate. The same seed reproduces the same bytes, answer key included.
Response derived, not drawn
RS comes from the TU and TR measurements through a pure RECIST 1.1 rule: no random draw, no clock, no model. A partial response is one because the sum of diameters says so.
The schedule drives generation
The schedule-of-events matrix is extracted onto the design and every assessment is generated from it, so a protocol assessment reaches an SDTM variable or the report says why not.
Cycles and windows
Dosing as cycles; visit windows as windows rather than nominal days, with a report of what fell outside them.
The chain, asserted
Endpoint measure → test code → CRF item → SDTM variable is asserted rather than inferred; eligibility criteria become screening fields.
Two censoring conventions
recist11-pfs-v1 censors at subsequent therapy; the treatment-policy convention follows the subject. End of treatment is not end of follow-up, and an informative exit names its own censoring.
Two readers, one adjudicator
Three measurement series over one lesion set. The adjudicator reads only where exactly one reader called progression, and the accepted read carries RSACPTFL.
An endpoint says which read
A primary endpoint by central review is distinguished from its own investigator sensitivity analysis, in the traceability spec itself.
Enrichment never overwrites
A generator’s decision is never overwritten by a later stage; enrichment only fills blanks.
One lesion set,
four opinions
Every read shares the lesion set the protocol’s schedule produced. A missed scan is missed for everyone. Each reader adds their own measurement error and makes their own call. The adjudicator reads only where exactly one reader called progression, sides with one of them, and measures nothing.
- ScheduleThe assessment matrix, extracted from the protocol and driving every visit.Model
- LesionsTarget and non-target lesions identified, then measured at each visit.Engine
- ResponseRECIST 1.1 over the sum of diameters: a pure rule, no draw.Rules
- ReadsTwo readers, one adjudicator, one accepted read per timepoint.Engine
- CensoringDeath, subsequent therapy, withdrawal, loss to follow-up, under two conventions.Rules
- Answer keyOne row per subject × convention × evaluator, pinned by a golden hash.Engine
- Discordance is a knob, and it is measuredThe elected discordance is configured; the achieved discordance is measured per run and shown beside it.
- Published figures are not targetsA published discordance pair is stated on screen as not reproduced, never as a target hit.
- Four evaluators in the answer keyThe estimate under the accepted read and under the investigator can be compared on the same subjects.
From database lock
to design
| Who | Today | With Endpoint Studio |
|---|---|---|
| Biostatistician | Writes the censoring convention into the SAP and first sees its consequence on real data at the interim, when changing it is a protocol amendment. | Runs both conventions on a seeded dataset whose truth is known, reads the divergence subject by subject, and picks the estimand with the evidence beside it. |
| Statistical programr | Builds PFS, ORR and DoR derivations against a hand-edited copy of an old study; the hard cases are exercised at lock. | Builds against RS, TR and TU that carry every one of those cases by construction, and checks the result against the answer key on every run. |
| Imaging CRO or central-review vendor | Tests the adjudication workflow on the first real reads, with the charter rule written in prose. | Configures the discordance and the adjudication split, sees the achieved rate per run, and exercises the charter rule on data that carries the accepted flag. |
| Data management | Validates the oncology configuration on a corpus nobody can vouch for, and onboards staff on the same. | Validates and onboards on a reproducible corpus with a traceability chain from the protocol sentence to the column. |
Two right answers
that disagree
Two conventions that are both correct, encoding different ICH E9(R1) estimands, which disagree on generated data, and an answer key that says what the truth was for every subject under each.
Truth by construction
The answer key is written by the generator that made the data. A derivation that disagrees with it is wrong.
The disclaimer travels with the figure
“PFS differs for N of M subjects” is rendered with the assumptions report’s own sentence beside it, read from the artifact.
A knob is kept in one place
Discordance, censoring and the adjudication rule are each declared once and read everywhere.
Reproducible, pinned
The answer key has its own golden hash. A change to it is a deliberate re-baseline, never a side effect.
What it does not do
Stated, not buried.
- iRECIST and ctDNA or MRD trajectories are not builtEach carries a known-limitation entry in the assumptions report with its stated analysis impact.
- Simulation speaks to capture, not to the worldA synthetic dataset can show that a derivation behaves; it can never argue clinical efficacy, and the Reviews authority matrix forbids it from trying.
- Readers do not choose their own targetsThere is no reader-specific target selection or new-lesion discovery; the boundary is disclosed in the assumptions report of every central-review run.
- No screen derives a numberThe engine emits time-to-event and the event flag and computes the Kaplan–Meier estimate once, in Python.