Rudimentary DD on REGAL
First off, thanks to a lot of people here who have helped me understand the REGAL trial better. I'm not a statistician (still a student) and this is definitely not meant to replace the more sophisticated models others have shown. Still, I felt like this would be useful to show... So buckle up!
Basic Assumptions
- Total REGAL patients: 126
- Arm split: 63 BAT / 63 GPS
- Median enrollment date: March 22, 2023 (this is used by u/Confident-Web-7118)
- Known event anchors used: 60 events at December 10, 2024; 72 events at December 26, 2025; 78 events at May 11, 2026
- Weibull shape parameter (k = 0.85)
- -> This is meant to approximate a front-loaded AML-like survival curve rather than a simple exponential curve
- Bat mOS tested: 6 months to 20 months
- GPS mOS: solved by fitting the model to the 60/72/78 event anchors
- HR approximation: assumes BAT and GPS use the same (k = 0.85) weibull shape
Again, this is not a true patient-level Cox model. It compresses the trial into a median-enrollment framework. But it helps to answer the following simple question: Given the public event timeline, what GPS mOS / HR would be implied under different BAT mOS assumptions?
The survival function used
The model uses this survival function: S(t)=0.5ˆ{(t/mOS)ˆk}
Where:
- (S(t)) = survival probability at time (t)
- (t) = months of follow-up from median enrollment
- (mOS) = median overall survival
- (k = 0.85)
Deaths in each arm are then calculated as: Death = 63 * (1 - S(t)), since there are 63 patients in each arm.
How the Python code works
For each Bat mOS from 6 to 20, the code does the following.
Step 1: Convert event dates into follow-up time
Using median enrollment of March 22, 2023:
- Dec. 10, 2024 = about 20.67 months
- Dec. 26, 2025 = about 33.18 months
- May 11, 2026 = about 37.65 months
Step 2: Pick a Bat mOS and calculate BAT deaths
For example, suppose:
Bat mOS = 10,
then the BAT survival curve is S_BAT (t) = 0.5 ^ {(t/10)ˆ0.85}.
At each event anchor, the model gets approximately:
| Date | Total trial events | BAT alive | BAT deaths |
|---|---|---|---|
| December 10, 2024 | 60 | 17.44 | 45.56 |
| December 26, 2025 | 72 | 9.22 | 53.78 |
| May 11, 2026 | 78 | 7.42 | 55.58 |
Step 3: Subtract BAT deaths from total trial deaths
For example, if the trial had 60 total deaths, and BAT explains 45.56 of them, then GPS must explain the rest.
So, GPS_deaths = Total_deaths - BAT_deaths
For BAT mOS = 10:
| Date | Total trial events | BAT deaths | Implied GPS deaths |
|---|---|---|---|
| December 10, 2024 | 60 | 45.56 | 14.44 |
| December 26, 2025 | 72 | 53.78 | 18.22 |
| May 11, 2026 | 78 | 55.58 | 22.42 |
So if BAT mOS = 10 months, then the public event path implies GPS death targets of roughly:
[14.44, 18.22, 22.42] across the three event anchors.
Step 4: Find the GPS mOS that best matches those GPS deaths
The code then tries many possible GPS mOS values. For each candidate GPS mOS, it calculates the predicted GPS deaths at the three dates (like how we calculated BAT deaths in Step 2). Then, it compares predicted GPS deaths versus the target GPS deaths.
The error is: Error = Predicted_GPS_Deaths - Target_GPS_Deaths.
The code then squares the error across the three anchors and adds them. Then, the code chooses the GPS mOS with the lowest total squared error.
For BAT mOS = 10, the best-fit result was GPS_mOS approximately 68.63
With this GPS mOS, the predicted GPS deaths are close to the target death path across all three anchors. The total squared error is approximately 3.227. The square root of that is approximately 1.8, so in simple terms, the fitted GPS curve is off by around 1.8 deaths across the 3 events.
Step 5: Convert Bat mOS and GPS mOS into rough HR.
Because both arms use the same Weibull shape (k = 0.85), the rough HR estimate is
HR = (Bat mOS / GPS mOS)ˆk
For BAT mOS = 10, the rough HR is (10 / 68.63)ˆ0.85 = approximately 0.195
So under this specific scenario:
- BAT mOS = 10 months
- Best-fit GPS mOS = 68.63 months
- Full-path rough HR = 0.195
*****************************************************************************************
The above was to show how the code works. The results of the model are shown below. In a similar fashion, it also calculates the HR at interim (60-events).
| BAT mOS | Best GPS mOS | Squared Error | Full HR | 60-event GPS mOS | 60-event HR |
|---|---|---|---|---|---|
| 6 | 120.32 | 20.9366 | 0.078 | 215.91 | 0.048 |
| 7 | 102.86 | 11.3595 | 0.102 | 139.27 | 0.079 |
| 8 | 88.83 | 6.0274 | 0.129 | 101.53 | 0.115 |
| 9 | 77.62 | 3.6581 | 0.160 | 79.58 | 0.157 |
| 10 | 68.63 | 3.2270 | 0.195 | 65.43 | 0.203 |
| 11 | 61.35 | 3.9860 | 0.232 | 55.63 | 0.252 |
| 12 | 55.38 | 5.4151 | 0.273 | 48.49 | 0.305 |
| 13 | 50.43 | 7.1648 | 0.316 | 43.07 | 0.361 |
| 14 | 46.27 | 9.0073 | 0.362 | 38.83 | 0.420 |
| 15 | 42.75 | 10.7991 | 0.411 | 35.44 | 0.482 |
| 16 | 39.73 | 12.4542 | 0.462 | 32.65 | 0.545 |
| 17 | 37.12 | 13.9254 | 0.515 | 30.34 | 0.611 |
| 18 | 34.84 | 15.1908 | 0.570 | 28.38 | 0.679 |
| 19 | 32.84 | 16.2453 | 0.628 | 26.70 | 0.749 |
| 20 | 31.07 | 17.0938 | 0.688 | 25.25 | 0.820 |
What stands out to me
The lowest squared-error happens around BAT = 9,10,11, which leads me to think that these are the most probable BAT mOS values for REGAL. These BAT mOS gives HR values of
0.160, 0.195, and 0.232.
What about halting for efficacy at interim?
One fair question is that at BAT mOS of 9, 10, 11 or even values higher, the HR is spectacular, why didn't they halt for efficacy?
I believe there can be a few possible reasons for this.
- The company amended the final event count from 105 events to 80 events, which already shortened the trial and reduced the event burden.
- A trial can look very favorable at interim but still continue if the sponsor, IDMC, and statistical plan favor more mature final analysis.
- In immunotherapy-like settings, long-term follow-up may matter more than simply stopping as soon as a favorable signal appears.
Others who are more familiar with this side can answer though!
However, there are lots of caveats in the analysis!!
Limitations:
- It uses median enrollment rather than actual patient-level enrollment dates (Stergiou has said Sellas knows the exact enrollment dates and speaks very bullishy, so I don't view this as a negative factor).
- It assumes the same Weibull shape (k = 0.85) for both BAT and GPS.
- It does not model censoring properly.
- It does not perform a real Cox proportional hazards analysis.
All the above was calculated through Python code after I guided ChatGPT step by step through the logic. I don't know how to attach the code file here? If anyone is interest, DM me and we can figure it out!