Home

Reconstruct individual patient data from published Kaplan–Meier curves

Updated 2026-09-25 · TrialCurve methods team

Short answer: you can recover a close approximation of the patient-level data behind a published Kaplan–Meier (KM) curve. To do so, you digitise the curve, read the numbers-at-risk table and run the Guyot et al. (2012) algorithm. It solves for the events and censorings that reproduce both the curve and the table. The resulting pseudo-IPD supports Cox models, parametric survival fits, network meta-analysis and MAIC.

TrialCurve does all of it from a single image. Claude Opus 5.5 reads the whole figure: every panel's axes, arm names, curves, numbers-at-risk table and printed statistics, zooming in wherever the full view is too small. Where pixel measurement of a panel agrees with that reading, the measured curve is used. Each arm is then reconstructed, and the result is checked against the statistics printed on the figure.

What you get back

How the reconstruction works

The Guyot algorithm treats the digitised curve as a series of step points and the at-risk table as fixed totals at the start of each interval. Within each interval it estimates how many patients were censored so that the implied number at risk at the next table time matches the published count. It assumes censoring is spread evenly within the interval. It then assigns events at each step so that the Kaplan–Meier estimate matches the curve's drop. The final interval uses the average censoring rate, or the total number of events if the paper reports it. See our explainer of the Guyot algorithm for the details.

How accurate is it?

When the at-risk table is available, reconstruction accuracy is limited mainly by how precisely the curve is digitised. On 80 held-out synthetic journal-style figures with known ground truth, the production engine put 93.6% of hazard ratios within 10% of the true value (88.5% within 5%), with a median error in median survival of 0.10 months. For comparison, a validation of manual digitisation plus Guyot found a mean HR error of 0.0094 (Saluja et al. 2019). Full methodology and failure modes are on the accuracy page.

When reconstruction is less reliable

Using pseudo-IPD downstream

Common uses include survival extrapolation for cost-effectiveness models (NICE DSU TSD 14, TSD 21), checking proportional hazards, network meta-analysis of time-to-event outcomes, and unanchored or anchored MAIC (TSD 18). The HTA guide covers how assessors view reconstructed data.

FAQ

Is reconstructed IPD the same as the trial's real IPD?

No. It is a pseudo-dataset that reproduces the published KM curve and at-risk table. Summary statistics derived from it (HR, medians, RMST) are typically very close to the published values, but individual rows are not real patients.

Do I need the numbers-at-risk table?

It is strongly recommended. Without it, the Guyot algorithm can only use the initial N (and total events if reported), and censoring patterns, especially in the tail, are much less certain.

Which software can read the output?

The CSV output (arm, time, event) loads directly into R (survival, flexsurv, survminer, multinma), Stata (stset/stcox), SAS (PROC PHREG/LIFETEST) and Python (lifelines).

Reconstruct IPD from your own figure. Upload a Kaplan–Meier plot and get curves, numbers at risk, pseudo-IPD, hazard ratios and a validation pack. Three figures a month are free.

Try the live demo Browse trial data API docs