From Stratum-Specific Event Data to Absolute Risk
A prediction at a fixed horizon answers a direct question: among individuals in a specified covariate stratum who are event-free at the chosen time origin, what proportion is expected to experience each event type by time \(\tau\), and what proportion is expected to remain event-free? In competing risks, these probabilities must be considered together. Experiencing one cause prevents a person from subsequently experiencing another as the first event.
The Aalen–Johansen estimator turns observed event counts and risk sets into estimates of these probabilities. Here the focus is its use within covariate strata. The resulting estimates describe the observed event process for each stratum; they do not, by themselves, fit a regression model or adjust for differences within a stratum.
The horizon-specific predictions at time \(\tau\) are the values after incorporating every event time \(t_j\leq\tau\). Events after \(\tau\) do not contribute. Censoring is not a failure event and creates no jump in either estimated risk; it affects later risk sets by removing individuals from observation.
Why the Recursion Produces Probabilities
Immediately before \(t_j\), \(\widehat S_g(t_j-)\) estimates the probability of having experienced no event by that point. Among the \(Y_{gj}\) individuals at risk, \(d_{gjk}/Y_{gj}\) is the observed cause-\(k\) event fraction at that time. The estimated probability of reaching \(t_j\) event-free and then experiencing cause \(k\) there is therefore \(\widehat S_g(t_j-)d_{gjk}/Y_{gj}\). Adding that increment to the accumulated cause-\(k\) risk gives \(\widehat F_{gk}(t_j)\). The fraction who do not fail from any cause at \(t_j\) is \(1-d_{gj}/Y_{gj}\), which gives the update for \(\widehat S_g\).
This argument also gives a useful algebraic check. At each event time, the total increment across causes is \(\widehat S_g(t_j-)d_{gj}/Y_{gj}\), while the event-free probability decreases by exactly that amount. Thus, if the estimates sum to one before the time, they still do afterward:
Since the initial values sum to one, induction over event times shows that \(\widehat S_g(\tau)+\sum_k\widehat F_{gk}(\tau)=1\) for every horizon represented by the estimator. This identity is a check on the calculation, not evidence that the underlying assumptions are satisfied.
Worked Example: Calculating Both Cause-Specific Risks in One Stratum
Suppose a hypothetical stratum contains 10 individuals at the start of follow-up. There are two causes. At time \(t_1\), 2 individuals fail from cause 1 and 1 from cause 2. At time \(t_2\), 1 of the 7 remaining individuals fails from cause 1 and 2 fail from cause 2. At time \(t_3\), 1 of the 4 remaining individuals fails from cause 1. Assume no censoring before these event times. Calculate the predictions at horizon \(t_2\), then update them at \(t_3\).
At \(t_1\), \(Y_{g1}=10\), \(d_{g1,1}=2\), and \(d_{g1,2}=1\). The estimated risks increase by \(2/10\) and \(1/10\), respectively, and the event-free probability becomes \(1-3/10\):
At \(t_2\), the risk set is 7, and the event-free probability just before the time is 0.700. The cause-specific increments are \(0.700(1/7)=0.100\) and \(0.700(2/7)=0.200\). The event-free probability is multiplied by \(1-3/7=4/7\):
At horizon \(t_2\), the estimated cause-1 risk is 0.300, the cause-2 risk is 0.300, and the event-free probability is 0.400. These sum to 1.000. To update at \(t_3\), use \(Y_{g3}=4\) and the event-free probability 0.400 just before that time. The cause-1 risk increases by \(0.400(1/4)=0.100\); the cause-2 risk does not change; and \(\widehat S_g(t_3)=0.400(3/4)=0.300\).
Comparing Predictions Across Strata
To compare covariate strata, apply the same calculation separately within each stratum, using its own event counts and risk sets. A stratum label might be a category of a baseline covariate. The resulting estimates are conditional on membership in that category, not averages over a broader target population. They can be displayed as a table or as step functions, with the horizon stated explicitly.
Worked Example: Comparing Horizon-Specific Risks Across Two Strata
Consider two hypothetical strata, A and B, and a horizon \(t_2\). Stratum A has the event counts from the previous example, so \(\widehat F_{A1}(t_2)=0.300\), \(\widehat F_{A2}(t_2)=0.300\), and \(\widehat S_A(t_2)=0.400\). In stratum B, 8 individuals start follow-up. At \(t_1\), 1 fails from each cause; at \(t_2\), 2 of the 6 remaining individuals fail from cause 1, with no cause-2 failures. There is no censoring before these event times.
For stratum B at \(t_1\), the cause-specific risks each increase by \(1/8=0.125\), and the event-free probability becomes \(1-2/8=0.750\). At \(t_2\), the cause-1 increment is \(0.750(2/6)=0.250\); the cause-2 increment is zero. The event-free probability becomes \(0.750(4/6)=0.500\). Therefore:
At this horizon, the estimated cause-1 risk is 0.300 in A and 0.375 in B; the cause-2 risk is 0.300 in A and 0.125 in B. These are descriptive stratum-specific estimates. The numerical differences do not, on their own, establish a causal effect or account for other covariates that may vary within or between strata.
Assumptions, Diagnostics, and Failure Modes
Aalen–Johansen estimation is nonparametric within each stratum, but it is not assumption-free. Interpret the estimates as estimates of stratum-specific risks under the following conditions:
- Correct event information: the time origin, event times, and mutually exclusive cause labels are defined consistently. A competing event is recorded as a failure of its own cause, not as ordinary censoring.
- Independent censoring within stratum: conditional on stratum membership, censoring does not selectively remove individuals with different future event risks, at least in the sense needed for estimating the event process. If censoring depends on relevant prognostic information not represented by the strata, the unadjusted estimate may be biased.
- Adequate risk-set support: the stratum has individuals under observation and event-free through the times needed to estimate risk up to \(\tau\). A prediction beyond the informative follow-up is not made reliable merely by extending the step function.
- Comparable follow-up and definitions: individuals in a stratum share the intended time origin and outcome definitions. The stratum is treated as fixed at baseline for this calculation.
Before interpreting results, audit the number at risk and the cause-specific event counts at each event time. Check that \(Y_{gj}>0\), that each \(d_{gjk}\) is nonnegative, and that \(d_{gj}\leq Y_{gj}\). Verify that the risk set declines appropriately as failures and censoring occur, and that the probability identity holds at each time. If a stratum has few individuals near \(\tau\), estimates may be highly variable even when the arithmetic is correct. A late step based on a small risk set should be reported with that limitation visible; it should not be presented with the same confidence as a well-supported estimate.
Worked Example: Handling Censoring in the Risk Sets
In a hypothetical stratum, 12 individuals begin follow-up. At \(t_1\), 2 fail from cause 1 and 1 from cause 2. Before \(t_2\), 2 additional individuals are censored, leaving 7 at risk. At \(t_2\), 1 fails from each cause. Before \(t_3\), 2 additional individuals are censored, leaving 3 at risk; at \(t_3\), 1 fails from cause 2. Assume censoring is independent of future event risk within this stratum. Calculate the estimates through \(t_3\).
At \(t_1\), \(Y_{g1}=12\), so the cause-specific risks are \(2/12=0.1667\) and \(1/12=0.08333\), while \(\widehat S_g(t_1)=1-3/12=0.750\). Censoring before \(t_2\) creates no risk increment. It changes the next risk set to 7.
At \(t_2\), each cause has an increment of \(0.750(1/7)=0.1071\), and the event-free probability becomes \(0.750(5/7)=0.5357\). Thus, after \(t_2\), \(\widehat F_{g1}=0.1667+0.1071=0.2738\) and \(\widehat F_{g2}=0.08333+0.1071=0.1905\). The two subsequent censorings do not alter these estimates but reduce the risk set to 3 for \(t_3\).
At \(t_3\), the cause-2 risk increases by \(0.5357(1/3)=0.1786\), giving \(\widehat F_{g2}(t_3)=0.3690\). The event-free probability becomes \(0.5357(2/3)=0.3571\), while \(\widehat F_{g1}(t_3)=0.2738\). The total is \(0.2738+0.3690+0.3571\approx1.000\). The calculation uses the censored individuals in the risk sets at earlier times, but not after they are censored.
What These Predictions Do—and Do Not—Estimate
The Aalen–Johansen estimates use the observed cause-specific event fractions while retaining the competing causes as events. This is essential for absolute risk: an individual who experiences one cause is no longer at risk of experiencing another cause first. The estimated cause-specific risks therefore reflect the observed competing-event experience in that stratum.
A tempting alternative is to calculate a Kaplan–Meier estimate for one cause while treating failures from other causes as censored, then report one minus that estimate as the risk. That calculation targets a net-risk quantity under a different interpretation; it is not the observed cause-specific absolute risk in the presence of competing events. A crude proportion failing from a cause by \(\tau\) also does not generally account for censoring before \(\tau\). For absolute risk with observed competing causes and right censoring, the stratum-specific Aalen–Johansen estimate is the appropriate nonparametric estimator under its censoring assumptions.
Stratification is useful when the chosen categories are substantively meaningful and each has enough data. Its limitations are equally important: estimates can be unstable in sparse strata; grouping continuous covariates discards within-group distinctions; and an unadjusted stratum-specific curve does not control for other covariates. These estimates also do not automatically provide a prediction for an individual covariate profile or a risk averaged over a separate target population. Those are different prediction targets. Report the stratum, cause, time horizon, and amount of follow-up support so the probability being described is clear.
Common Mistakes
- Wrong: Treat competing failures as ordinary censoring and call one minus the resulting Kaplan–Meier estimate the observed cause-specific absolute risk. Correction: In the Aalen–Johansen calculation, competing failures contribute to the total event count and to their own cause-specific risk increments.
- Wrong: Add \(d_{gjk}/Y_{gj}\) directly to the cumulative risk at every event time. Correction: Weight that event fraction by the estimated probability of remaining event-free just before the time, \(\widehat S_g(t_j-)\).
- Wrong: Treat censoring as an event or as a jump in the estimated event-free probability. Correction: Censoring changes later risk sets, but it does not create an event-risk increment at its censoring time.
- Wrong: Interpret a stratum-specific estimate as a causal effect or as an average for a different population. Correction: It estimates an absolute risk for the specified stratum under the estimation assumptions; additional design or modeling is needed for other interpretations.
Check Your Understanding
Answer each question using the Aalen–Johansen recursion. Then compare your reasoning with the solutions below.
- In one stratum, \(Y=20\) at an event time, with 2 failures from cause 1 and 1 from cause 2. If the event-free estimate just before the time is 0.80, what are the cause-specific risk increments and the new event-free estimate?
- Why does censoring between two event times affect the later Aalen–Johansen update but not directly increase any cumulative incidence estimate?
- At a horizon, a calculation gives cause-specific risks 0.25 and 0.35 and event-free probability 0.40. Does the probability identity hold? What should you check if the three estimates instead sum to 1.08?
- Explain why treating a competing failure as censoring in a Kaplan–Meier calculation does not generally estimate the observed absolute risk of the cause of interest.
Solutions. (1) The increments are \(0.80(2/20)=0.080\) for cause 1 and \(0.80(1/20)=0.040\) for cause 2. The new event-free estimate is \(0.80(1-3/20)=0.680\). (2) A censored individual contributes to risk sets up to censoring but is no longer under observation afterward; censoring is not a failure and creates no probability jump. (3) Yes: \(0.25+0.35+0.40=1.00\). If the total is 1.08, check the risk sets, event counts, event-free weighting, and arithmetic; the identity should hold for correctly updated estimates. (4) A competing failure prevents the event of interest from occurring first, so treating it as censoring removes a real competing event from the observed-risk calculation and targets a different quantity.