An additive hazard fit becomes clinically useful when it tells us how risk changes after the operation. Survival probability is the fraction of comparable patients expected to remain alive beyond a named time. Cumulative hazard is the event intensity accumulated through that time. Instantaneous hazard is the conditional event rate among patients still at risk, with units of deaths per patient-month here. It is not the observed number of deaths. The interval with the most deaths also depends on how many patients remain at risk and how wide the interval is, so it need not coincide with the peak hazard. In a multiphase model, the hazard curve can also show which early or constant process is contributing that rate.
This chapter refits every model it uses. You can copy it into a clean R session without first running the fitting chapter. The working pattern is the same throughout: fit the object, inspect it, predict on an explicit time grid, then plot and read the result.
23.2 Refit the models
The first fit is the reviewed intercept-only Weibull model for the public CABG cohort. Follow-up is recorded in months, so every rate we derive from its time grid is per patient-month.
With se.fit = TRUE, current predict.hazard() returns the estimate, delta-method standard error, and confidence limits. Survival limits stay between 0 and 1; cumulative-hazard limits stay positive. Both predictions refer to the same fitted curve on the same grid.
# Survival and cumulative hazard must describe the same fitted model.max(abs(pred$fit -exp(-pred$cumhazard)))
[1] 0
The last value should be zero to numerical precision because \(S(t)=\exp\{-H(t)\}\). If it is not, first check that both predictions came from the same fit, profile, and time grid. That catches the common mistake of joining predictions made on different rows.
23.3.1 Survival against the empirical curve
The smooth curve is a model result, so we judge it against the Kaplan-Meier estimate rather than letting it stand alone. The ribbon is uncertainty in the parametric curve; the step line is the empirical reference.
Figure 23.1: Weibull survival with a 95% delta-method confidence band, overlaid on empirical Kaplan-Meier survival for the CABG cohort
The Weibull follows the broad decline but smooths over the changing early and late behavior in the empirical curve. A narrow band does not rescue a systematic shape mismatch; it only says the fitted parameters are estimated precisely under that Weibull model.
23.3.2 Accumulated event intensity
The Nelson-Aalen curve provides the corresponding empirical check for cumulative hazard. \(H(t)\) is dimensionless. Its slope, because time is in months, has units of events per patient-month.
Figure 23.2: Weibull cumulative hazard with a 95% delta-method confidence band, overlaid on the empirical Nelson-Aalen estimate
23.4 Predict an additive hazard directly
Now refit the reviewed AVC model. It has an early CDF phase and a constant phase, both on a monthly time scale. Current predict.hazard() supports direct instantaneous-hazard prediction for this multiphase model. We use that API; there is no need to approximate a derivative from cumulative-hazard values.
The instantaneous hazard and its confidence limits have units of deaths per patient-month. The cumulative hazard is dimensionless. Keep those labels separate even though the two quantities come from the same fit.
23.5 Rebuild and verify the phase contributions
hzr_phase_hazard() and hzr_phase_cumhaz() return unit-scale temporal shapes. Multiply each by its fitted scale, exp(log_mu), to recover that phase’s contribution. The helper signatures mirror the phase specification: the early CDF uses t_half, nu, and m; the constant phase needs only its type.
theta <-coef(fit_multiphase)early_scale <-exp(theta["early.log_mu"])constant_scale <-exp(theta["constant.log_mu"])early_hazard <- early_scale *hzr_phase_hazard( phase_grid$time, t_half =0.5, nu =1, m =1, type ="cdf")constant_hazard <- constant_scale *hzr_phase_hazard( phase_grid$time, type ="constant")early_cumhaz <- early_scale *hzr_phase_cumhaz( phase_grid$time, t_half =0.5, nu =1, m =1, type ="cdf")constant_cumhaz <- constant_scale *hzr_phase_cumhaz( phase_grid$time, type ="constant")additivity_check <-data.frame(quantity =c("Instantaneous hazard", "Cumulative hazard"),maximum_absolute_difference =c(max(abs(total_hazard$fit - early_hazard - constant_hazard)),max(abs(total_cumhaz$fit - early_cumhaz - constant_cumhaz)) ))additivity_check
Both differences should be at floating-point noise. If they are not, check the phase type, fixed shape values, time units, and fitted scale before plotting. The total must equal the phase sum at every time.
Figure 23.3: Fitted AVC hazard per patient-month: the total with its 95% confidence band and the additive early and constant contributions
The log scales keep the first postoperative days and the low constant rate visible on one panel. The early contribution dominates immediately after repair and then falls. The constant contribution is small and flat. Their sum is the solid total curve. If the phase order is clinically implausible, do not relabel it into a better story. Return to the empirical curve and the phase specification.
Figure 23.4: Fitted AVC cumulative hazard: the total with its 95% confidence band and the additive early and constant contributions
The early cumulative contribution rises quickly and then approaches a plateau. The constant contribution keeps accumulating linearly, even though its instantaneous rate is low. Thus a phase can look small on the hazard panel and still matter over long follow-up. Read the two panels together.