Combination Index
Description
The Combination Index (CI) synergy model is a dose-dependent synergy model. It quantifies synergy according to the combination index equation. Let \(E := E(d_1, d_2)\), then
Here \(E_i^{-1}(d_i)\) means “the dose of drug \(i\) that, alone, achieves effect \(E\)”.
The values of CI synergy are interpreted as
Value |
Interpretation |
|---|---|
\[< 1\]
|
Synergistic |
\[> 1\]
|
Antagonistic |
\[= 1\]
|
Additive |
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 Loewe additivity, such as Loewe or Schindler.
Defaults
Single-drug models:
Default:
synergy.single.hill.HillCIRequired:
synergy.single.hill.HillCIor subclass
2D
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
# NOTE: This dataset does not match the CombinationIndex assumption that each drug goes from `E0=1` to `Emax=0`.
# This can be seen by plotting the dose response data for d1 when d0==0 (or vice versa).
# The code will still work, but in general it would be recommended to use another model, such as synergy.combination.loewe.Loewe(mode="ci").
d1, d2, E = datasets.load_2d_example()
Plot raw dose response data as a heatmap using synergy.utils.plots.plot_heatmap()
[2]:
plot_heatmap(d1, d2, E, title="Response Data", cmap="YlGnBu")
Calculate synergy using the CI model
[3]:
import numpy as np
from synergy.combination.combination_index import CombinationIndex
model = CombinationIndex()
synergy = model.fit(d1, d2, E)
# For CombinationIndex it is recommended to visualize -log(synergy), so that values < 0 are antagonistic, and > 0 are synergistic
plot_heatmap(d1, d2, -np.log(synergy), cmap="PRGn", title="Combination Index Synergy", center_on_zero=True)
N-drug Combinations
The combination index model is defined for for \(N\)-drug combinations (\(N > 2\)). In this case, synergy is defined as
Synergy is interpreted identically as in the 2D case.
[4]:
from synergy.higher.combination_index import CombinationIndex as CombinationIndexND
from synergy import datasets
d, E = datasets.load_3d_example()
modelND = CombinationIndexND()
synergyND = modelND.fit(d, E)
[5]:
from synergy.utils.plots import plotly_isosurfaces
import numpy as np
# For CombinationIndex it is recommended to visualize -log(synergy), so that values < 0 are antagonistic, and > 0 are synergistic
plotly_isosurfaces(d, -np.log(synergyND), center_on_zero=True, cmap="PRGn", title="Combination Index Synergy")
References
Chou TC, Talalay P. Quantitative analysis of dose-effect relationships: the combined effects of multiple drugs or enzyme inhibitors. Adv Enzyme Regul. 1984;22:27-55. doi:10.1016/0065-2571(84)90007-4
[ ]: