Tutorials › Marginal Structural Models › Building Event Intervals for Pooled Logistic Survival

Fitting MSMs for Survival Outcomes · Tutorial 202 of 501

Building Event Intervals for Pooled Logistic Survival

Build person-interval records consistently so event indicators, follow-up, and the analysis horizon agree.

Advanced 12 min read

What You'll Learn

  • Define pooled-logistic event indicators on right-closed time intervals.
  • Assign events at interior and terminal grid boundaries consistently.
  • Determine which complete intervals a censored subject can contribute.
  • Distinguish an event after the analysis horizon from an event within it.
  • Check person-interval records for duplicate events and unsupported zero indicators.
  • Recognize how interval construction differs from exact-time survival analysis.

Why Interval Construction Matters

A pooled logistic survival analysis uses one record per person and time interval in which that person is at risk. The event indicator in each record represents whether the event occurred in that interval. Constructing these records is not just a formatting step: the grid determines which interval contains an event, while the observed follow-up determines which intervals can legitimately be labelled event-free. A boundary assigned inconsistently, or a zero recorded for an interval that was only partly observed, changes the outcome data supplied to the model.

The earlier material on discrete-time survival establishes the role of interval-specific event indicators. Here the focus is how to create them from observed times. Begin by fixing the grid and its boundary convention before generating any person-interval rows.

Definition: Let the analysis grid be \(0=t_0<t_1<\cdots<t_K\), defining intervals \(I_k=(t_{k-1},t_k]\) for \(k=1,\ldots,K\). For person \(i\), let \(T_i\) be the event time, \(C_i\) the censoring time, \(X_i=\min(T_i,C_i)\) the observed follow-up time, and \(\Delta_i=I(T_i\le C_i)\) the event-observed indicator. The interval event indicator \(Y_{ik}\) is 1 if the observed event time belongs to \(I_k\), and 0 for an included interval known to be event-free through its right endpoint.

This convention uses intervals that are right-closed: an event exactly at \(t_k\) is assigned to interval \(k\), not interval \(k+1\). We use the explicit tie rule \(\Delta_i=1\) when event and censoring times are equal. A data source that uses a different tie rule must be handled according to that rule; the convention should not be guessed after the rows have been created.

From Observed Times to Person-Interval Rows

Assume initially that everyone enters observation at time 0, follow-up has no gaps, and the analysis horizon is \(t_K\). A row for interval \(k\) is eligible only if the person is event-free at \(t_{k-1}\) and observation establishes whether an event occurred by \(t_k\), or establishes an event during that interval. A person who has an observed event in interval \(k\) contributes rows for intervals \(1,\ldots,k\): zeros in the earlier intervals and a one in interval \(k\). They contribute no rows after the event.

For a censored person, define \(m_i=\max\{j:t_j\le C_i,\ 0\le j\le K\}\). If \(C_i\) falls inside an interval, that interval is not fully observed, so the person contributes rows only through \(m_i\). In particular, censoring at \(t_j\), with no event observed by that time, permits a zero through interval \(j\), but not a row for interval \(j+1\). This construction concerns which outcomes are observed; any assumptions or weighting needed to address informative censoring are separate from the act of forming the rows.

1
Fix the grid and convention.
Write down all endpoints and use \(I_k=(t_{k-1},t_k]\), or another explicitly chosen convention, consistently.
2
Locate an observed event within the horizon.
If \(\Delta_i=1\) and \(0<T_i\le t_K\), find the unique interval containing \(T_i\), then code that interval 1 and the preceding contributed intervals 0.
3
Stop at the event or last complete endpoint.
Do not add rows after an observed event. For a person without an observed event within the horizon, include only intervals whose right endpoints are reached under event-free observation, up to \(K\).

