Examples

Example of loading and running a full-format dataset from DrugComb, AstraZeneca study, breast tissue. The script takes a few minutes per iteration (n=3 iterations are suggested for testing).

from acda.method_functions import *

sdatadir = '../docs/examples/data/'

df_full = pd.read_csv(
    sdatadir + 'DrugComb_ASTRAZENECA_breast.csv.gz').set_index(['MODEL', 'DRUG1', 'DRUG2', 'TISSUE'])

df, dfC, dfS, Z = prepareFromDCfull(df_full, 1000, returnMore=True, random_state=0)

df_DC_AZ_breast = MonteCarloCrossValidation(df, n=3)[0]
print(df_DC_AZ_breast)

mean

sem

ACDA

0.867

0.028

CDA

0.521

0.039

EN

0.829

0.020

EN-ACDA

0.894

0.021

Example of Monte Carlo cross-validation on an alternative format dataset: GDSC2 subset of breast tissue with the CDA synergy pairs.

from acda.method_functions import *

sdatadir = '../docs/examples/data/'

df_drug_sensitivity_GDSC2 = pd.read_csv(
    sdatadir + 'GDSC2_drug_sensitivity.csv.gz').set_index(['MODEL', 'DRUG'])

se_drug_synergy_CDA = pd.read_csv(
    sdatadir + 'CDA_synergy_pairs.csv.gz').set_index(['MODEL', 'DRUG1', 'DRUG2'])['SYNERGY_SCORE']

se_tissue_annotation_GDSC2 = pd.read_csv(
    sdatadir + 'GDSC2_tissue_annotation.csv.gz').set_index(['MODEL'])['TISSUE']

se_drug_targets_GDSC2 = pd.read_csv(
    sdatadir + 'GDSC2_drug_targets.csv.gz').set_index(['DRUG'])['TARGETS']

se_models_mutations_GDSC2 = pd.read_csv(
    sdatadir + 'GDSC2_model_mutations.csv.gz').set_index(['MODEL'])['MUTATIONS']

dfTas_GDSC2_breast = makeCDAformattedData('Breast', 
                                          se_drug_synergy_CDA, 
                                          se_tissue_annotation_GDSC2, 
                                          df_drug_sensitivity_GDSC2, 
                                          se_models_mutations_GDSC2, 
                                          se_drug_targets_GDSC2, 
                                          'GDSC2', 
                                          sensitivity_metric='LNIC50')
print(dfTas_GDSC2_breast)

df_GDSC2_breast = MonteCarloCrossValidation(dfTas_GDSC2_breast, sample_non_synergy=True)[0]
print(df_GDSC2_breast)

Example of generating predictions on the alternative format dataset and visualizing them on a heatmap.

from acda.method_functions import *
from acda.plot_functions import *

sdatadir = '../docs/examples/data/'

df_drug_sensitivity_GDSC2 = pd.read_csv(
    sdatadir + 'GDSC2_drug_sensitivity.csv.gz').set_index(['MODEL', 'DRUG'])

se_drug_synergy_CDA = pd.read_csv(
    sdatadir + 'CDA_synergy_pairs.csv.gz').set_index(['MODEL', 'DRUG1', 'DRUG2'])['SYNERGY_SCORE']

se_tissue_annotation_GDSC2 = pd.read_csv(
    sdatadir + 'GDSC2_tissue_annotation.csv.gz').set_index(['MODEL'])['TISSUE']

se_drug_targets_GDSC2 = pd.read_csv(
    sdatadir + 'GDSC2_drug_targets.csv.gz').set_index(['DRUG'])['TARGETS']

se_models_mutations_GDSC2 = pd.read_csv(
    sdatadir + 'GDSC2_model_mutations.csv.gz').set_index(['MODEL'])['MUTATIONS']

dfTas_GDSC2_breast, dfC_G2, dfS_G2, Z_G2 = makeCDAformattedData('Breast', 
                                                                se_drug_synergy_CDA, 
                                                                se_tissue_annotation_GDSC2, 
                                                                df_drug_sensitivity_GDSC2, 
                                                                se_models_mutations_GDSC2, 
                                                                se_drug_targets_GDSC2, 
                                                                'GDSC2', 
                                                                sensitivity_metric='LNIC50', 
                                                                returnMore=True)

se_predicted = pd.concat([sample_train_predicted(dfTas_GDSC2_breast, i) for i in range(3)], 
                         axis=1).unstack(0).groupby(level=1, axis=1).agg(np.nanmean).stack(
                             ).reorder_levels([3, 0, 1, 2]).sort_index()
print(se_predicted)
se_predicted.to_csv('predicted.csv')

fig = plotHeatmapPredictedSynergy(dfC_G2, Z_G2, se_predicted[se_predicted>=0.95].index.droplevel(-1).values)
fig.savefig('heatmap.png', dpi=300)

temp = dfTas_GDSC2_breast['SYNERGY_SCORE'].droplevel(['MODEL', 'TISSUE'])
fig = plotDendrogramWithKnownPairs(Z_G2, dfC_G2, temp[temp==1].index.unique())
fig.savefig('dendrogram.png', dpi=300)

Load data from DrugComb. The file “drugcomb_data_v1.5.csv” is 1.3Gb (compressed is only 170Mb) and can be downloaded from https://drugcomb.fimm.fi/jing/summary_v_1_5.csv.

from acda.general_functions import *

keepMonotherapyData = False

dir = '../data/'

if keepMonotherapyData:
    tempfname = dir + 'cacheDrugCombWithAllMono.pklz'
else:
    tempfname = dir + 'cacheDrugComb.pklz'

if not os.path.exists(dir):
    os.makedirs(dir)

if not os.path.isfile(tempfname):
    # Data was downloaded from "https://drugcomb.fimm.fi/jing/summary_v_1_5.csv"
    df_DC = pd.read_csv(dir + 'drugcomb_data_v1.5.csv.gz', index_col=0)
    df_DC = df_DC.set_index(['study_name', 'cell_line_name', 'drug_row', 'drug_col', 'tissue_name'])
    df_DC.index.names = ['STUDY', 'MODEL', 'DRUG1', 'DRUG2', 'TISSUE']

    # Remove entries which are duplicates
    df_DC = df_DC.sort_index(level='DRUG2', ascending=True)
    df_DC = df_DC.loc[~df_DC.index.duplicated(keep='first')]
    df_DC = df_DC.sort_index()

    # Remove entries where DRUG1 is equal to DRUG2
    df_DC = df_DC.loc[df_DC.index.to_frame()['DRUG1'] != df_DC.index.to_frame()['DRUG2']]

    # Remove entries with no combinations measures, i.e. monotherapy experiments
    if not keepMonotherapyData:
        df_DC = df_DC.loc[pd.MultiIndex.from_frame(df_DC.index.to_frame().dropna())]

    dfgp = getGeneToProteinNameAssociation()
    convertProteinNamesToGenes(df_DC['drug_row_target_name'], dfgp)
    convertProteinNamesToGenes(df_DC['drug_col_target_name'], dfgp)

    # Keep subset of the columns, rename selected, below is the list of "not selected" columns:
    # ['conc_row_unit', 'conc_col_unit', 'css_row', 'css_col', 'css_ri', 'S_sum', 'S_mean', 
    # 'S_max', 'drug_row_clinical_phase', 'drug_col_clinical_phase']
    df_DC = df_DC[['ic50_row', 'ic50_col', 'ri_row', 'ri_col', 'synergy_zip', 'synergy_loewe', 
                   'synergy_hsa', 'synergy_bliss', 'drug_row_target_name', 'drug_col_target_name']]
    df_DC.columns = ['IC50_DRUG1', 'IC50_DRUG2', 'AUC_DRUG1', 'AUC_DRUG2', 'SYNERGY_ZIP', 
                     'SYNERGY_LOEWE', 'SYNERGY_HSA', 'SYNERGY_BLISS', 'DRUG1_TARGETS', 'DRUG2_TARGETS']
    
    df_DC.to_pickle(tempfname)
else:
    df_DC = pd.read_pickle(tempfname)
    
print(df_DC)