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

\[synergy(d_1, d_2) := \frac{d_1}{E_1^{-1}(E)} + \frac{d_2}{E_2^{-1}(E)}\]

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=1 and Emax=0

  • All 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.HillCI

    • Required: synergy.single.hill.HillCI or 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")
../../_images/models_synergy_combination_index_4_0.png

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)
../../_images/models_synergy_combination_index_6_0.png

N-drug Combinations

The combination index model is defined for for \(N\)-drug combinations (\(N > 2\)). In this case, synergy is defined as

\[synergy(d_1, d_2) := \sum_{i=1}^{N}\frac{d_i}{E_i^{-1}(E)}\]

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

[ ]: