Zimmer
Description
Zimmer’s Effective Dose Model (EDM) is a parametric synergy model. This model uses the multiplicative survival principle (i.e., Bliss), but adds a parameter for each drug describing how it affects the potency of the other. Specifically, given doses \(d_1\) and \(d_2\), this model translates them to “effective” doses using the following system of equations
In addition to those equations, the EDM assumes each single drug follows a 2-parameter Hill equation synergy.single.hill.Hill2P(E0=1, Emax=0).
The values of Effective Dose Model synergy parameters are interpreted as
Parameter |
Values |
Synergy/Antagonism |
Interpretation |
|---|---|---|---|
\(a_{12}\) |
\((-\frac{C_2}{d_{2,\text{eff}}} - 1, 0)\) |
Synergism |
Drug 2 increases the effective dose (potency) of drug 1 |
\(> 0\) |
Antagonism |
Drug 2 decreases the effective dose (potency) of drug 1 |
|
\(a_{21}\) |
\((-\frac{C_1}{d_{1,\text{eff}}} - 1, 0)\) |
Synergism |
Drug 1 increases the effective dose (potency) of drug 2 |
\(> 0\) |
Antagonism |
Drug 1 decreases the effective dose (potency) of drug 2 |
Assumptions
Each individual drug follows a Hill equation dose response with
E0=1andEmax=0All effect values fall within
[0, 1]
If these assumptions are not met, you may consider using another synergy model based on the multiplicative survival principale, such as Bliss or ZIP, or another model including some form of synergistic potency, such as MuSyC or BRAID.
Defaults
Single-drug models
Default:
synergy.single.hill.Hill2P(E0=1, Emax=0)Required:
synergy.single.hill.Hill2Por subclass
Load and plot example dataset
2D synergy models work with 1D arrays of drug 1 dose, drug 2 dose, and effect.
[1]:
from synergy import datasets
from synergy.utils.plots import plot_heatmap, plot_surface_plotly, set_plotly_interactive
set_plotly_interactive() # This should only be run in an interactive notebook setting - for other scripts skip this
d1, d2, E = datasets.load_2d_example()
Fit the Zimmer model to data
[2]:
from synergy.combination.zimmer import Zimmer
model = Zimmer()
model.fit(d1, d2, E, bootstrap_iterations=100, use_jacobian=False) # bootstrap iterations is used to get confidence intervals
model.summarize()
Parameter | Value | 95% CI | Comparison | Synergy
=======================================================================
a12 | -0.872 | (-1.05, -0.277) | < 1 | synergistic
a21 | -0.876 | (-1.25, -0.327) | < 1 | synergistic
[3]:
for parameter, ci in model.get_confidence_intervals().items():
print(f"{parameter}: {ci}")
h1: [0.43866078 0.59074892]
h2: [0.51304362 0.65726413]
C1: [ 7.24345507 12.13209283]
C2: [2.0312226 2.95592122]
a12: [-1.05202436 -0.2771949 ]
a21: [-1.24706193 -0.32749117]
Plot the model fit
[4]:
from synergy.utils.dose_utils import make_dose_grid
# Get a smooth looking dose response surface from dmin=0.025 to dmax=20
dmin, dmax = 0.025, 20
n_points = 20 # 20 points x 20 points
d1_smooth, d2_smooth = make_dose_grid(dmin, dmax, dmin, dmax, n_points, n_points)
E_smooth = model.E(d1_smooth, d2_smooth)
scatter_points = {
"drug1.conc": d1,
"drug2.conc": d2,
"effect": E
}
plot_surface_plotly(d1_smooth, d2_smooth, E_smooth, cmap="YlGnBu", title="Zimmer Fit", scatter_points=scatter_points)
[5]:
from matplotlib import pyplot as plt
import numpy as np
from synergy.utils.dose_utils import aggregate_replicates
# plot_heatmap will automatically aggregate replicates for real data, but we don't need it to do that for the BRAID fit (middle plot)
d, _ = aggregate_replicates(np.vstack([d1, d2]).transpose(), E)
unique_d1 = d[:, 0]
unique_d2 = d[:, 1]
fig = plt.figure(figsize=(10, 5))
plot_heatmap(d1, d2, E, title="Original Data", cmap="YlGnBu", ax=fig.add_subplot(1, 3, 1))
plot_heatmap(unique_d1, unique_d2, model.E(unique_d1, unique_d2), title="Zimmer Fit", cmap="YlGnBu", ax=fig.add_subplot(1, 3, 2))
plot_heatmap(d1, d2, model.E(d1, d2) - E, title="Residuals", cmap="RdBu", ax=fig.add_subplot(1, 3, 3), center_on_zero=True)
plt.tight_layout()
Notice the Zimmer residuals do not appear random. This is because the synthetic dataset synergy.datasets.load_2d_example() was generated using drugs with \(E_0 = 1\), but NOT \(E_{max} = 0\) as is assumed by the Zimmer equations. The model fit erroneously accounts for this by underestimating the drugs’ Hill coefficients \(h_i\). When data like this are encountered, alternative synergy models based on the multiplicative survival principal may be considered. For instance MuSyC is a
related model which also computes synergistic potency. Conversely, models such as Bliss or ZIP may be used to find dose-dependent synergy.
N-drug Combinations
The EDM has not been generalized to an \(N\)-drug case
References
Zimmer, A., Katzir, I., Dekel, E., Mayo, A. E., & Alon, U. (2016). Prediction of multidimensional drug dose responses based on measurements of drug pairs. Proceedings of the National Academy of Sciences of the United States of America, 113(37), 10442–10447. https://doi.org/10.1073/pnas.1606301113
[ ]: