Question: How to calculate synergy score between two drugs?
gravatar for carlos_marchi
15 months ago by
Brazil, Sorocaba, UFABC
carlos_marchi60 wrote:


I'm curious about the calculation of drug synergy, I'm novice in these field. I would like to know how to calculate the synergy score between two drugs using one of these methods: Loewe Additivity, Highest Single Agent, Response Additivity, Bliss Independence or ZIP. Is there any implementation in Python?

Another doubt is related to data input. Is there a drug database that contains information about the mininum effective dose, maximum tolerated dose, effective dose, letal dose and the possible concentrations of drugs?

Finally, how to calculate drug reponse between two drugs?

Does anyone have an idea?


ADD COMMENTlink modified 8 weeks ago by dwooten10 • written 15 months ago by carlos_marchi60
gravatar for dwooten
9 weeks ago by
dwooten10 wrote:

I know this is an old question, but since it had no replies and shows up in google, I wanted to answer.

I created a Python package for calculating synergy using many models on pypi and github. It implements Loewe, Bliss, HSA, MuSyC, BRAID, ZIP, Schindler's multidimensional Hill, Zimmer's effective dose model, and combination index.

Some models are parametric, while the others are dose-dependent. Here is an example of basic usage for both kinds (using MuSyC (a parametric model) and Bliss (a dose-dependent model) as examples). The data is assumed to be in a .csv spreadsheet with columns for "drug1.conc", "drug2.conc", and "effect"

import pandas as pd
from synergy.combination import MuSyC
from synergy.combination import Bliss
# Other models are available too

# Read the data
df = pd.read_csv("dataset.csv")
d1 = df['drug1.conc']
d2 = df['drug2.conc']
E = df['effect']

# Instantiate synergy model(s)
model_musyc = MuSyC()
model_bliss = Bliss()

# Calculate synergy, d2, E), d2, E)

# Get results
print(model_musyc.get_parameters()) # MuSyC is a parametric model, so synergy is encoded in its parameters
print(model_bliss.synergy) # Bliss is dose-dependent, so synergy is an array the same size as d1, d2, or E

# Make plots
# Surface plots require plotly
model_musyc.plot_surface_plotly(d1, d2, scatter_points=df, fname="MuSyC_surface.html")

# Heatmaps require matplotlib
model_musyc.plot_heatmap(d1, d2, fname="MuSyC_heatmap.pdf")


  1. Most models expect drugs to cause "effect" to decrease, such as is the case with proliferation or viability assays
  2. Assays measuring percents should be on a 0 to 1 scale, not 0 to 100
  3. Doses should be raw (e.g., not log-transformed), though they will be log-transformed in the plots. This can be overridden by passing the argument logscale=False in plot_heatmap() or plot_surface()

Combos of three of more drugs are supported for most models. Usage is similar, except for the following points

  1. Models should be imported as from synergy.higher import MuSyC # etc...
  2. Doses are not separated as d1 and d2, but should be in a single M x N array (M is the number of samples, N is the number of drugs). So to calculate synergy you use, E)
  3. Isosurface plots are supported if you have plotly installed, as model.plotly_isosurfaces(). For parametric models, you have to pass d as an argument, for dose-dependent models, d is remembered from,E).


ADD COMMENTlink modified 8 weeks ago • written 9 weeks ago by dwooten10

Hi Dwooten,

I really appreciate your help. Thank you very much for creating the python package and your explanation.

It is not clear for me how to create a drug response dataset that it passed in the fit method.

Can you give a link, article that I can understand how to create that dataset?

Thank you very much!

ADD REPLYlink written 9 weeks ago by carlos_marchi60

Hi Carlos,

There are three required arguments for, d2, E). d1 should be an array with all the concentrations of drug 1, and likewise for d2. E should be an array, with length equal to both d1 and d2, containing the response at those concentrations.

I added an example file containing that data here:

Each row (beyond the header) in that file corresponds to a single measurement.

ADD REPLYlink written 8 weeks ago by dwooten10
Please log in to add an answer.


Use of this site constitutes acceptance of our User Agreement and Privacy Policy.
Powered by Biostar version 2.3.0
Traffic: 1456 users visited in the last hour