← Methods repository
concept

Left Truncation and Delayed Entry

A survival-data structure in which a person is included only if they are still event-free and observable at a later entry time, so they must enter the risk set at that delayed-entry time rather than at the origin of the analysis clock.

Inferential_Statisticsleft-truncationdelayed-entrysurvival-analysisrisk-setstart-stopprevalent-cohortregistryexternal-control
Methods reference only. Use primary source citations and local policy before applying this in a study protocol, regulatory submission, payer dossier, or clinical decision.

In plain language

Left truncation means you only see people who made it long enough to enter your dataset. If a registry starts watching patients two years after diagnosis, people who died in the first two years are missing, so the registry patients should not be counted as if they were at risk from diagnosis day. In software, this means using start-stop survival time: a person enters the risk set when they become observable and leaves at event or censoring.

Left truncation

, also called delayed entry, is selection on having survived or remained event-free long enough to be observed. The key fact is not that early data are missing; it is that people who had the event before entry are absent from the dataset entirely. In survival analysis, a left-truncated subject should not contribute to the risk set before their entry time. They are known to have survived to that entry time, and pretending they were at risk from time zero gives them immortal event-free time they could not have failed during and that unobserved early failures never had the chance to contribute.

Left truncation is frequently confused with left censoring and right censoring. Right censoring means a subject was followed and then observation ended before the event; the event time is known only to exceed the censoring time. Left censoring means the event happened before observation but the exact time is unknown. Left truncation means the subject would not be in the dataset at all unless the event time exceeded the entry time. In RWE, this commonly appears in disease registries, biobanks, external-control cohorts, prevalent-user drug studies, EHR cohorts that begin after disease onset, and claims extracts that require a clean observable period before index.

Why it matters operationally

A standard Kaplan-Meier or Cox model with only (time, event) assumes every included subject was at risk from the origin. That is wrong for delayed-entry data. The correct risk-set representation is (entry_time, exit_time, event). A person diagnosed in 2020 who enters a registry in 2022 contributes no information to the 2020-2021 risk sets; they only contribute after 2022. If the event is death, progression, pregnancy loss, treatment failure, or treatment discontinuation, excluding people who failed before registry entry enriches the observed cohort for survivors and can overestimate survival or distort covariate effects.

RWE mechanisms

Prevalent-user drug cohorts select people who tolerated and survived earlier treatment long enough to remain users at database entry. Oncology real-world progression studies often include patients only once they reach an abstracting site or molecular test; rapid early progressors may be missing. Biobank or registry studies enroll living volunteers after disease onset, excluding those who died before enrollment. Claims studies can create delayed entry by requiring 12 months of continuous enrollment before index: people who disenrolled or died during that clean lookback are not eligible to appear. That requirement is often necessary for exposure and covariate observability, but analysts must recognize the target population becomes people surviving and remaining observable through the lookback.

Pros, cons, and trade-offs

Proper delayed-entry models preserve valid risk sets and prevent survivor selection from being mistaken for low early event risk. The cost is that the estimand is conditional on survival and observability to the entry time; no model can recover the outcomes of people structurally absent before data capture without additional assumptions or external data. New-user designs avoid much prevalent-user left truncation by anchoring at initiation, but they still condition on surviving any required lookback. Prevalent-cohort designs may be unavoidable for rare diseases or mature registries; then left-truncation-aware survival analysis is required and the entry process must be described as part of the estimand.

When to use

Use delayed-entry survival syntax whenever subjects have different entry times on the analysis time scale and could not have been observed if they failed before entry. Examples are age-as-time-scale cohorts enrolled at different ages, disease-duration analyses that enroll patients after diagnosis, registries with delayed reporting, external controls built from historical EHR or chart abstraction, prevalent-user pharmacoepidemiology cohorts, and any analysis where the origin is diagnosis, birth, treatment start, or eligibility but observation begins later.

When NOT to use — and when it is actively misleading

Do not call every lookback requirement left truncation on the analysis scale; if time zero is first observed treatment initiation after a clean washout, the patient enters at t0 by design, and the lookback defines observability rather than a delayed entry after t0. Do not use delayed-entry syntax to repair immortal time created by exposure classification after follow-up start; fix the time-zero design first. Do not ignore dependent left truncation: if entry time depends on latent severity or access to care, standard delayed-entry models that assume quasi-independence between entry and event time may still be biased. Do not report a KM curve from diagnosis using only registry entrants if early deaths before registry entry are absent and not accounted for.