More explicitly, if an observed event occurs at \(T_i\in(t_{k-1},t_k]\) with \(0<T_i\le t_K\), the contributed rows satisfy \(Y_{ij}=0\) for \(j<k\), \(Y_{ik}=1\), and there are no rows for \(j>k\). If the observed event is after \(t_K\), it belongs to none of the grid intervals: the person contributes no event row on this grid. If the person is known to remain event-free through \(t_K\), they can contribute \(K\) zero rows. An event beyond the horizon and censoring before the horizon are different situations: the former establishes event-free follow-up through every grid endpoint, whereas the latter may not.

Worked Examples

Worked Example: Events at Grid Boundaries

Let the grid be \(0,30,60,90\), so the intervals are \((0,30]\), \((30,60]\), and \((60,90]\). Consider three people with observed events at days 30, 60, and 90, respectively; assume each event is observed and there is no earlier censoring.

For the event at day 30, the time lies in \((0,30]\). The rows are \(Y_{i1}=1\), with no later rows. For the event at day 60, the time lies in \((30,60]\), so the rows are \(Y_{i1}=0\) and \(Y_{i2}=1\). For the event at day 90, the time lies in \((60,90]\), so the rows are \(Y_{i1}=0\), \(Y_{i2}=0\), and \(Y_{i3}=1\).

Each endpoint belongs to the interval ending at that endpoint. Thus day 60 is not assigned to \((60,90]\), and day 90 is included at the analysis horizon. The event at day 90 produces exactly one event row because it is observed within the grid.

Worked Example: Censoring Within an Interval and Beyond the Horizon

Use the grid \(0,30,60,90\). Person A is event-free when censored at day 47. Since \(30\le47<60\), the last complete right endpoint is day 30: A contributes one row, \(Y_{A1}=0\), and no row for \((30,60]\). The fact that A had no observed event before day 47 does not establish a zero for the full interval ending at day 60.

Person B is event-free and censored at day 60. They have been followed through both endpoints 30 and 60, so they contribute \(Y_{B1}=0\) and \(Y_{B2}=0\), but no row for \((60,90]\). Person C has an observed event at day 100. Because \(100>t_K=90\), the event is beyond this analysis horizon. C contributes three zero rows through day 90 and no event row on this grid: the observed event is after, not within, all three intervals.

The horizon check is decisive. An observed event after time zero does not necessarily create a 1 on a finite grid; it creates a 1 only if \(0<T_i\le t_K\) and the event is included in the analysis.

Worked Example: An Irregular Grid and a Partial Last Interval

Let \(t_0=0,t_1=14,t_2=35,t_3=70\), giving intervals \((0,14]\), \((14,35]\), and \((35,70]\). Person D has an observed event at day 22. Since \(14<22\le35\), D contributes \(Y_{D1}=0\) and \(Y_{D2}=1\), with no third row.

Person E is event-free and censored at day 50. The endpoints 14 and 35 have been reached, but 70 has not. E therefore contributes \(Y_{E1}=0\) and \(Y_{E2}=0\), and no row for \((35,70]\). Person F is event-free through day 70 and is censored at day 70; F contributes three zeros because each right endpoint is reached. This example shows why interval membership must use the stated endpoints, rather than assuming that all intervals have equal length.

Two Checks That Follow from the Construction

The first property is that an observed event within the horizon has one—and only one—event row. This follows from the partition created by the grid.

Result: Suppose \(0=t_0<t_1<\cdots<t_K\) and an observed event has \(0<T_i\le t_K\). Under the interval convention \(I_k=(t_{k-1},t_k]\), exactly one interval contains \(T_i\). If the person is included and has no earlier exit from observation, their person-interval data contain exactly one row with \(Y_{ik}=1\).

Proof. The intervals are disjoint: if \(j<k\), then every time in \(I_j\) is at most \(t_j\le t_{k-1}\), whereas every time in \(I_k\) is greater than \(t_{k-1}\). They also cover \((0,t_K]\), since every time in this range lies between two consecutive grid points, with a grid-point equality assigned to the interval ending there. Thus there is exactly one \(k\) for which \(T_i\in I_k\). The construction assigns 1 to that interval and 0 to each earlier contributed interval; it stops at the event, so no later row is created. Hence there is exactly one event row. \(\square\)