Data-source operational depth

- Claims: Continuous-enrollment requirements create an observable survivor cohort. If the analysis time scale is time since treatment initiation observed in claims, entry is usually t0. If the time scale is time since diagnosis or first-ever disease onset but claims visibility starts later, use delayed entry at the first observable date and state that early failures before observability are absent. - EHR: First encounter in a health system is often delayed relative to disease onset. A patient with cancer diagnosed elsewhere and first seen at the tertiary center months later is left truncated for survival since diagnosis. Entry should be first reliable observation in-system, not the earlier external diagnosis date, unless complete pre-entry outcomes are linked. - Registry: Delayed reporting and late registry enrollment are canonical. Keep diagnosis date, registry entry date, treatment start, and last-follow-up date separate. For survival since diagnosis, the risk-set entry time is registry entry minus diagnosis date. - Linked data: Linkage to mortality and claims can reduce dependent truncation by recovering pre-entry deaths and utilization, but linkage failure can be informative. Report linkage success by diagnosis year, site, and severity.

Worked example

Scenario

Three patients are analyzed for survival since diagnosis. Patient A entered the registry at diagnosis. Patient B was diagnosed elsewhere and entered the registry 180 days after diagnosis. Patient C died 90 days after diagnosis before registry entry and never appears in the registry. A naive registry-only KM curve from diagnosis overstates early survival.

Dataset

Registry rows for observed patients and the structurally missing early death.

person_iddiagnosis_dateregistry_entry_dateexit_dateevent
A2023-01-012023-01-012024-01-01
B2023-01-012023-06-302023-12-311
C2023-01-01~2023-04-011

Steps

  • Patient A has entry_time = 0 days and exit_time = 365 days.

  • Patient B has entry_time = 180 days and exit_time = 364 days; B must not be in risk sets for failures before day 180.

  • Patient C is absent because death occurred before registry entry. Delayed-entry syntax cannot recover C unless the registry is linked to a source that captures pre-entry deaths.

  • The analytic dataset for observed patients is (start, stop, event): A = (0,365,0), B = (180,364,1).

Result

Correct delayed-entry analysis keeps B out of the 0-179 day risk set. The target population remains "patients who survived to registry entry," unless external linkage recovers patients like C.

Runnable example

python implementation

Start-stop Cox model for delayed-entry data using lifelines. Required columns are origin_date, entry_date, exit_date, event, and covariates. The entry duration must be strictly less than the exit duration.

import pandas as pd
from lifelines import CoxPHFitter

df = cohort.copy()
for col in ["origin_date", "entry_date", "exit_date"]:
    df[col] = pd.to_datetime(df[col])

df["start"] = (df["entry_date"] - df["origin_date"]).dt.days
df["stop"] = (df["exit_date"] - df["origin_date"]).dt.days

bad = df[df["start"] < 0]
assert bad.empty, "entry cannot precede the analysis origin"
bad = df[df["stop"] <= df["start"]]
assert bad.empty, "delayed-entry rows need stop > start"

cph = CoxPHFitter()
cph.fit(
    df[["start", "stop", "event", "age", "female", "charlson"]],
    duration_col="stop",
    event_col="event",
    entry_col="start"
)
cph.print_summary()
r implementation

R survival pattern for delayed entry. Surv(start, stop, event) keeps subjects out of risk sets before they are observable.

library(survival)

cohort$origin_date <- as.Date(cohort$origin_date)
cohort$entry_date  <- as.Date(cohort$entry_date)
cohort$exit_date   <- as.Date(cohort$exit_date)

cohort$start <- as.numeric(cohort$entry_date - cohort$origin_date)
cohort$stop  <- as.numeric(cohort$exit_date  - cohort$origin_date)

stopifnot(all(cohort$start >= 0))
stopifnot(all(cohort$stop > cohort$start))

fit <- coxph(Surv(start, stop, event) ~ age + female + charlson,
             data = cohort, ties = "efron")
summary(fit)