The second check concerns zero indicators. A zero is a claim about a complete interval, not merely about the absence of an event before the person’s last observed instant.

Result: Under continuous follow-up from time 0, a zero row for interval \(k\) is supported only when the person is known to be event-free through \(t_k\). In particular, if a person is censored at \(C_i<t_k\) and has had no observed event by \(C_i\), the available data do not establish \(Y_{ik}=0\) for the whole interval.

Proof. The interval is \((t_{k-1},t_k]\). To know that no event occurred in it, observation must establish absence of an event through its right endpoint \(t_k\), unless an observed event within the interval instead establishes \(Y_{ik}=1\). If censoring occurs at \(C_i<t_k\), event status after \(C_i\) and through \(t_k\) is not observed. Both an event after \(C_i\) but no later than \(t_k\), and no event by \(t_k\), are consistent with the observed event-free history through \(C_i\). Therefore the full-interval outcome cannot be set to zero from those data. \(\square\)

Diagnostics, Alternatives, and Limitations

Before fitting a pooled logistic model, inspect the constructed rows rather than relying only on the final coefficient output. Useful checks include:

  • For each included observed event with \(0<T_i\le t_K\), verify exactly one 1 appears, in the interval determined by the endpoint rule.
  • Verify that a person has no rows after their event and that their intervals form a consecutive prefix beginning at interval 1 under the no-delayed-entry setup used here.
  • For a censored person, verify that no row extends beyond the last grid endpoint reached during event-free observation.
  • Tabulate events at exact grid endpoints and inspect them explicitly. Endpoint errors can be easy to miss in ordinary summaries.
  • Check whether event times beyond \(t_K\) were accidentally assigned to the final interval. They are not events in that interval.

The main alternative is to analyze exact event times with a continuous-time survival approach rather than converting time to a discrete grid. That avoids choosing these particular bins, but it answers the question through a different time model and does not remove the need to define observed follow-up correctly. A pooled logistic analysis instead models interval event probabilities on the chosen grid. Changing the grid can change the interval outcomes and the interpretation of the interval-specific hazard; it is not merely a change in data storage.

The construction also has limits. It assumes a defined time origin and, as described here, observation beginning at that origin. If follow-up begins later, risk rows cannot simply start at time 0; the eligible risk intervals need a separate entry rule. The construction does not itself address informative censoring, missing event times, gaps in observation, or the choice of a scientifically appropriate grid. Nor does converting exact times to intervals recover their within-interval ordering. These issues must be handled in the analysis design rather than concealed by a tidy person-period table.

Common pitfall: “The event happened after time zero, so one of the rows must have a 1.” That is false on a finite grid. If \(t_K=90\) and an observed event occurs at day 100, then \(100\notin(0,90]\), so there is no event row on this grid. The correction is to check both inclusion in the analysis and the horizon condition \(0<T_i\le t_K\) before assigning an event interval.

Check Your Understanding

Answer each question, then compare your reasoning with the solutions.

  1. For the grid \(0,10,25\), which interval contains an event at day 10?
  2. On the grid \(0,30,60\), an event is observed at day 75. How many event rows does the person have on this grid, and why?
  3. On the grid \(0,20,50\), a person is event-free when censored at day 35. Which intervals can contribute zero rows?
  4. Why is it incorrect to code a zero for \((30,60]\) when a person is censored at day 45 without an event?

Solutions. 1. Day 10 belongs to \((0,10]\), the interval ending at 10. 2. The person has no event row on this grid, because \(75>t_K=60\); if observed event-free through day 60, they have two zero rows. 3. The endpoints 20 but not 50 have been reached, so only \((0,20]\) contributes a zero. 4. Censoring at 45 leaves event status between day 45 and day 60 unknown, so event-free status through the interval’s right endpoint is not established.

Clinical Biostats