{ "cells": [ { "cell_type": "markdown", "id": "943eec30-eca9-499a-9262-e215ca349f64", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "# Single sample intracellular signalling network inference\n", "\n", "In this notebook we showcase how to use the advanced CARNIVAL implementation available in CORNETO. This implementation extends the capabilities of the original CARNIVAL method by enabling advanced modelling and injection of knowledge for hypothesis generation. We will use a dataset consisting of 6 samples of hepatic stellate cells (HSC) where three of them were activated by the cytokine Transforming growth factor (TGF-β). \n", "\n", "In the first part, we will show how to estimate Transcription Factor activities from gene expression data, following the [Decoupler tutorial](https://decoupler-py.readthedocs.io/en/latest/notebooks/bulk.html) for functional analysis. Then, we will use the CARNIVAL method available in CORNETO to infer a network from TFs to receptors, assuming that we don't really know which treatment was used." ] }, { "cell_type": "code", "execution_count": 1, "id": "95502198-c8a0-4d71-a5e9-709bad72ec00", "metadata": {}, "outputs": [], "source": [ "# --- Saezlab tools ---\n", "# https://decoupler-py.readthedocs.io/\n", "import gzip\n", "import os\n", "import shutil\n", "import tempfile\n", "import urllib.request\n", "\n", "import decoupler as dc\n", "import numpy as np\n", "\n", "# https://omnipathdb.org/\n", "import omnipath as op\n", "\n", "# Additional packages\n", "import pandas as pd\n", "\n", "# --- Additional libs ---\n", "# Pydeseq for differential expression analysis\n", "from pydeseq2.dds import DefaultInference, DeseqDataSet\n", "from pydeseq2.ds import DeseqStats\n", "\n", "# https://saezlab.github.io/\n", "import corneto as cn" ] }, { "cell_type": "code", "execution_count": 2, "id": "5bb37ac8-1631-4cae-a462-c23ff2ae8171", "metadata": {}, "outputs": [], "source": [ "max_time = 300\n", "seed = 0" ] }, { "cell_type": "code", "execution_count": 3, "id": "04892cd1-a822-4cfb-ba15-29c647928f92", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
GeneNameDDX11L1WASH7PMIR6859-1MIR1302-11MIR1302-9FAM138AOR4G4POR4G11POR4F5RP11-34P13.7...MT-ND4MT-THMT-TS2MT-TL2MT-ND5MT-ND6MT-TEMT-CYBMT-TTMT-TP
25_HSCs-Ctrl1091010000033...931923424764935446617184130254099258475
26_HSCs-Ctrl20121400000066...1149143553884366469821106149262679253396
27_HSCs-Ctrl30141000000052...1553653774384808565031860203389559282448
31_HSCs-TGFb10111600000054...1108663734414816032519496144766283172341
32_HSCs-TGFb205800000044...454882393313432744290546242753596216
33_HSCs-TGFb3012500000032...707043444534974544313796107743415192243
\n", "

6 rows × 64253 columns

\n", "
" ], "text/plain": [ "GeneName DDX11L1 WASH7P MIR6859-1 MIR1302-11 MIR1302-9 FAM138A \\\n", "25_HSCs-Ctrl1 0 9 10 1 0 0 \n", "26_HSCs-Ctrl2 0 12 14 0 0 0 \n", "27_HSCs-Ctrl3 0 14 10 0 0 0 \n", "31_HSCs-TGFb1 0 11 16 0 0 0 \n", "32_HSCs-TGFb2 0 5 8 0 0 0 \n", "33_HSCs-TGFb3 0 12 5 0 0 0 \n", "\n", "GeneName OR4G4P OR4G11P OR4F5 RP11-34P13.7 ... MT-ND4 MT-TH \\\n", "25_HSCs-Ctrl1 0 0 0 33 ... 93192 342 \n", "26_HSCs-Ctrl2 0 0 0 66 ... 114914 355 \n", "27_HSCs-Ctrl3 0 0 0 52 ... 155365 377 \n", "31_HSCs-TGFb1 0 0 0 54 ... 110866 373 \n", "32_HSCs-TGFb2 0 0 0 44 ... 45488 239 \n", "33_HSCs-TGFb3 0 0 0 32 ... 70704 344 \n", "\n", "GeneName MT-TS2 MT-TL2 MT-ND5 MT-ND6 MT-TE MT-CYB MT-TT MT-TP \n", "25_HSCs-Ctrl1 476 493 54466 17184 1302 54099 258 475 \n", "26_HSCs-Ctrl2 388 436 64698 21106 1492 62679 253 396 \n", "27_HSCs-Ctrl3 438 480 85650 31860 2033 89559 282 448 \n", "31_HSCs-TGFb1 441 481 60325 19496 1447 66283 172 341 \n", "32_HSCs-TGFb2 331 343 27442 9054 624 27535 96 216 \n", "33_HSCs-TGFb3 453 497 45443 13796 1077 43415 192 243 \n", "\n", "[6 rows x 64253 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We need to download the dataset, available at GEO GSE151251\n", "url = \"https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE151251&format=file&file=GSE151251%5FHSCs%5FCtrl%2Evs%2EHSCs%5FTGFb%2Ecounts%2Etsv%2Egz\"\n", "\n", "adata = None\n", "with tempfile.TemporaryDirectory() as tmpdirname:\n", " # Path for the gzipped file in the temp folder\n", " gz_file_path = os.path.join(tmpdirname, \"counts.txt.gz\")\n", "\n", " # Download the file\n", " with urllib.request.urlopen(url) as response:\n", " with open(gz_file_path, \"wb\") as out_file:\n", " shutil.copyfileobj(response, out_file)\n", "\n", " # Decompress the file\n", " decompressed_file_path = gz_file_path[:-3] # Removing '.gz' extension\n", " with gzip.open(gz_file_path, \"rb\") as f_in:\n", " with open(decompressed_file_path, \"wb\") as f_out:\n", " shutil.copyfileobj(f_in, f_out)\n", "\n", " adata = pd.read_csv(decompressed_file_path, index_col=2, sep=\"\\t\").iloc[:, 5:].T\n", "\n", "adata" ] }, { "cell_type": "markdown", "id": "ed7df83c-ccf2-43ab-95d7-be55d36669be", "metadata": {}, "source": [ "## Data preprocessing\n", "\n", "We will use AnnData and PyDeseq2 to pre-process the data and compute differential expression between control and tretament" ] }, { "cell_type": "code", "execution_count": 4, "id": "0c49ddc4-55d7-49f3-bd40-487c7535fbda", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\pablo\\miniconda3\\envs\\corneto-dev-mini\\Lib\\site-packages\\anndata\\_core\\anndata.py:1756: UserWarning: Variable names are not unique. To make them unique, call `.var_names_make_unique`.\n", " utils.warn_names_duplicates(\"var\")\n", "C:\\Users\\pablo\\miniconda3\\envs\\corneto-dev-mini\\Lib\\site-packages\\anndata\\utils.py:261: UserWarning: Suffix used (-[0-9]+) to deduplicate index values may make index values difficult to interpret. There values with a similar suffixes in the index. Consider using a different delimiter by passing `join={delimiter}`Example key collisions generated by the make_index_unique algorithm: ['SNORD116-1', 'SNORD116-2', 'SNORD116-3', 'SNORD116-4', 'SNORD116-5']\n", " warnings.warn(\n" ] }, { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 6 × 64253" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from anndata import AnnData\n", "\n", "adata = AnnData(adata, dtype=np.float32)\n", "adata.var_names_make_unique()\n", "adata" ] }, { "cell_type": "code", "execution_count": 5, "id": "34ee8218-6f15-4b09-a44d-150970c83c45", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
conditionsample_id
25_HSCs-Ctrl1control25
26_HSCs-Ctrl2control26
27_HSCs-Ctrl3control27
31_HSCs-TGFb1treatment31
32_HSCs-TGFb2treatment32
33_HSCs-TGFb3treatment33
\n", "
" ], "text/plain": [ " condition sample_id\n", "25_HSCs-Ctrl1 control 25\n", "26_HSCs-Ctrl2 control 26\n", "27_HSCs-Ctrl3 control 27\n", "31_HSCs-TGFb1 treatment 31\n", "32_HSCs-TGFb2 treatment 32\n", "33_HSCs-TGFb3 treatment 33" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Process treatment information\n", "adata.obs[\"condition\"] = [\n", " \"control\" if \"-Ctrl\" in sample_id else \"treatment\" for sample_id in adata.obs.index\n", "]\n", "\n", "# Process sample information\n", "adata.obs[\"sample_id\"] = [sample_id.split(\"_\")[0] for sample_id in adata.obs.index]\n", "\n", "# Visualize metadata\n", "adata.obs" ] }, { "cell_type": "code", "execution_count": 6, "id": "92c0ad7c-acb6-49b8-b537-0f772a631b9a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 6 × 19713\n", " obs: 'condition', 'sample_id'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Obtain genes that pass the thresholds\n", "genes = dc.filter_by_expr(\n", " adata, group=\"condition\", min_count=10, min_total_count=15, large_n=1, min_prop=1\n", ")\n", "\n", "# Filter by these genes\n", "adata = adata[:, genes].copy()\n", "adata" ] }, { "cell_type": "code", "execution_count": 7, "id": "290781e0-acef-440f-a0a6-1ff123d41a8e", "metadata": {}, "outputs": [], "source": [ "# Estimation of differential expression\n", "\n", "inference = DefaultInference()\n", "dds = DeseqDataSet(\n", " adata=adata,\n", " design_factors=\"condition\",\n", " refit_cooks=True,\n", " inference=inference,\n", ")" ] }, { "cell_type": "code", "execution_count": 8, "id": "96b44f6e-9b7e-4252-a0ec-8b8134361865", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Fitting size factors...\n", "... done in 0.01 seconds.\n", "\n", "Fitting dispersions...\n", "... done in 11.68 seconds.\n", "\n", "Fitting dispersion trend curve...\n", "... done in 1.20 seconds.\n", "\n", "Fitting MAP dispersions...\n", "... done in 10.25 seconds.\n", "\n", "Fitting LFCs...\n", "... done in 5.81 seconds.\n", "\n", "Calculating cook's distance...\n", "... done in 0.03 seconds.\n", "\n", "Replacing 0 outlier genes.\n", "\n" ] } ], "source": [ "# Compute LFCs\n", "dds.deseq2()" ] }, { "cell_type": "code", "execution_count": 9, "id": "ec048254-a549-4b29-8da5-f66a0882621b", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Running Wald tests...\n", "... done in 2.97 seconds.\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Log2 fold change & Wald test p-value: condition treatment vs control\n", " baseMean log2FoldChange lfcSE stat pvalue \\\n", "GeneName \n", "WASH7P 10.349784 -0.011129 0.651922 -0.017071 0.986380 \n", "MIR6859-1 10.114621 0.000625 0.657581 0.000950 0.999242 \n", "RP11-34P13.7 45.731312 0.078209 0.324512 0.241005 0.809551 \n", "RP11-34P13.8 29.498379 -0.065178 0.393711 -0.165549 0.868512 \n", "CICP27 106.032659 0.150594 0.223024 0.675239 0.499524 \n", "... ... ... ... ... ... \n", "MT-ND6 17914.984474 -0.435304 0.278796 -1.561372 0.118436 \n", "MT-TE 1281.293477 -0.332495 0.288073 -1.154204 0.248416 \n", "MT-CYB 54955.449372 -0.313285 0.286900 -1.091966 0.274848 \n", "MT-TT 204.692221 -0.485882 0.220606 -2.202488 0.027631 \n", "MT-TP 345.049755 -0.460675 0.161701 -2.848936 0.004387 \n", "\n", " padj \n", "GeneName \n", "WASH7P 0.991409 \n", "MIR6859-1 0.999520 \n", "RP11-34P13.7 0.877381 \n", "RP11-34P13.8 0.917121 \n", "CICP27 0.637374 \n", "... ... \n", "MT-ND6 0.211001 \n", "MT-TE 0.380057 \n", "MT-CYB 0.411271 \n", "MT-TT 0.061644 \n", "MT-TP 0.012217 \n", "\n", "[19713 rows x 6 columns]\n" ] } ], "source": [ "stat_res = DeseqStats(\n", " dds, contrast=[\"condition\", \"treatment\", \"control\"], inference=inference\n", ")\n", "\n", "stat_res.summary()" ] }, { "cell_type": "code", "execution_count": 10, "id": "0f868f1b-faf1-47a0-b14f-1fae209a5697", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
baseMeanlog2FoldChangelfcSEstatpvaluepadj
GeneName
WASH7P10.349784-0.0111290.651922-0.0170710.9863800.991409
MIR6859-110.1146210.0006250.6575810.0009500.9992420.999520
RP11-34P13.745.7313120.0782090.3245120.2410050.8095510.877381
RP11-34P13.829.498379-0.0651780.393711-0.1655490.8685120.917121
CICP27106.0326590.1505940.2230240.6752390.4995240.637374
.....................
MT-ND617914.984474-0.4353040.278796-1.5613720.1184360.211001
MT-TE1281.293477-0.3324950.288073-1.1542040.2484160.380057
MT-CYB54955.449372-0.3132850.286900-1.0919660.2748480.411271
MT-TT204.692221-0.4858820.220606-2.2024880.0276310.061644
MT-TP345.049755-0.4606750.161701-2.8489360.0043870.012217
\n", "

19713 rows × 6 columns

\n", "
" ], "text/plain": [ " baseMean log2FoldChange lfcSE stat pvalue \\\n", "GeneName \n", "WASH7P 10.349784 -0.011129 0.651922 -0.017071 0.986380 \n", "MIR6859-1 10.114621 0.000625 0.657581 0.000950 0.999242 \n", "RP11-34P13.7 45.731312 0.078209 0.324512 0.241005 0.809551 \n", "RP11-34P13.8 29.498379 -0.065178 0.393711 -0.165549 0.868512 \n", "CICP27 106.032659 0.150594 0.223024 0.675239 0.499524 \n", "... ... ... ... ... ... \n", "MT-ND6 17914.984474 -0.435304 0.278796 -1.561372 0.118436 \n", "MT-TE 1281.293477 -0.332495 0.288073 -1.154204 0.248416 \n", "MT-CYB 54955.449372 -0.313285 0.286900 -1.091966 0.274848 \n", "MT-TT 204.692221 -0.485882 0.220606 -2.202488 0.027631 \n", "MT-TP 345.049755 -0.460675 0.161701 -2.848936 0.004387 \n", "\n", " padj \n", "GeneName \n", "WASH7P 0.991409 \n", "MIR6859-1 0.999520 \n", "RP11-34P13.7 0.877381 \n", "RP11-34P13.8 0.917121 \n", "CICP27 0.637374 \n", "... ... \n", "MT-ND6 0.211001 \n", "MT-TE 0.380057 \n", "MT-CYB 0.411271 \n", "MT-TT 0.061644 \n", "MT-TP 0.012217 \n", "\n", "[19713 rows x 6 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results_df = stat_res.results_df\n", "results_df" ] }, { "cell_type": "markdown", "id": "f3f0ed74-4941-482f-a453-1fcb396ab2e9", "metadata": {}, "source": [ "## Prior knowledge with Decoupler and Omnipath" ] }, { "cell_type": "code", "execution_count": 11, "id": "5fe1c1bc-69a2-4514-8c58-f19688ceaee4", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sourcetargetweightPMID
0MYCTERT110022128;10491298;10606235;10637317;10723141;1...
1SPI1BGLAP110022617
2SMAD3JUN110022869;12374795
3SMAD4JUN110022869;12374795
4STAT5AIL2110022878;11435608;17182565;17911616;22854263;2...
...............
43173NFKBhsa-miR-143-3p119472311
43174AP1hsa-miR-206119721712
43175NFKBhsa-miR-21-5p120813833;22387281
43176NFKBhsa-miR-224-5p123474441;23988648
43177AP1hsa-miR-144123546882
\n", "

43178 rows × 4 columns

\n", "
" ], "text/plain": [ " source target weight \\\n", "0 MYC TERT 1 \n", "1 SPI1 BGLAP 1 \n", "2 SMAD3 JUN 1 \n", "3 SMAD4 JUN 1 \n", "4 STAT5A IL2 1 \n", "... ... ... ... \n", "43173 NFKB hsa-miR-143-3p 1 \n", "43174 AP1 hsa-miR-206 1 \n", "43175 NFKB hsa-miR-21-5p 1 \n", "43176 NFKB hsa-miR-224-5p 1 \n", "43177 AP1 hsa-miR-144 1 \n", "\n", " PMID \n", "0 10022128;10491298;10606235;10637317;10723141;1... \n", "1 10022617 \n", "2 10022869;12374795 \n", "3 10022869;12374795 \n", "4 10022878;11435608;17182565;17911616;22854263;2... \n", "... ... \n", "43173 19472311 \n", "43174 19721712 \n", "43175 20813833;22387281 \n", "43176 23474441;23988648 \n", "43177 23546882 \n", "\n", "[43178 rows x 4 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Retrieve CollecTRI gene regulatory network (through Omnipath)\n", "collectri = dc.get_collectri(organism=\"human\", split_complexes=False)\n", "collectri" ] }, { "cell_type": "code", "execution_count": 12, "id": "c749a42b-ecd9-4f33-acd4-242cb8237d8d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
GeneNameWASH7PMIR6859-1RP11-34P13.7RP11-34P13.8CICP27FO538757.2AP006222.2RP4-669L17.10MTND1P23MTND2P28...MT-ND4MT-THMT-TS2MT-TL2MT-ND5MT-ND6MT-TEMT-CYBMT-TTMT-TP
treatment.vs.control-0.0170710.000950.241005-0.1655490.675239-1.6454122.041302-0.376843-1.994386-0.498507...-1.4359730.7549131.1390021.167032-1.242582-1.561372-1.154204-1.091966-2.202488-2.848936
\n", "

1 rows × 19713 columns

\n", "
" ], "text/plain": [ "GeneName WASH7P MIR6859-1 RP11-34P13.7 RP11-34P13.8 \\\n", "treatment.vs.control -0.017071 0.00095 0.241005 -0.165549 \n", "\n", "GeneName CICP27 FO538757.2 AP006222.2 RP4-669L17.10 \\\n", "treatment.vs.control 0.675239 -1.645412 2.041302 -0.376843 \n", "\n", "GeneName MTND1P23 MTND2P28 ... MT-ND4 MT-TH MT-TS2 \\\n", "treatment.vs.control -1.994386 -0.498507 ... -1.435973 0.754913 1.139002 \n", "\n", "GeneName MT-TL2 MT-ND5 MT-ND6 MT-TE MT-CYB \\\n", "treatment.vs.control 1.167032 -1.242582 -1.561372 -1.154204 -1.091966 \n", "\n", "GeneName MT-TT MT-TP \n", "treatment.vs.control -2.202488 -2.848936 \n", "\n", "[1 rows x 19713 columns]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mat = results_df[[\"stat\"]].T.rename(index={\"stat\": \"treatment.vs.control\"})\n", "mat" ] }, { "cell_type": "code", "execution_count": 13, "id": "ad5a1f0e-e15d-49b8-bb47-47819e02fd99", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running ulm on mat with 1 samples and 19713 targets for 655 sources.\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABL1AHRAIREAP1APEX1ARARID1AARID3AARID3BARID4A...ZNF362ZNF382ZNF384ZNF395ZNF436ZNF699ZNF76ZNF804AZNF91ZXDC
treatment.vs.control-2.181499-1.556123-1.824668-1.983679-2.6731710.235021-3.935460.8705911.649556-0.612672...-0.0631382.1230821.887668-1.1411221.5718891.277879-0.1169111.926350.91651-2.744753
\n", "

1 rows × 655 columns

\n", "
" ], "text/plain": [ " ABL1 AHR AIRE AP1 APEX1 \\\n", "treatment.vs.control -2.181499 -1.556123 -1.824668 -1.983679 -2.673171 \n", "\n", " AR ARID1A ARID3A ARID3B ARID4A ... \\\n", "treatment.vs.control 0.235021 -3.93546 0.870591 1.649556 -0.612672 ... \n", "\n", " ZNF362 ZNF382 ZNF384 ZNF395 ZNF436 \\\n", "treatment.vs.control -0.063138 2.123082 1.887668 -1.141122 1.571889 \n", "\n", " ZNF699 ZNF76 ZNF804A ZNF91 ZXDC \n", "treatment.vs.control 1.277879 -0.116911 1.92635 0.91651 -2.744753 \n", "\n", "[1 rows x 655 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tf_acts, tf_pvals = dc.run_ulm(mat=mat, net=collectri, verbose=True)\n", "tf_acts" ] }, { "cell_type": "code", "execution_count": 14, "id": "657ee3c1-4ad9-42f5-b566-de15547f5084", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVAAAAINCAYAAABoECdtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABuFklEQVR4nO3dd1hTZ/sH8G8AmWEJIihLQFFw4KgUbBVUVtE6qAUFC6KI1r0VLSgqiNoXV91hWEWxipbqW7eg1j1Q68JRJ1AVBUSQmd8f/HJeYgIEkpBA7s91nesy5zznyXMo3H3Oum8Wl8vlghBCSL0pyXoAhBDSVFEAJYSQBqIASgghDUQBlBBCGogCKCGENBAFUEIIaSAKoIQQ0kAUQAkhpIFUZD2ApqKyshJZWVnQ1tYGi8WS9XAIkQoul4sPHz6gTZs2UFISbX716dMnlJaWSmU8qqqqUFdXl0rfkkABVERZWVkwMzOT9TAIaRQvXryAqalpne0+ffqENhpsvEeFVMZhbGyMf/75R26DKAVQEWlrawOo+sXS0dGR8WgIkY6CggKYmZkxv+91KS0txXtUIEG5HTQlfEWwCJUIyvkHpaWlFECbOt5pu46OTq0B9KvB6Y01JFLNuT/6yXoIzUp9L1NptVCGJktZsmPgVkBKE1uJoQBKCBEbS4UFJQnfG2Bx5f9eA92FJ4SQBpK7ABoUFIShQ4cy/2axWGCxWFBRUYG5uTkmTpyI9+/f8+1jaWnJtOMt1S+Ab926FS4uLtDR0QGLxUJeXl4jHhEhzR+rhZJUFnkn9yP09PREdnY2nj59iu3bt+OPP/7Ajz/+KNAuMjIS2dnZzHLjxg1mW1FRETw9PREWFtaYQyeENHNyfw1UTU0NxsbGAABTU1P4+voiISFBoJ22tjbT7nPTp08HAKSlpUlplIQoNiVlFpSUJHvNUqlS/q+Byn0Are7Jkyc4cuQIWrRoIfXvKikpQUlJCfO5oKBA6t9JCGla5P4U/tChQ2Cz2dDQ0IC1tTXu3r2LefPmCbSbN28e2Gw2s6xbt06s742Ojoauri6z0EP0hNSM1YIllUXeyf0M1NXVFZs2bUJRURG2b9+OzMxMTJkyRaDdnDlzEBQUxHw2NDQU63sXLFiAmTNnMp95DxgTQgiP3AdQLS0t2NjYAADWrVsHV1dXLFmyBEuXLuVrZ2hoyLSTBDU1NaipqUmsP0KaMyUVxbwGKven8J+LiIjA6tWrkZWVJeuhEEL+n6Kewje5AOri4gJ7e3tERUWJvE9OTg4yMjLw6NEjAMDt27eRkZGBd+/eSWuYhBAF0OQCKADMnDkT27Ztw4sXL0Rqv3nzZnTv3h0hISEAgL59+6J79+5ITU2V5jAJURhKyqyq03hJLsryPwNlcblcrqwH0RQUFBRAV1cX+fn5lExEDlEyEckQ9ff88/aH23eGlrJkk4l8rKiA98O/RR6LLMj9TaSmhv6QiSJiKbPAkvCMkQX5n4E2yVN4QgiRBzQDJYSITUlZ8tcslWgGSgghzRfNQJuh2ZuKZD2ERrd6oqash6DQWEossCT8IH1TSKhMAZQQIjaWshJYypI9oWVB/h8QolN4QghpIIkFUF72+BUrVvCtP3jwIFOgKi0tjS9rvIGBAfr374+//vqLb587d+7Ax8eHyTS/Zs0aod/Hy1xfHe87hGWdf/ToEbS1taGnp9fQwySECMG7iSTpRd5JdAaqrq6OmJgYgZIbn3vw4AGys7ORlpaGVq1awdvbG69fv2a2FxUVwcrKCitWrKgxSXJ9lZWVYeTIkfj6668l0h8hhEg0gA4cOBDGxsaIjo6utZ2RkRGMjY3RpUsXLFq0CPn5+bh06RKz/YsvvsCqVavg5+cnsYxIixYtQseOHfH9999LpD9CyP+wWCzmRpLEFglX+ZQGiQZQZWVlREVFYf369Xj58mWd7YuKihAfHw8AUs0yf+rUKfz222/45ZdfRN6npKQEBQUFfAshhFQn8bvww4YNg4ODAyIiIsDhcIS24VXMLCoqApfLRc+ePTFgwIB6fxcvW311FRUVfJ9zc3MRFBSEnTt31ut92ujoaCxZsqTeYyJEEbGUIfFrliz5vwkvnbvwMTExSExMxN27d4VuP3v2LK5fv47du3fDwsICCQkJDZqBurq6IiMjg2/Zvn07X5uQkBCMGjUKffv2rVffCxYsQH5+PrOImvmJEKI4pPIcaN++feHh4YGwsDC+Mhs87dq1g56eHjp06IBPnz5h2LBh+Pvvv+t9vbN6tnqezy8dnDp1CqmpqVi9ejUAgMvlorKyEioqKti6dSuCg4OF9k0Z6QkRnVSSiTSBB+ml9hzoihUr8Mcff+D8+fO1ths9ejQqKyuxceNGqYzjwoULfDPUyMhIaGtrIyMjA8OGDZPKdxKiaFhKSlJZ5J3U3kTq0qUL/P39sX79+lrbKSkpYfr06Vi2bBlCQ0OhqamJ0tJS5vS/tLQUr169QkZGBthsdr3rHnXq1Inv89WrV6GkpITOnTvX74AIIeQzUg3xS5cuhSj5moODg1FWVoYNGzYAALKystC9e3d0794d2dnZWL16Nbp3745x48ZJc7iEkAaS+CNMUni3XhooI72I6pupW5YomQhpqIZmpE/v6wi2imRPaAvLy9HvzCW5/pujZCKEELFJJR9oE7iJRAG0GaLZGCGNgwIoIURsUskH2gSugcr/cwKEECKnaAZKCBEbiyX55zZZLPmf31EAbcbmbS2W9RAaTcx4DVkPQaHRKTwhhDRxr169QkBAAAwMDKCpqQkHBwdcu3ZNat9HM1BCiNik8hhTZf36e//+Pfr06QNXV1f8+eefMDIywuPHj6VagaLRZqCilOD4vBzH5yVAeMuiRYsAVGW2d3V1RevWraGurg4rKyssWrQIZWVlAt9TXFwMfX19tGzZEsXFinNqS4iiiImJgZmZGeLj49G7d29YWlpiwIABsLa2ltp3NokZ6IMHD/jeRODlAG3RogV++OEH9OjRA3p6erh58yZCQkJQWVmJqKgovj7279+Pzp07g8vlIiUlBf7+/o16DIQ0Z9K8Bvp5MvOaMqWlpqbCw8MDI0aMQHp6Otq2bYsff/wRISEhEh1XdU0igBoZGQmdhltZWcHKyor5bGFhgbS0NJw9e1agLYfDQUBAALhcLjgcDgVQQpoIMzMzvs8RERFYvHixQLsnT55g06ZNmDlzJsLCwnD58mVMnToVampq+OGHH6QytiYRQEX16NEjHDlyBMOHD+db//jxY1y4cAEpKSngcrmYPn06njx5whd8P1dSUoKSkhLmM5X0IKRm0kg/x+vvxYsXfGegNeXpraysRK9evZizz+7du+POnTvYtGmT1AJoo96F55XgqL54eXnVuZ+pqSnfPrm5uXzbnZ2doa6ujvbt2+Prr79GZGQk3/a4uDh4eXkx10A9PT0RFxdX63dGR0dDV1eXWT7/vyAhpHHo6OjwLTUFUBMTE9jZ2fGt69SpE54/fy61sTVqABWlBIcwZ8+e5dtHX1+fb3tycjKuX7+OpKQkHD58mMk+D1TVSEpMTERAQACzLiAgAImJiQL1k6qjkh6EiE4e0tn16dMHDx484FuXmZkJCwsLSR4qn0Y9hRelBIcwvBIgNeHNDu3s7FBRUYHx48dj1qxZUFZWxtGjR/Hq1Sv4+vry7VNRUYFjx47VOAOmkh6EiE4eHqSfMWMGnJ2dERUVhe+//x6XL1/G1q1bsXXrVomOq7pm9yA9l8tFWVkZk8iZw+HAz89PYObr7+9fY9VQQkjT88UXX+DAgQPYvXs3OnfujKVLl2LNmjVSvWHcpG8i7dq1Cy1atECXLl2gpqaGa9euYcGCBfD19YWKigrevHmDP/74A6mpqQIlPAIDA+Ht7Y03b96gVatWMjoCQpoHeZiBAsCgQYMwaNAgiY6jNk06gKqoqCAmJgaZmZngcrmwsLDApEmTMGPGDADAjh07oKWlJbTmvKurK7S1tfHrr79i5syZjT10QkgzQCU9RNSUSnrwUDIRUl8NLelxfcRAsFu0kOhYCsvK0OO3E3L9N9ekZ6CkdhRUCJEuCqCEELGxlCSfTIRVQensCCGk2aIZKCFEbPJyF76xUQBt5sI4JXU3agaixtJLD7IkzXfh5Zn8j5AQQuQUzUAJIWJT1FN4ic5Ag4KCwGKxsGLFCr71Bw8eBItV9cP4PMu8gYEB+vfvj7/++qvGfvfs2QMWiyU0oz0AnD9/HsrKyvD09BTYlpubC09PT7Rp0wZqamowMzPD5MmTKT0dIURsEj+FV1dXR0xMDN6/f19ruwcPHiA7OxtpaWlo1aoVvL298fr1a4F2z549w+zZs/H111/X2FdcXBymTJmCc+fOCaSuUlJSwpAhQ5CamorMzEwkJCTgxIkTmDBhQsMOkBAiQB6yMcmCxAPowIEDYWxsjOjo6FrbGRkZwdjYGF26dMGiRYuQn5+PS5cu8bWpqKiAv78/lixZUmPy448fP2Lv3r2YOHEiBg0ahISEBL7t+vr6mDhxInr16gULCwsMGDAAP/74o9Cs9YQQUh8SD6DKysqIiorC+vXrRUpVV1RUhPj4eABVNY6qi4yMRKtWrTB27Nga909OToatrS1sbW0REBCA+Ph41PZ2alZWFlJSUtCvX79ax1VSUoKCggK+hRAiHO8uvKQXeSeVEQ4bNgwODg6IiIiosU31LPOxsbHo2bMnX9KPv/76CxwOB9u2bav1u3i1jgDA09MThYWFOHnypEC7kSNHQlNTE23btoWOjk6diZwpIz0hpC5SC/ExMTFITEzE3bt3hW4/e/Ysrl+/jt27d8PCwgIJCQnMDPTDhw8ICAjAtm3bYGhoWON3PHjwAJcvX4afnx+AquxMvr6+Qst1xMbG4vr16zh48CAeP35cZwYmykhPiOgU9Rqo1B5j6tu3Lzw8PBAWFoagoCCB7bws8x06dMCnT58wbNgw/P3331BTU8Pjx4/x9OlTDB48mGlfWVlZNWAVFTx48ADW1tbgcDgoLy9H27ZtmXZcLhctWrTA+/fv+Up/GBsbw9jYGB07doSBgQG+/vpr/PTTTzAxMRE6fspIT4jo6EF6KVixYgX++OMPnD9/vtZ2o0ePRmVlJTZu3AgA6NixI27fvs2XQf7bb79laiqZmZmhvLwcO3bswM8//8zX7ubNm7CwsMCuXbtq/D7eNdLqVTcJIaS+pPogfZcuXeDv74/169fX2k5JSQnTp0/HsmXLEBoaCk1NTYEM8ryaSLz1Bw8exPv37zF27Fjo6urytf3uu+/A4XAwefJk/Pe//8W///6LL774Amw2G3fv3sXcuXPRp08fWFpaSuxYCVFoLFbVIuk+5ZzU58hLly6t9a44T3BwMMrKyrBhwwaR+uVwOBg4cKBA8AQAHx8fZGRk4Pr169DQ0MC2bdvw1VdfoVOnTpg+fToGDRqEQ4cO1ftYCCGkOspIL6KmmJEeoGQipH4ampH+XugwaKtJNiP9h5IydNpyQK7/5uT/Ki0hhMgpSibSzNHMjDQGugtPCCGkXmgGSggRm6Kms6MAqkCW7CyT9RCkJiJAsjcwCBEFBVBCiNgU9RooBVBCiNhYSpI/5WbJf/ykm0iEENJQchlAX79+jdDQUJibm0NNTQ3Gxsbw8PDAhQsXAACWlpZMSRDea59btmxh9k9ISGBe/QSA7OxsjBo1Cra2tsxro4QQyVHUbExyGUB9fHxw8+ZNJCYmIjMzE6mpqXBxccG7d++YNpGRkcjOzsatW7cwdOhQTJgwAcnJyUL7KykpQatWrbBw4UJ069atsQ6DENLMyd010Ly8PJw7dw5paWlM1ngLCwv07t2br522tjaMjY0BAMuWLcPevXtx8OBB+Pr6CvRpaWmJtWvXAoDQXKGEEDEpKVUtku5TzsndCHlZ6g8ePFivdHPq6uooK5PcYzpU0oMQUhe5C6AqKipISEhAYmIi9PT00KdPH4SFheHWrVtC25eXlyMhIQG3b9/mKwkiLirpQYjoqpcql+Qi7+QugAJV10CzsrKQmpoKDw8PpKWloUePHnwVN+fNmwc2mw0NDQ1MmjQJc+bMQWhoqMTGQCU9CCF1kbtroDzq6upwc3ODm5sbwsPDMW7cOERERDDlQebMmYOgoCBoamrCxMRE4v+3opIehIhOUR+kl/8R/j87Ozt8/PiR+WxoaAgbGxu0adOmSUz1CWnOFPUxJrmbgebm5mLEiBEIDg5G165doa2tjatXr2LlypUYMmRIg/vNyMgAABQWFuLNmzfIyMiAqqoq7OzsJDRyQoiikbsAymaz4ejoiNjYWDx+/BhlZWUwMzNDSEgIwsLCGtxv9+7dmX9fu3YNSUlJsLCwwNOnTyUwakIUHEsKjzE1gXc55S6AqqmpITo6GtHR0TW2qSvoBQUFCZRSpsolhBBJk7sASqSHUr4RqZHGNcsmcA1U/ufIhBAip2gGSggRG4ulBJaEr1lKuj9pkP8REkKInKIZqIJprmU96PqujCmxJH/NsglcA6UASggRG72JRAghpF4kEkBFzSC/Z88egX3t7e3BYrH4EoXwREVFQVlZGStWrBDYlpCQwGRsUVZWhr6+PhwdHREZGYn8/Hy+ttUz2FdfJk2aJInDJ0ThKeqrnBIJoKJkkDczM0N8fDzffhcvXkROTg60tLSE9hsfH4+5c+fWmARZR0cH2dnZePnyJc6fP4/x48djx44dcHBwQFZWFtPuypUryM7OZpbjx48DAEaMGCHuoRNCFJjYAZSXQT4mJgaurq5M9vgFCxbA29ubaefv74/09HS+tHBxcXHw9/eHiorgpdj09HQUFxcjMjISHz9+xJkzZwTasFgsGBsbw8TEBJ06dcLYsWNx/vx5FBYWYu7cuUy7Vq1awdjYmFkOHToEa2trJuM9IURMLBavNKcEFwWYgYqaQb5169bw8PBAYmIiAKCoqAjJyckIDg4W2p7D4WDkyJFo0aIFRo4cCQ6HI9J4jIyM4O/vj9TUVFRUVAhsLy0txc6dOxEcHFxrFifKSE8IqYvYAbQ+GeSDg4ORkJAALpeLffv2wdraGg4ODgLtCgoKsH//fgQEBAAAAgICsG/fPpGDWMeOHfHhwwfk5uYKbDt48CDy8vIE3pX/HGWkJ0R0dA1UDKJkkAcAb29vFBYW4syZM4iLi6tx9pmUlAQrKyumgqaDgwOsrKyE3oQShpc4RNgMk8PhwMvLC23atKm1D8pIT0jTFR0dDRaLJfUS5hJ7jImXQT48PBznz59HUFAQIiIi+NqoqKhg9OjRiIiIwKVLl+Dv7y+0r7i4ONy5cwcqKirMcufOHZFP4+/duwcdHR0YGBjwrX/27BlOnDiBcePG1dmHmpoadHR0+BZCSA14VTklvTTAlStXsHXrVnTt2lXCBylIas+Bfp5Bnic4OBjp6ekYMmQI9PX1Bbbfvn0bV69eRVpaGjIyMpjlzJkzuHLlCv7+++9av/f169dISkrC0KFDofTZf4D4+HgYGRnx3dwihIhPXorKFRYWwt/fH9u2bRMaXyRN7DeR6ptBvlOnTnj79i00NTWF9sfhcNC7d2/07dtXYJuTkxM4HA5iY2MBVJ2q5+TkgMvlIi8vDxcuXEBUVBR0dXUFnh2trKxEfHw8AgMDhd71J4TIp8/vfdRWr2zSpEnw9vbGwIEDsWzZMqmPTexI0pAM8p+fWvPw7pDPmzdP6HYfHx9ER0cjJiYGQNUPlldQTkdHB7a2tggMDMS0adMETrlPnDiB58+f13jdlRAiBilmpP/8Bm5ERAQWL14s0HzPnj24fv06rly5Itlx1ILFpVTtIikoKICuri7y8/Ob9PVQSiZCalPf33Ne+5cxU6CjIdkqtgXFJTCdtx4vXrzgG4uwGeiLFy/Qq1cvHDt2jLn57OLiAgcHB6xZs0ai46qOzmUJIWKTxmNHvP5EuYl77do1vH79Gj179mTWVVRU4MyZM9iwYQNKSkqgrKws0fEBFEAVDs3USHM0YMAA3L59m2/dmDFj0LFjR8ybN08qwROgAEoIkQTe65eS7lNE2tra6Ny5M986LS0tGBgYCKyXJEpnRwghDUQzUAUUuatc1kOQuHB/+lWWKTnMSJ+WliaZcdSCfusIIWKjonKEEELqhWaghBDxyeEpfGOQ+gw0KCgIQ4cO5Vu3b98+qKurY+XKlVi8eLHQlHY8Li4uQt+RLS+vuo6XkpICDw8PGBoagsViISMjQ6CPrVu3wsXFBTo6OmCxWMjLy5PcARJCFFajn8Jv374d/v7+2LBhA1/W+NqEhITwleTIzs5m3mf/+PEj+vTpI7RuEk9RURE8PT1rfLWUECIeXlVOSS/yrlFP4VeuXInw8HAkJSXBx8dH5P00NTVhbGwsdNvo0aMBAE+fPq1xf15OwMa4K0cIURyNFkDnz5+PX375BYcOHcLAgQMb62sbrKSkhK9ECZX0IKQWLJbkaxgpQk0kUfz555+IiYnB77//3qDguXHjRqb2EpvNxqxZs6QwSn5U0oMQUpdGmYF27doVb9++RXh4OL744gtoa2vXa39/f38sXLiQ+aynpyfhEQpasGABZs6cyXwuKCigIEpITZRYkk9n1wTuwjdKAG3bti32798PV1dXeHp64siRI/UKorq6urCxsZHiCAXVlrSVEPIZOoWXLnNzc6Snp+P169dwd3ena4qEkCavUe/Cm5qaIi0tDa6urnB3d8fRo0cBAMXFxQLPb7LZbJFmne/evcPz58+RlZUFAHjw4AEAwNjYmLlzn5OTg5ycHDx69AhAVd0lbW1tmJubo2XLlpI6PEIUljQeO2oKjzE1+gjbtm2L9PR05OXlwc3NDXl5ecjMzET37t35FlEqZwJAamoqunfvzhSK8/PzQ/fu3bF582amzebNm9G9e3eEhIQAAPr27Yvu3bsjNTVV8gdICFEYVNJDRM2lpAdA2ZhIzRpa0iNn60/Q0VCX7FiKP8F4/FK5/puj3zoFRMGGEMmgvyRCiPhYUkgmQnfhCSGk+aIZKCFEbIqaUJkCqAKim0hE4igfKCGEkPqg/20TQsQn47LGsiJ3I6yewT4oKIjJQK+iogJzc3NMnDgR79+/59vH0tJSIGO9qakpgKo3laZMmQJbW1toamrC3NwcU6dORX5+fmMfGiGkmZH7Gainpyfi4+NRXl6Ou3fvIjg4GHl5edi9ezdfu8jISOZNIwBQVlYGAGRlZSErKwurV6+GnZ0dnj17hgkTJiArKwv79u1r1GMhpNlS0GQich9A1dTUmHfaTU1N4evri4SEBIF22traQrPWd+7cGfv372c+W1tbY/ny5QgICEB5eTlTGoQQQuqrSUWPJ0+e4MiRI2jRooVY/fBeDasteFJGekLqQUlJCvlA5e4KowC5H+GhQ4fAZrOhoaEBa2tr3L17F/PmzRNoN2/ePL6s9evWrRPaX25uLpYuXYrQ0NBav5cy0hNC6iL3M1BXV1ds2rQJRUVF2L59OzIzMzFlyhSBdnPmzEFQUBDz2dDQUKBNQUEBvL29YWdnh4iIiFq/lzLSE1IPCnoXXu4DqJaWFpMXdN26dXB1dcWSJUuwdOlSvnaGhoa15g/98OEDPD09wWazceDAgTovA1BGekLqgR6kbxoiIiKwevVqJoGyKAoKCuDu7g5VVVWkpqZCXV2yabcIIYqpyQVQFxcX2NvbIyoqSqT2Hz58gLu7Oz5+/AgOh4OCggImQ31FRYWUR0uIgmCx/ncaL7GFZqBSMXPmTGzbtg0vXryos+21a9dw6dIl3L59GzY2NjAxMWEWUfYnhJCayN010OrPeAp73hMARo0ahVGjRjGfnz59WmN/Li4uoKT7hEiZgj5I3yRnoIQQIg/kbgZKpI9SvxGJowfpCSGE1AdNRQgh4lPQa6AUQBXQ0t3NLyP9TyPpV5k0PvqtI4SIj17lJISQBmJJ4SZSEwig8j9CQgiRUxINoNXLcVSXlpYGFouFvLw8AEBFRQViY2PRtWtXqKurQ09PD15eXvjrr7+YfTZu3Ag9PT2Bt4UmT56MDh06oKioCADw6NEjjBkzBqamplBTU0O7du0wcuRIXL16lW+/w4cPw9HRERoaGjA0NMTw4cMleeiEKDbeTSRJL3Ku0WegXC4Xfn5+iIyMxNSpU3Hv3j2kp6fDzMwMLi4uOHjwIABg4sSJ6N27N8aOHcvse+rUKWzZsgUJCQnQ1NTE1atX0bNnT2RmZmLLli24e/cuDhw4gI4dO2LWrFnMfvv378fo0aMxZswY3Lx5E3/99Rffm0yEENIQjX4NdO/evdi3bx9SU1MxePBgZv3WrVuRm5uLcePGwc3NDVpaWuBwOOjSpQs2b96MUaNGYcyYMZgxYwacnZ3B5XIRFBSE9u3b4+zZs1Cqdv3FwcEB06ZNAwCUl5dj2rRpWLVqFV8wtrW1bbyDJqS5U9CbSI0+wqSkJHTo0IEvePLMmjULubm5OH78OADAzMwMsbGxmDNnDgICAsBms5k8oBkZGbhz5w5mzZrFFzx59PT0AADXr1/Hq1evoKSkhO7du8PExAReXl64c+dOreMsKSlBQUEB30IIIdVJPIDySnBUX7y8vJjtmZmZ6NSpk9B9eeszMzOZdWPGjEHnzp3xxx9/ID4+nkly/PDhQwBAx44dax3PkydPAACLFy/GokWLcOjQIejr66Nfv3549+5djftRSQ9C6oGugUqGq6srMjIy+Jbt27fXqw9WtR/czZs3ce3aNWhqauLs2bPMel6GJVYdP+TKykoAwMKFC+Hj44OePXsiPj4eLBYLv/32W437LViwAPn5+cxCqe8IIZ+T+DXQ6iU4eF6+fMn8u0OHDrh7967Qfe/duwcAaN++PQCgtLQUP/zwA0aOHAk3NzeEhIRg8ODB6NChAzp06MDs4+DgUON4TExMAAB2dnbMOjU1NVhZWeH58+c17kclPQipB0om0jj8/Pzw8OFD/PHHHwLbfv75ZxgYGMDNzQ0AEBkZidzcXKxduxYBAQHw8PDAmDFjUFlZCQcHB9jZ2eHnn39mZpnV8R6Z6tmzJ9TU1PDgwQNmW1lZGZ4+fQoLCwvpHCQhCobLYkllkXcyCaDDhg1DYGAgOBwOnj59ilu3biE0NBSpqanYvn07tLS0cPXqVcTExGD79u3MDaHNmzfj/v37iI2NBYvFQnx8PDIzM9G3b1/897//xZMnT3Dr1i0sX74cQ4YMAQDo6OhgwoQJiIiIwLFjx/DgwQNMnDgRADBixIjGPnxCSDPS6I8xsVgs7N27F2vXrkVsbCwmTZoENTU1ODk54fTp0/jqq69QUlKCwMBAjBkzBp6ensy+xsbGWL9+PcaOHYtBgwahd+/euHr1KpYvX46QkBC8ffsWJiYmcHZ2xpo1a5j9Vq1aBRUVFYwePRrFxcVwdHTEqVOnoK+v39iHT0jzxKuJJOk+5RyLS/UuRFJQUABdXV3k5+dDR0dH1sMRC2VjIjWp7+85r33OH1uho6Up2bF8LILx4PFy/TdHv3UKiIINkTg5eJA+OjoaKSkpuH//PjQ0NODs7IyYmBipvjQj/7e5CCFEBOnp6Zg0aRIuXryI48ePo7y8nClpLi00FSGEiE0ad83r29+RI0f4PsfHx8PIyAjXrl1D3759JTk0BgVQQohc+/w1alGf0c7PzwcAtGzZUirjAiiAKqzmdiOJruvKmBSvgX7+GnVERAQWL15c665cLhczZ87EV199hc6dO0t2XNXQbx0hRHxSLCr34sULvrvwosw+J0+ejFu3buHcuXOSHdNnKIASQuSajo5OvR5jmjJlClJTU3HmzBmYmppKcWSNdBf+9evXCA0Nhbm5OdTU1GBsbAwPDw9ER0eDxWLVuiQkJAAAiouLoa+vj5YtW6K4uBgAkJCQUOf+aWlpyM7OxqhRo2BrawslJSVMnz69MQ6bEMXBexde0ks9cLlcTJ48GSkpKTh16hTatWsnpYP9n0aZgfr4+KCsrAyJiYmwsrLCv//+i5MnT8LOzg7Z2dlMu2nTpqGgoADx8fHMOl1dXQBVWeU7d+4MLpeLlJQU+Pv7w9fXl+9NpeHDh6Nz586IjIxk1rVs2RJZWVlo1aoVFi5ciNjY2EY4YkJIY5s0aRKSkpLw+++/Q1tbGzk5OQCqYoiGhoZUvlPqATQvLw/nzp1DWloa+vXrBwCwsLBA7969BdpqaGigpKQExsbGAts4HA4CAgLA5XLB4XDg7+8PDQ0Nvh+MqqoqNDU1Bfa3tLTE2rVrAQBxcXGSPDxCCOTjMaZNmzYBAFxcXPjWx8fHIygoSEKj4if1AMpLqnzw4EF8+eWXDUoR9/jxY1y4cAEpKSngcrmYPn06njx5AisrKymMuEpJSQlKSkqYz5SRnhD5Jou30qV+DVRFRQUJCQlITEyEnp4e+vTpg7CwMNy6dUvkPuLi4uDl5cVcA/X09JT6TJIy0hNSD7zHmCS9yLlGGaGPjw+ysrKQmpoKDw8PpKWloUePHswNotpUVFQgMTERAQEBzLqAgAAkJiaioqJCamOmjPSEkLo02mNM6urqcHNzg5ubG8LDwzFu3DhERETUeW3i6NGjePXqFXx9ffnWV1RU4NixY3z1liSJMtITIjouSwlcCc8YJd2fNMhshHZ2diK95M/hcODn5ydQZ8nf3x8cDqcRRkoIqZOCFpWT+gw0NzcXI0aMQHBwMLp27QptbW1cvXoVK1euZLLG1+TNmzf4448/kJqaKvA6VmBgILy9vfHmzRu0atWqznFkZGQAAAoLC/HmzRtkZGRAVVWVr1YSIYTUR6PchXd0dERsbCweP36MsrIymJmZISQkBGFhYbXuu2PHDmhpaWHAgAEC21xdXaGtrY1ff/0VM2fOrHMc3bt3Z/597do1JCUlwcLCAk+fPq33MRFC+HEhhVP4JpBtkzLSi6g5ZaQHKJkIEa6hGelfntwLHbaEM9IXFsF0wPdy/TdHv3WEEPFJMZmIPKMAqqBoxkaI+OiviBAiPgWtyin/V2kJIURO0QxUgUUlS+9NrsYW5qss6yEoNHlIJiILFEAJIeKTg7LGsiD/IySEEDlFM1BCiNi4YIELCZ/CS7g/aZCLGWhQUBCGDh3Kt27fvn1QV1fHypUrsXjxYjg4ONS4v4uLi9ByHuXl5SgrK8O8efPQpUsXaGlpoU2bNvjhhx+QlZUl3YMihDR7chFAP7d9+3b4+/tjw4YNmDt3rkj7hISEIDs7m29RUVFBUVERrl+/jp9++gnXr19HSkoKMjMz8e2330r5KAhRHLxsTJJe5J3cncKvXLkS4eHhSEpKgo+Pj8j7CSvlAVTVQzl+/DjfuvXr16N37954/vw5zM3NxR4zIUQxyVUAnT9/Pn755RccOnQIAwcOlNr35Ofng8ViQU9Pr8Y2VNKDkHqgu/Cy9eeffyImJga///57g4Lnxo0bmfpLbDYbs2bNEtru06dPmD9/PkaNGlVrggIq6UEIqYvczEC7du2Kt2/fIjw8HF988QW0tbXrtb+/vz8WLlzIfBY2uywrK4Ofnx8qKyuxcePGWvtbsGABX5q8goICCqKE1IAepJextm3bYv/+/XB1dYWnpyeOHDlSryCqq6sLGxubGreXlZXh+++/xz///INTp07VmR6LSnoQIjoq6SEHzM3NkZ6ejtevX8Pd3V1i1x15wfPhw4c4ceIEDAwMJNIvIUSxyc0MlMfU1BRpaWlwdXWFu7s7jh49CgAoLi5mynLwsNnsWmedAFBeXo7vvvsO169fx6FDh1BRUYGcnBwAQMuWLaGqqiqV4yBEoVA+UPnRtm1bpKenw9XVFW5ubnB2dkZmZiZfWQ4A6NevH9LS0mrt6+XLl0hNTQUAgYfxT58+DRcXFwmOnBCiSOQigAqrD29iYoL79+8zn9esWVPj/rUFUUtLS1DVEkKkTBoPvjeBa6ByEUCJbFAKOELEQwGUECI2SiZCCCGkXmgGSggRm6I+B0oBVMHF7KuU9RAkYt538v/H1qyxIIXHmCTbnTTQbx0hhDQQzUAJIWLjQglcCc/HJN2fNDR4hEFBQWCxWFixYgXf+oMHD4L1/1P5tLQ0oZniFy1aVOt2FovFvC20bds2fP3119DX14e+vj4GDhyIy5cvC4zl84z2PO/evcOUKVNga2sLTU1NmJubY+rUqcjPz2/ooRNCCAAxZ6Dq6uqIiYlBaGgo9PX1a2z34MEDvuQdbDa71u0AYGRkBKAqyI4cORLOzs5MiQ93d3fcuXMHbdu2rXOMWVlZyMrKwurVq2FnZ4dnz55hwoQJyMrKwr59++pzuISQGlA2pgYYOHAgHj16hOjoaKxcubLGdkZGRrUmL65t+65du/g+b9u2Dfv27cPJkyfxww8/1DnGzp07Y//+/cxna2trLF++HAEBASgvL4eKCl3FIIQ0jFgXGZSVlREVFYX169fj5cuXkhpTrYqKilBWVoaWLVs2uI/8/Hzo6OjUGjxLSkpQUFDAtxBChFPUmkhij3DYsGFwcHBAREREjW1MTU35ssXn5ubWut3W1rbGvubPn4+2bds2uORHbm4uli5ditDQ0FrbUUZ6QkhdJHL+GhMTg/79+9dYRuPs2bN8yZE/v176+faaZoYrV67E7t27kZaWBnV19XqPs6CgAN7e3rCzs6s14AOUkZ6Q+lDUVzklEkD79u0LDw8PhIWFISgoSGB7u3btar0GWtd2AFi9ejWioqJw4sQJdO3atd5j/PDhAzw9PcFms3HgwAG0aNGi1vaUkZ4Q0dGbSGJasWIFHBwc0KFDB0l1yVi1ahWWLVuGo0ePolevXvXev6CgAB4eHlBTU0NqamqDZq+EEPI5iQXQLl26wN/fH+vXr6/3vq9fv8anT5/41hkYGKBFixZYuXIlfvrpJyQlJcHS0pJ5PpR3vZQnPz9fIGN9y5Ytoa+vD3d3dxQVFWHnzp18N4RatWoFZWVK6UaIuOgxJglYunQp9u7dW+/9hN00unDhAr788kts3LgRpaWl+O677/i2R0REYPHixczntLQ0gYz1gYGBCAoKwqVLlwBAoPzHP//8A0tLy3qPlxBCAIDFpXTtIikoKICuri7zCFRzQclESHX1/T3ntb977QK0P3tBRlwfCgth19NJrv/m6LeOEEIaiF7DUXA0cyOSoKh34eV/hIQQIqdoBkoIERs9SE8U1sr9Tf9G0lwfOpkijY8CKCFEbFxI4RpoE7jCSAGUECI2RT2Fl/8QTwghItq4cSPatWsHdXV19OzZE2fPnpXq98k0gPLKgrBYLKioqMDc3BwTJ07E+/fvmTaWlpZCS37wSok8ffoULBZL4DVOnoSEBL792Gw2evbsiZSUlMY4REIUQtWrnJLOB1q/GWhycjKmT5+OhQsX4saNG/j666/h5eWF58+fS+mo5WAG6unpiezsbDx9+hTbt2/HH3/8gR9//JGvTWRkJLKzs/mWKVOmiPwdOjo6zH43btyAh4cHvv/+ezx48EDSh0MIkZH//Oc/GDt2LMaNG4dOnTphzZo1MDMzw6ZNm6T2nTIPoGpqajA2NoapqSnc3d3h6+uLY8eO8bXR1taGsbEx36KlpSXyd7BYLGa/9u3bY9myZVBSUsKtW7ckfTiEKCTeNVBJL6IqLS3FtWvX4O7uzrfe3d0d58+fl/ThMuTqJtKTJ09w5MiROnN1iqOiogI7duwAAPTo0aPGdiUlJSgpKWE+U0kPQmTj8789Ybl63759i4qKCrRu3ZpvfevWrZkMbtIg8xnooUOHwGazoaGhAWtra9y9exfz5s3jazNv3jy+kh9sNhtpaWkif0d+fj6zn6qqKiZOnIitW7fC2tq6xn2opAchouOls5P0AgBmZmZ8f4vR0dE1joP12XVTLpcrsE6SZD4DdXV1xaZNm1BUVITt27cjMzNT4PrmnDlzBDLdi1LSmEdbWxvXr18HUFWU7sSJEwgNDYWBgQEGDx4sdB8q6UGIfHjx4gVfNiZhlSIMDQ2hrKwsMNt8/fq1wKxUkmQeQLW0tJg8nevWrYOrqyuWLFmCpUuXMm0MDQ0FcnnWh5KSEt/+Xbt2xbFjxxATE1NjAKWSHoSIjstlgcuV8HOg/9+fjo5OnensVFVV0bNnTxw/fhzDhg1j1h8/fhxDhgyR6Liqk3kA/VxERAS8vLwwceJEtGnTRmrfo6ysjOLiYqn1T4hiUZLCm0P162/mzJkYPXo0evXqBScnJ2zduhXPnz/HhAkTJDyu/5G7AOri4gJ7e3tERUVhw4YNAKoKwn0+NdfU1OT7v5KwR5Ls7OwAVF0H4e1fXFyM48eP4+jRowgPD5fWYRBCGpmvry9yc3OZxx47d+6M//73v7CwsJDad8pdAAWq/k8yZswY5mZSeHi4QLALDQ3F5s2bmc9+fn4C/fzzzz8Aqq5fmpiYAKg6NbewsEBkZKTAzSpCSMPIy6ucP/74o8Bz5NJEJT1E1FxLegCUjYn8T0NLely78TfY2toSHUvhhw/o2b2zXP/NyeUMlDQuCj5EXPIyA21s9JdDCCENRDNQQojYaAZKCCGkXmgGSpqFf+eNlvUQJKJ1zK+yHkKDKOoMlAIoIURs0nwTSZ7RKTwhhDRQvQJo9QzyLVq0gJWVFWbPno2PHz8ybRITE9G7d29oaWlBW1sbffv2xaFDh/j6SUhIgJ6entDv0NPTQ0JCAvP522+/hbm5OdTV1WFiYoLRo0cjKyuL2c7LSP/5EhAQwLSZNm0aevbsCTU1NTg4ONTnkAkhIpB1PlBZqfcMlJdB/smTJ1i2bBk2btyI2bNnAwBmz56N0NBQfP/997h58yYuX76Mr7/+GkOGDGFey6wvV1dX7N27Fw8ePMD+/fvx+PFjfPfddwLtTpw4wZex/pdffmG2cblcBAcHw9fXt0FjIIQQYep9DZSXQR4ARo0ahdOnT+PgwYMIDAzEzz//jHXr1vGlo1u+fDk+ffqEmTNnYsiQIfVOCTdjxgzm3xYWFpg/fz6GDh2KsrIyvsTLBgYGzLg+t27dOgDAmzdvKAs9IVKgqDeRxL4GqqGhgbKyMuzevRtsNhuhoaECbWbNmoWysjLs379frO969+4ddu3aBWdnZ6lmrQeqMtIXFBTwLYQQUp1YAfTy5ctISkrCgAEDkJmZCWtra6iqqgq0a9OmDXR1dZGZmdmg75k3bx60tLRgYGCA58+f4/fffxdo4+zszJex/saNGw36Lh7KSE+I6OgaqIh4JTjU1dXh5OSEvn37Yv369XXuJ05q/Tlz5uDGjRs4duwYlJWV8cMPP+DzHCjJycnIyMhgFl4qu4ZasGAB8vPzmeXFixdi9UcIaX7qfQ2UV4KjRYsWaNOmDXMq3aFDB5w7dw6lpaUCs9CsrCwUFBSgffv2AKoyTBcWFqKiogLKyspMu4qKChQWFkJXV5dvf0NDQxgaGqJDhw7o1KkTzMzMcPHiRTg5OTFtzMzMxMpa/znKSE+I6LiQwnOgzXEGyivBYWFhwXcd0s/PD4WFhdiyZYvAPqtXr0aLFi3g4+MDAOjYsSMqKioETrOvX7+OiooK2Nra1vj9vJln9YqZhBDZqgRLKou8k9ibSE5OTpg2bRrmzJmD0tJS5k75zp07sXbtWqbIPVCVKd7LywvBwcH4z3/+A2trazx+/BgzZ86El5cXc/p9+fJlXL58GV999RX09fXx5MkThIeHw9ramm/2WZdHjx6hsLAQOTk5KC4uRkZGBjMOYddsCSFEFBJ9lXPNmjXo2rUrNm3ahJ9++gksFgs9evTAwYMHBYq37dmzB4sXL8bEiRPx8uVLmJqaYtCgQVi8eDHTRkNDAykpKYiIiMDHjx9hYmICT09P7Nmzp16n1+PGjUN6ejrzuXv37gCqMtZbWlqKdcyEEMV9jIky0ouoOWekbw4omYhkNDQj/ZnrT8BmSzgjfeEH9O1hJdd/c5RMhBAiNkVNJkIBlDQLsp65EcVEAZQQIjYuJH/NsilcW6R0doQQ0kA0AyXNQs6cgLobNQHGq3bKeggNQtdACSGkgRT1MSY6hSeEkAYSK4AGBQVh6NChAuvT0tLAYrGQl5fH/FtfXx+fPn3ia3f58mUmg3x1XC4X27Ztg5OTE3R0dMBms2Fvb49p06bh0aNHAt/38uVLqKqqomPHjgLbnj59irFjx6Jdu3bQ0NCAtbU1IiIiUFpaKs6hE0Kq4Z3CS3qRd402A9XW1saBAwf41sXFxcHc3JxvHZfLxahRozB16lR88803OHbsGG7duoV169ZBQ0MDy5YtE+g7ISEB33//PYqKivDXX3/xbbt//z4qKyuxZcsW3LlzB7Gxsdi8eTPCwsIkf5CEEIXSaNdAAwMDERcXh5EjRwIAiouLsWfPHkydOhVLly5l2iUnJ2PPnj34/fff8e233zLrraysMGDAAIE0dlwuF/Hx8di4cSNMTU3B4XDQp08fZrunpyc8PT35+nnw4AE2bdqE1atXS+twCVEoXACVUuhT3jXaDHT06NE4e/Ysnj9/DgDYv38/LC0t0aNHD752u3fvhq2tLV/wrO7z0/3Tp0+jqKgIAwcOxOjRo7F37158+PCh1rHk5+ejZcuWYhwNIYRIIIDyEixXX7y8vATaGRkZwcvLi6m4GRcXh+DgYIF2mZmZAunspk+fzvRtamrKt43D4cDPzw/Kysqwt7eHjY0NkpOTaxzv48ePsX79ekyYMKHW46KSHoSIjq6BNpCrqytfJviMjAxs375daNvg4GAkJCTgyZMnuHDhAvz9/YW2+3yWuXDhQmRkZCA8PByFhYXM+ry8PKSkpPCVMA4ICEBcXJzQfrOysuDp6YkRI0Zg3LhxtR4XlfQghNRF7GugvATL1b18+VJo22+++QahoaEYO3YsBg8eDAMDA4E27du3x/379/nWtWrVCq1atYKRkRHf+qSkJHz69AmOjo7MOi6Xi8rKSty9e5evrEdWVhZcXV3h5OSErVu31nlcCxYswMyZM5nPBQUFFEQJqQE9B9oIlJWVMXr0aKSlpQk9fQeAkSNH4sGDB0ILx32Ow+Fg1qxZfLPfmzdvwtXVlW8W+urVK7i4uKBHjx6Ij4+HklLdh62mpgYdHR2+hRAinKKewjf6m0hLly7FnDlzhM4+garSICkpKfDz88OCBQvg4eGB1q1b49mzZ0hOTmZqKGVkZOD69evYtWuXwPOfI0eOxMKFCxEdHY03b97AxcUF5ubmWL16Nd68ecO0q6mOPCGEiKLRA6iqqioMDQ1r3M5isZCcnIxt27YhPj4eK1euRFlZGUxNTTFgwAD85z//AVA1+7SzsxP68PzQoUMxceJE/PHHHygoKMCjR4/w6NEjgRtQlEuaEMlQ1FN4ykgvIspIL98omYhkNDQj/ZFLWdBiS/bv4mNhATwd28j13xwlEyGEiK2SW7VIuk95RwGUNAuynrkRxUTZmAghYuNdA5X0Ig2STDBEM1BCiEKpnmDIxsYGf//9N0JCQvDx48d658egAEoIEVtTykgvyQRDFEBJs/B8wnBZD0EqzDenyHoIIuFyqxZJ9wlAIA+Fmpoa1NTUJPpdDU0wRNdACSFyzczMjC8vRXR0tET7FzXBkDAUQAkhYqsESyoLALx48QL5+fnMsmDBAqFjWLx4MVPhoqbl6tWrfPvUJ8GQMBIPoEFBQXwDNjAwgKenJ27duiXQdvz48VBWVsaePXsEtlX/YSgpKaFNmzbw9/fHixcvmDaFhYWwtrbmS/oBVN1l09HRYbJCpaWlYciQITAxMYGWlhYcHBywa9cuCR85IUQaPs9JUdPp++TJk3Hv3r1al86dOzPt65tgSBipzEA9PT2RnZ2N7OxsnDx5EioqKhg0aBBfm6KiIiQnJ2POnDngcDhC+7G3t0d2djZevnyJ5ORk3L59G99//z2znc1mIz4+HuvXr8fZs2cBVL2eOWbMGPTp04f5P8r58+fRtWtX7N+/H7du3UJwcDB++OEH/PHHH9I4fEIUjjwkEzE0NETHjh1rXdTV1QE0LMGQMFK5iaSmpsYk6jA2Nsa8efPQt29fvHnzBq1atQIA/Pbbb7Czs8OCBQtgYmKCp0+fwtLSkn9wKipMP23atEFISAimTp2KgoIC5tWuvn37YsqUKRgzZgxu3ryJbdu2ISMjA3///TfTz+f1j6ZOnYqjR4/iwIEDGDx4sDR+BIQQOZWVlSWxBENSvwZaWFiIXbt2wcbGhi8DE4fDQUBAAHR1dfHNN98gPj6+1n5ycnKQkpICZWVlJiMTT1RUFFq0aIGAgACEhYVh/fr1aNu2ba391XXXjTLSEyI63l14SS/ScOzYMTx69AinTp2CqakpTExMmKW+pBJAq5f50NbWRmpqKpKTk5lp8sOHD3Hx4kX4+voCqMoiHx8fj8pK/rJUt2/fBpvNhqamJkxMTJCWloZJkyZBS0uLr526ujrWrFmDgwcPwsXFhS9DvTD79u3DlStXMGbMmBrbUEZ6QpqnoKAgcLlcoUt9SSWAVi/zcenSJbi7u8PLywvPnj0DUDX79PDwYNLaffPNN/j48SNOnDjB14+trS0yMjJw5coVLF++HA4ODli+fLnQ7+RwONDU1MTt27eRn59f49jS0tIQFBSEbdu2wd7evsZ2CxYs4LvzV/3mFSGEX1N6lVOSpBJAeWU+bGxs0Lt3b3A4HHz8+BHbtm1DRUUFduzYgcOHD0NFRQUqKirQ1NTEu3fvBG4mqaqqwsbGBvb29ggLC4ODgwMmTpwo8H3JyclITU3FuXPnoKurixkzZggdV3p6OgYPHoz//Oc/+OGHH2o9BspIT4joeNmYJL3Iu0Z5E4n3KFJxcTH++9//4sOHD7hx4wbftcz79+/D398fubm5NWar/+mnn9ChQwfMmDGDKYf877//YtKkSVi2bBm6d++OhIQEODk5YcSIEXzVQdPS0jBo0CDExMRg/Pjx0j1gQohCkMoMtKSkBDk5OcjJycG9e/cwZcoUFBYWYvDgweBwOPD29ka3bt3QuXNnZvHx8UGrVq2wc2fNacmsrKwwZMgQhIeHM+tCQ0Nha2vLPAvaq1cvzJ07F+PHj2dO5dPS0uDt7Y2pU6fCx8eHGdu7d++kcfiEKB5pPMLUBGoiSSWAHjlyhLmr5ejoiCtXruC3335Dp06dcPjwYfj4+Ajsw2KxMHz48BqfCeWZNWsWDh8+jEuXLmHHjh04fvw4EhIS+J7jioiIgJ6eHnMqn5CQgKKiIkRHR/PdcRs+vHm+P00IaRxU0kNEVNJDvlEyEcloaEmP39LfQlPCJT2KCgswop+hXP/N0bvwhBDSQJTOjjQLTSXtW3NVPfmHJPuUdzQDJYSQBqIZKCFEbNJMqCzPKICSZuHZ+KGyHoJUWGw9KOshiKQplfSQJDqFJ4SQBqIZKCFEbNJ49bIpvMopsxno69evERoaCnNzcyZ/qIeHBy5cuMC0OX/+PL755hvo6+tDXV0dXbp0wc8//4yKigoAVXn9WrZsiXXr1vH1fenSJbRo0QLHjx8HUPUmkrD0/vfv32+8AyaENDsym4H6+PigrKwMiYmJsLKywr///ouTJ08yr1ceOHAA33//PcaMGYPTp09DT08PJ06cwNy5c3Hx4kXs3bsXbdq0wbp16xAaGgovLy+0b98excXFCAwMxLhx4+Dm5sb3nQ8ePOB7IJeX3JkQIh66idSI8vLycO7cOaSlpaFfv34AAAsLC/Tu3RsA8PHjR4SEhODbb7/lq1Uybtw4tG7dGt9++y327t0LX19fBAQEICUlBUFBQTh79iwWLFiA0tJSrFq1SuB7jYyMoKen1yjHSAhp/mRyCs9Ltnzw4EGUlJQIbD927Bhyc3Mxe/ZsgW2DBw9Ghw4dsHv3bmbd5s2b8fDhQ/j7+2PDhg1ISEgAm80W2Ld79+4wMTHBgAEDcPr0ackeFCEKjPKBNiIVFRUkJCQgMTERenp66NOnD8LCwpjKnZmZmQCATp06Cd2/Y8eOTBugama5dOlS7NmzB+PHj0ffvn352puYmGDr1q3Yv38/UlJSYGtriwEDBuDMmTM1jpFKehBC6iLTa6De3t44e/YsLly4gCNHjmDlypVMKWIANabY53K5YLH+93+niooKJCYmQlNTExcvXkR5eTlUVP53aLa2trC1tWU+Ozk54cWLF1i9erVAsOWJjo7GkiVLxD1MQhRCJaRwF16y3UmFTJ8DVVdXh5ubG8LDw3H+/HkEBQUhIiICHTp0AADcu3dP6H73799H+/btmc+rV6/Gw4cPceXKFWRlZSEqKqrO7/7yyy/x8OHDGrdTSQ9CSF3k6kF6Ozs7fPz4Ee7u7mjZsiV+/vlngTapqal4+PAhRo4cCQC4c+cOIiIisGnTJtjZ2WHz5s1YtmwZczmgJjdu3Ki1Ch+V9CBEdE2pKqckyeQUPjc3FyNGjEBwcDC6du0KbW1tXL16FStXrsSQIUOgpaWFLVu2wM/PD+PHj8fkyZOho6ODkydPYs6cOfjuu+/w/fffo7y8HIGBgRg2bBi+++47AMDQoUMxYsQIBAUF4fLly1BRUcGaNWtgaWkJe3t7lJaWYufOndi/fz/2798vi8MnpNmhx5gaEZvNhqOjI2JjY/H48WOUlZXBzMwMISEhCAsLAwB89913OH36NKKiotC3b18UFxfDxsYGCxcuxPTp08FisRAVFYVXr17h6NGjfP2vX78e9vb2iIqKQnh4OEpLSzF79my8evUKGhoasLe3x+HDh/HNN9/I4vAJIc0EZaQXEWWkl2+UTEQyGpqRnnMsD5paEs5I/7EAY9315PpvTq6ugRJCSFNCyURIs9BU0r41V4p6DZRmoIQQ0kA0AyWEiI1moIQQQuqFZqCkWXgSNEjWQ5Aqq4RDsh5CrbhSSKjcFGagFEAJIWKjmkiEEELqReIBNCgoSGj5jEePHgEAXrx4gbFjx6JNmzZQVVWFhYUFpk2bhtzcXABVmZWcnZ3h4+PD129+fj7MzMywaNEiAMDTp0/5+tfW1oa9vT0mTZokkCQkOzsbo0aNgq2tLZSUlDB9+nRJHzYhCk1R34WXygzU09MT2dnZfEu7du3w5MkT9OrVC5mZmdi9ezcePXqEzZs34+TJk3BycsK7d++grKyMxMREHDlyBLt27WL6nDJlClq2bInw8HC+7zpx4gSys7Nx8+ZNREVF4d69e+jWrRtOnjzJtCkpKUGrVq2wcOFCdOvWTRqHTAhRQFK5BsorEve5SZMmQVVVFceOHYOGhgYAwNzcHN27d4e1tTUWLlyITZs2oX379oiOjsaUKVPg6uqKK1euYM+ePbh8+TJUVVX5+jQwMGC+y8rKCoMHD8aAAQMwduxYPH78GMrKyrC0tMTatWsBAHFxcdI4ZEIUGlXllLJ3797h6NGj+PHHH5ngyWNsbAx/f38kJyczSZSnTJmCbt264YcffsD48eMRHh4OBweHOr9HSUkJ06ZNw7Nnz3Dt2rUGj5cy0hNC6iKVAHro0CGm7hGbzcaIESPw8OFDcLncGst0dOrUCe/fv8ebN28AACwWC5s2bcLJkyfRunVrzJ8/X+Tv79ixI4Cq66QNFR0dDV1dXWYxMzNrcF+ENHd0DVSCXF1dkZGRwSyf120XhjfzrF6qIy4uDpqamvjnn3/w8uVLkb9fWF/1RRnpCSF1kUoA1dLSgo2NDbOYmJjAxsYGLBYLd+/eFbrP/fv3oa+vD0NDQwDAhQsXEBsbi99//x1OTk4YO3ZsjTWSPscrBdKuXbsGHwNlpCdEdE11BlpSUgIHBwewWCxkZGTUe/9GuwZqYGAANzc3bNy4EcXFxXzbcnJysGvXLvj6+oLFYqG4uBiBgYEIDQ3FwIEDsX37dly5cgVbtmyp83sqKyuxbt06tGvXDt27d5fW4RBCquHdRJL0Im1z585FmzZtGrx/oz5Iv2HDBpSUlMDDwwNnzpzBixcvcOTIEbi5uaFt27ZYvnw5AGD+/PmorKxETEwMgKo79T///DPmzJkjcF0zNzcXOTk5ePLkCVJTUzFw4EBcvnwZHA4HysrKTDve5YTCwkK8efMGGRkZNc6GCSHN359//oljx45h9erVDe6jUV/lbN++Pa5evYrFixfD19cXubm5MDY2xtChQxEREYGWLVsiPT0dv/zyC9LS0qClpcXsGxISgn379mHs2LE4ceIEs37gwIEAAE1NTVhYWMDV1RVbt26FjY0N33dXn41eu3YNSUlJsLCwEOtGEyGkijSzMX3+BIyamhrU1NTE6vvff/9FSEgIDh48CE1NzQb3I/EAmpCQUOt2CwsLxMfH17i9X79+KC8vF7qteu0jS0tLka+JAjXXmCeEyLfPn4CJiIjA4sWLG9wfl8tFUFAQJkyYgF69eok1iaJkIoQQsVVWVi2S7hOoev27+k3cmmafixcvxpIlS2rt88qVKzh//jwKCgqwYMECscdIAZQ0C/Ke7o00nKhPwUyePBl+fn61trG0tMSyZctw8eJFgUDcq1cv+Pv7IzExUeSxUQAlhIhNHjLSGxoaMo9B1mbdunVYtmwZ8zkrKwseHh5ITk6Go6Njvb6TAighRKGYm5vzfWaz2QAAa2trmJqa1qsvCqCkWXj8g7eshyB11jsOy3oINZKHGagsUAAlhIitElLIxiTZ7mpU3yd6qqOM9IQQ0kAyD6BBQUEYOnQoAMDFxUVotviDBw/yJQZJSEgAi8WCp6cnX7u8vDywWCykpaUx66pnrVdRUYG5uTlmzpyJkpISaRwOIQqJy+VKZZF3Mg+gDaWiooKTJ0/i9OnTdbaNj49HdnY2/vnnH2zcuBG//vor3104QghpiCZ7DVRLSwvff/895s+fj0uXLtXaVk9Pj8lab2Zmhm+//RbXr19vjGESohAU9SZSk52BAlVvHty+fRv79u0TeZ/MzEycPn263s97EULI55p0AG3Tpg2mTZuGhQsX1vj+PACMHDkSbDYb6urqsLW1hb29fZ2vcVFJD0JEx6383+ucklq4jXUbXgxNOoACwLx58/DmzZtai8XFxsYiIyMDN2/exKFDh5CZmYnRo0fX2i+V9CCE1EWuAqiOjg7y8/MF1ufl5dX4Lqyenh4WLFiAJUuWoKioSGgbY2Nj2NjYwNbWFt7e3liyZAmSk5OZWvXCUEkPQkTXVDPSi0uuAmjHjh1x9epVgfVXrlyBra1tjftNmTIFSkpKTOniuvASLX+eGb86KulBiOiaakZ6ccnVXfgff/wRGzZswKRJkzB+/HhoaGjg+PHj4HA4+PXXX2vcT11dHUuWLMGkSZOEbs/Ly0NOTg4qKyvx8OFDREZGokOHDjVWCCWEEFHIfAZaWVkJFZWqOG5paYmzZ8/i8ePHcHd3xxdffIGEhAQkJCRgxIgRtfYTGBgIKysrodvGjBkDExMTmJqaYuTIkbC3t8eff/7JfC8hRDyKegov8wjy+vVrvvIbPXv2xJEjR2rdJygoCEFBQXzrlJWVcefOHYG2TeFtBkJI0ySzAPr+/XucP38eaWlpmDBhgqyGQQiRAG4lF1wJX7SUdH/SILMAGhwcjCtXrmDWrFkYMmSIrIZBmgl5TvVGmi+ZBdADBw7I6qsJIRImjbvmTWACKvubSIQQ0lTJ/CYSIaTpU9RkIhRASbNAJT1kq7KSi0oJn3NLuj9poFN4QghpIJqBEkLEpqin8BKZgb5+/RqhoaEwNzeHmpoajI2N4eHhgQsXLgCoesOIxWJhz549Avva29uDxWIhISFBYFtUVBSUlZWxYsUKgW28sh4sFgvKysrQ19eHo6MjIiMjBRKSREdH44svvoC2tjaMjIwwdOhQPHjwQBKHTghRYBIJoD4+Prh58yYSExORmZmJ1NRUuLi44N27d0wbMzMzxMfH8+138eJF5OTkQEtLS2i/8fHxmDt3bo2p6nR0dJCdnY2XL1/i/PnzGD9+PHbs2AEHBwdkZWUx7dLT0zFp0iRcvHgRx48fR3l5Odzd3fHx40cJHD0hhF7lbKC8vDycO3cOaWlp6NevHwDAwsICvXv35mvn7++P2NhYvHjxgsmtGRcXB39/f+zYsUOg3/T0dBQXFyMyMhI7duzAmTNn0LdvX742LBaLKdVhYmKCTp06YfDgwbC3t8fcuXOxc+dOABB4NTQ+Ph5GRka4du2aQJ+EECIqsWegbDYbbDYbBw8erLXSZevWreHh4YHExEQAQFFREZKTkxEcHCy0PYfDwciRI9GiRQuMHDkSHA5HpPEYGRnB398fqampqKioENqGd4rfsmXLGvuhjPSEiK6Sy5XKIu/EDqAqKipISEhAYmIi9PT00KdPH4SFheHWrVsCbYODg5GQkAAul4t9+/bB2toaDg4OAu0KCgqwf/9+BAQEAAACAgKwb98+kYNYx44d8eHDB+Tm5gps43K5mDlzJr766it07ty5xj4oIz0hpC4SuwaalZWF1NRUeHh4IC0tDT169BC4MeTt7Y3CwkKcOXMGcXFxNc4+k5KSYGVlhW7dugEAHBwcYGVlJfQmlDC8DEzVa8nzTJ48Gbdu3cLu3btr7YMy0hMiOm6ldBZ5J7HnQNXV1eHm5obw8HCcP38eQUFBiIiI4GujoqKC0aNHIyIiApcuXYK/v7/QvuLi4nDnzh2oqKgwy507d0Q+jb937x50dHRgYGDAt37KlClITU3F6dOnYWpqWmsflJGeENFxwQWXK+EFCnAKXxM7Ozuhd7mDg4ORnp6OIUOGQF9fX2D77du3cfXqVaSlpSEjI4NZzpw5gytXruDvv/+u9Xtfv36NpKQkDB06FEpKVYfH5XIxefJkpKSk4NSpU2jXrp1kDpIQotDEvgufm5uLESNGIDg4GF27doW2tjauXr2KlStXCk1T16lTJ7x9+xaamppC++NwOOjdu7fQu+NOTk7gcDiIjY0FUBUYc3JywOVykZeXhwsXLiAqKgq6urp8z45OmjQJSUlJ+P3336GtrY2cnBwAgK6uLjQ0NMT9ERCi8HhljSXdp7wTO4Cy2Ww4OjoiNjYWjx8/RllZGczMzBASEoKwsDCh+3x+as1TWlqKnTt3Yt68eUK3+/j4IDo6GjExMQCqbjaZmJiAxWJBR0cHtra2CAwMxLRp0/hOuTdt2gQAcHFx4esvPj5eILM9IYSIisWlmhciKSgogK6uLvLz8+l6qByiZCKSUd/fc177uZveQE1Dsn8XJcUFWDmxlVz/zdG78KRZkOdMRaT5ogBKCBEbZaQnhBBSLzQDJYSIjapyEtKE3frGRdZDkImu/02T9RAAUD5QQggh9UQzUEKI2KgmkoTxssXXtPAeYL9x4wZGjBiB1q1bQ11dHR06dEBISAgyMzMBAE+fPhW6Py9T082bNzFy5EiYmZlBQ0MDnTp1wtq1a/nG8unTJwQFBaFLly5QUVHB0KFDpXXYhJAm4vDhw3B0dISGhgYMDQ0xfPjwevchtRlodnY28+/k5GSEh4fzldHQ0NDAoUOH4OPjAw8PD+zatQvW1tZ4/fo1fvvtN/z0009ITk5m2p84cQL29vZ8+wPAtWvX0KpVK+zcuRNmZmZMZnplZWVMnjwZAFBRUQENDQ1MnToV+/fvl9YhE6KweAlAJN2ntOzfvx8hISGIiopC//79weVycfv27Xr3I7UAyssUD1S9c149ezxQlVB5zJgx+Oabb3DgwAFmfbt27eDo6Ii8vDy+/gwMDPj25/k8JZ6VlRUuXLiAlJQUJoBqaWkxr3P+9ddfAn0TQhRHeXk5pk2bhlWrVmHs2LHMeltb23r3JbObSEePHsXbt28xd+5codv19PQa3Hd+fn6t2eYJIZIlzXygn1eGqK3yhSiuX7+OV69eQUlJCd27d4eJiQm8vLxw586devclswD68OFDAFXZ40Xh7OzMlA9hs9m4ceOG0HYXLlzA3r17ERoaKtb4qKQHIfLBzMyMrzpEdHS0WP09efIEALB48WIsWrQIhw4dgr6+Pvr168dXCFMUMrsLX9/rG8nJyejUqRPzWViJjTt37mDIkCEIDw+Hm5ubWOOLjo7GkiVLxOqDEEUhjRpGvP5evHjBl0xETU1NaPvFixfX+Td75coVVP5/3r2FCxfCx8cHQFVmNlNTU/z222/1mnzJLIB26NABAHD//n04OTnV2d7MzAw2NjY1br979y769++PkJAQLFq0SOzxLViwADNnzmQ+FxQUUF0kQmRA1IoQkydPhp+fX61tLC0t8eHDBwBVSd951NTUYGVlhefPn9drbDILoO7u7jA0NMTKlSv5biLx5OXliXwd9M6dO+jfvz8CAwOxfPlyiYxPTU2txv/TEUL4ycNdeENDQxgaGtbZrmfPnlBTU8ODBw/w1VdfAQDKysrw9OlTWFhY1Os7ZRZAtbS0sH37dowYMQLffvstpk6dChsbG7x9+xZ79+7F8+fPRSoid+fOHbi6usLd3R0zZ85kss0rKyujVatWTLu7d++itLQU7969w4cPH5CRkQEAQquCEkLqpyk9SK+jo4MJEyYgIiICZmZmsLCwwKpVqwAAI0aMqFdfMn0TaciQITh//jyio6MxatQo5jS5f//+WLZsmUh9/Pbbb3jz5g127dqFXbt2MestLCzw9OlT5vM333yDZ8+eMZ+7d+8OQLrPmhFC5NOqVauYIpfFxcVwdHTEqVOnhNZpqw1lpBcRZaSXb5RMRDIampF+QswrqWSk3zyvrVz/zVEyEUIIaSBKJkKaBXlJ66aouFwp5ANtAifHNAMlhJAGohkoIURsXCk8SE8zUEIIacZoBkqahZuefWU9BJnoduSMrIcAgGoiEUJIgylqAKVTeEIIaSCZBNCgoCC+8hwGBgbw9PTErVu3kJCQUGc5kLS0NABAaWkpVq1ahR49ekBLSwu6urro1q0bFi1ahKysLOb7oqOj8cUXX0BbWxtGRkYYOnQoX3Z8Qoh4KrnSWeSdzGagnp6eyM7ORnZ2Nk6ePAkVFRUMGjQIvr6+zPrs7Gw4OTkhJCSEb52zszNKSkrg5uaGqKgoBAUF4cyZM7h27RpWrlyJ3NxcrF+/nvmu9PR0TJo0CRcvXsTx48dRXl4Od3d3fPz4UVaHTwhpBmR2DVRNTY0p0WFsbIx58+ahb9++KCws5CvdoaqqCk1NTYFyHitWrMC5c+dw9epV5r12ALCxsYGHhwffIxBHjhzh2zc+Ph5GRka4du0a+vZVzJsPhEiSol4DlYubSIWFhdi1axdsbGxgYGAg0j67d++Gm5sbX/CsjsVi1bhvfn4+ANRa9qOkpISvdABlpCeEfE5mp/CHDh1iynNoa2sjNTUVycnJUFISbUiZmZkCRaCGDRvG9Ons7Cx0Py6Xi5kzZ+Krr75C586da+w/Ojqar4wAJVMmpGa8fKCSXuSdzAKoq6srMjIykJGRgUuXLsHd3R1eXl58Kefq8vksc+PGjcjIyEBwcDCKioqE7jN58mTcunULu3fvrrXvBQsWID8/n1levHgh8rgIIYpBpgmVq5fo6NmzJ3R1dbFt2zaRcoG2b98e9+/f51tnYmICoOZT8ylTpiA1NRVnzpyBqalprf1TRnpCRFdZKfkEyP9fukiuyc1zoCwWC0pKSiguLhap/ciRI3H8+PEaq3NWx+VyMXnyZKSkpODUqVNo166duMMlhFSjqKfwMpuBlpSUMOU33r9/jw0bNqCwsBCDBw8Waf8ZM2bg8OHD6N+/PxYvXoyvv/4a+vr6yMzMxJ9//gllZWWm7aRJk5CUlITff/8d2trazPfq6upCQ0ND8gdHCFEIMgugR44cYU65tbW10bFjR/z2229wcXERaX91dXWcPHkSa9asQXx8PBYsWIDKykq0a9cOXl5emDFjBtN206ZNACDQd3x8PIKCgiRxOIQoNEV9jIlKeoiISnrIN0omIhkNLekREPYYquraEh1L6acP2BllLdd/c3LxHCgh4pKXrESKSlFnoHJzE4kQQpoamoESQsRWCclnpK8EzUAJIaTZohkoaRaOGtjLeghyzSP3jlT7V9RroBRACSFik8aD703hASE6hSeEkAaSSAB9/fo1QkNDYW5uzuT59PDwwIULFwAAlpaWYLFY2LNnj8C+9vb2YLFYSEhIENgWFRUFZWVlrFixQmBb9cz1ysrK0NfXh6OjIyIjI5l0dTybNm1C165doaOjAx0dHTg5OeHPP/+UxKETQlB1ul0p4aUpnMJLJID6+Pjg5s2bSExMRGZmJlJTU+Hi4oJ3794xbczMzBAfH8+338WLF5GTkwMtLS2h/cbHx2Pu3LmIi4sTul1HRwfZ2dl4+fIlzp8/j/Hjx2PHjh1wcHDgK+lhamqKFStW4OrVq7h69Sr69++PIUOG4M4d6V4XIoQ0b2IH0Ly8PJw7dw4xMTFwdXWFhYUFevfujQULFsDb25tp5+/vj/T0dL60cHFxcfD394eKiuCl2PT0dBQXFyMyMhIfP37EmTOCD0qzWCwYGxvDxMQEnTp1wtixY3H+/HkUFhZi7ty5TLvBgwfjm2++QYcOHdChQwcsX74cbDYbFy9eFPfwCSH4300kSS/yTuwAyktgfPDgQb4M7p9r3bo1PDw8kJiYCAAoKipCcnIygoODhbbncDgYOXIkWrRogZEjR4LD4Yg0HiMjI/j7+yM1NRUVFRUC2ysqKrBnzx58/PgRTk5OIvVJCCHCiB1AVVRUkJCQgMTEROjp6aFPnz4ICwvDrVu3BNoGBwcjISEBXC4X+/btg7W1NRwcHATaFRQUYP/+/QgICAAABAQEYN++fSKX1ejYsSM+fPiA3NxcZt3t27fBZrOhpqaGCRMm4MCBA7Czs6uxj5KSEhQUFPAthBDhFDWdncSugWZlZSE1NRUeHh5IS0tDjx49BG4MeXt7o7CwEGfOnEFcXFyNs8+kpCRYWVmhW7duAAAHBwdYWVkJvQklDO8HXz1jva2tLTIyMnDx4kVMnDgRgYGBuHv3bo19UEkPQkhdJPYYk7q6Otzc3BAeHo7z588jKCgIERERfG1UVFQwevRoRERE4NKlS/D39xfaV1xcHO7cuQMVFRVmuXPnjsin8ffu3YOOjg5fgTpVVVXY2NigV69eiI6ORrdu3bB27doa+6CSHoSIjltZKZVF3kntQXo7OzscPHhQYH1wcDBWr14NX19f6OvrC2y/ffs2rl69irS0NL7SHHl5eejbty/+/vvvWovBvX79GklJSRg6dGitBeq4XG6t12yppAchouM9eiTpPuWd2AE0NzcXI0aMQHBwMLp27QptbW1cvXoVK1euxJAhQwTad+rUCW/fvoWmpqbQ/jgcDnr37i20XruTkxM4HA5iY2MBVAXBnJwccLlc5OXl4cKFC4iKioKuri7fs6NhYWHw8vKCmZkZPnz4gD179iAtLU2gXjwhhNSH2AGUzWbD0dERsbGxePz4McrKymBmZoaQkBCEhYUJ3aem2u+lpaXYuXMn5s2bJ3S7j48PoqOjERMTA6DqZpOJiQlYLBZ0dHRga2uLwMBATJs2jS8B67///ovRo0cjOzsburq66Nq1K44cOQI3Nzcxj54QAijuq5yUkV5ElJFevlEykdqJmkykoRnph066hRZqks1IX1byAQd/6SrXf3OUTIQQIjbKxkRIEybtdG2kecnMzMScOXPw119/obS0FF26dMGyZcvg6upar34oGxMhRGxN7VVOb29vlJeX49SpU7h27RocHBwwaNAgpuS5qCiAEkIUytu3b/Ho0SPMnz8fXbt2Rfv27bFixQoUFRXVO8EQncITQsRWiUpUciX74Hslqvr7/DVqcZ/RNjAwQKdOnbBjxw706NEDampq2LJlC1q3bo2ePXvWqy8KoKRZONzCVtZDaBK8yx5IpV9upeRv+vDi8eevUUdERGDx4sUN7pfFYuH48eMYMmQItLW1oaSkhNatW+PIkSPQ09OrV190Ck8IkWsvXrzge616wYIFQtstXryYSbJe03L16lVwuVz8+OOPMDIywtmzZ3H58mUMGTIEgwYNQnZ2dr3GRjNQQojYpPkYE6+SRF0mT54MPz+/WttYWlri1KlTOHToEN6/f8/0u3HjRhw/fhyJiYmYP3++yGMUewYaFBQEFouFCRMmCGz78ccfwWKxEBgYiIEDB8LDw0OgzcaNG6Grq4vnz58DAA4dOgQXFxdoa2tDU1MTX3zxhdByHwCwf/9+uLi4QFdXF2w2G127dkVkZCSTCb8+ZT8IIU2boaEhOnbsWOuirq6OoqIiABDIlaGkpITKeiYwkcgpvJmZGfbs2YPi4mJm3adPn7B7926Ym5uDxWIhPj4ely5dwpYtW5g2//zzD+bNm4e1a9fC3Nwc69evx5AhQ+Ds7IxLly7h1q1b8PPzw4QJEzB79my+71y4cCF8fX3xxRdf4M8//8Tff/+Nn3/+GTdv3sSvv/7KtBO17AchpOGaUj5QJycn6OvrIzAwEDdv3mSeCf3nn3/4qmiIQiKn8D169MCTJ0+QkpLCpKhLSUmBmZkZrKysAFQF2bVr12Ly5Mlwd3eHpaUlxo4diwEDBiAoKAgvXrzArFmzMH36dERFRTF9z5o1C6qqqpg6dSpGjBgBR0dHXL58GVFRUVizZg2mTZvGtLW0tISbmxvy8vKYdbyyHwCY0h+DBw+Gvb095s6di507d0riR0AIaSIMDQ1x5MgRLFy4EP3790dZWRns7e3x+++/MzmIRSWxm0hjxozhKxonLGFyYGAgBgwYgDFjxmDDhg34+++/sXXrVgDAvn37UFZWJjDTBIDQ0FCw2Wzs3r0bALBr1y6w2Wz8+OOPQsdS1520usp+AJSRnpD6qKyslMoiLb169cLRo0eRm5uLgoICXLhwAV5eXvXuR2IBdPTo0Th37hyePn2KZ8+e4a+//mJKclS3detW3L17F9OnT8eWLVtgZGQEoOrVKl1dXZiYmAjso6qqCisrK2RmZgIAHj58CCsrK7Ro0aLB4xVW9qM6ykhPCKmLxAKooaEhvL29kZiYiPj4eHh7e8PQ0FCgnZGREcaPH49OnTph2LBhIvfP5XKZEh3V/91Qwsp+VEcZ6QkRXVN7lVNSJPoYU3BwMCZPngwA+OWXX2r+0v8v01Fdhw4dkJ+fj6ysLLRp04ZvW2lpKZ48eYL+/fszbc+dO4eysrIGz0KFlf2ojjLSEyI6LrcSXAm/iSTp/qRBog/Se3p6orS0FKWlpUIfWaqNj48PVFRU8PPPPwts27x5Mz5+/IiRI0cCAEaNGoXCwkJs3LhRaF/VbyIJI2rZD0IIqY1EZ6DKysq4d+8e8+/6MDc3x8qVKzF79myoq6tj9OjRaNGiBX7//XeEhYVh1qxZcHR0BAA4Ojpi7ty5mDVrFl69eoVhw4ahTZs2ePToETZv3oyvvvqKuTsvatkPQkjDUT5QCREnc/SMGTNgbW2N1atXY+3ataioqIC9vT02bdqEMWPG8LWNiYlBz5498csvv2Dz5s2orKyEtbU1vvvuOwQGBjLtRC37QQgh9UUlPUREJT3kGyUTEU1dyUQaWtJj4Mi/oKLKltQwAQDlpYU4sbuPXP/N0bvwpFmQVpYhQmpDAZQQIrZKrhTygSraXXhCCFEkNAMlhIiN7sIT0oTRTSTRSeN6MZdbCa6E311XuAfpCSFEkdAMlBAiNkU9hW8SM9DXr18jNDQU5ubmUFNTg7GxMTw8PHDhwgUAVXlAeZnnNTQ00LFjR6xatYovIevTp0+F1kgRljGKEEJE0SRmoD4+PigrK0NiYiKsrKzw77//4uTJk0zpDgCIjIxESEgIPn36hBMnTmDixInQ0dFBaGgoX18nTpyAvb0981lDQ6PRjoOQ5kpRk4nIfQDNy8vDuXPnkJaWhn79+gEALCws0Lt3b7522traTOb5cePGYdOmTTh27JhAADUwMGDaEUKIOOT+FJ7NZoPNZuPgwYMoKSmpsz2Xy0VaWhru3bsnVsJlykhPiOgqK4HKSq6EF1kfVd3kPoCqqKggISEBiYmJ0NPTQ58+fRAWFoZbt27xtZs3bx7YbDbU1NTg6uoKLpeLqVOnCvTn7OzMBGU2m40bN24I/V7KSE8IqYvcB1Cg6hpoVlYWUlNT4eHhgbS0NPTo0YOv3PGcOXOQkZGB9PR0uLq6YuHChXB2dhboKzk5GRkZGcxiZ2cn9DspIz0houNWVkplkXdyfw2UR11dHW5ubnBzc0N4eDjGjRuHiIgIBAUFAagqKWJjYwMbGxvs378fNjY2+PLLLzFw4EC+fszMzGBjY1Pn91FGekJIXZrEDFQYOzs7fPz4Ueg2fX19TJkyBbNnz5ZabWlCyP8oak0kuQ+gubm56N+/P3bu3Ilbt27hn3/+wW+//YaVK1diyJAhNe43adIkPHjwAPv372/E0RKimHiPMUl6kXdyfwrPZrPh6OiI2NhYPH78GGVlZTAzM0NISAjCwsJq3K9Vq1YYPXo0Fi9ejOHDhzfiiAkhioIy0ouIMtLLN0omIrrakok0NCP9l15/QqWFliSHifKyj7j4p5dc/83J/Sk8IYTIK7k/hSdEFFTSQ7ak8dgRPcbUjPCudNAbSaQ54/1+1/fKXkW58CdixCGNPiWNAqiIPnz4AAD0RhJRCB8+fICurm6d7VRVVWFsbIyrJ7+XyjiMjY2hqqoqlb4lgW4iiaiyshJZWVngcrkwNzfHixcv5PbCtqgKCgpgZmbW5I+FjkNyuFwuPnz4gDZt2kBJSbRbJJ8+fUJpaalUxqOqqgp1dXWp9C0JNAMVkZKSEkxNTZlTHB0dnSb9x1pdczkWOg7JEGXmWZ26urpcBzlporvwhBDSQBRACSGkgSiA1pOamhoiIiKaRaKR5nIsdBxEVugmEiGENBDNQAkhpIEogBJCSANRACWEkAaiAEoIIQ1EAbQeli9fDmdnZ2hqakJPT09om+fPn2Pw4MHQ0tKCoaEhpk6dKrW3NCTJ0tISLBaLb5k/f76sh1WnjRs3ol27dlBXV0fPnj1x9uxZWQ+p3hYvXizws6fS200DvYlUD6WlpRgxYgScnJzA4XAEtldUVMDb2xutWrXCuXPnkJubi8DAQHC5XKxfv14GI66fyMhIhISEMJ/ZbLYMR1O35ORkTJ8+HRs3bkSfPn2wZcsWeHl54e7duzA3N5f18OrF3t4eJ06cYD4rKyvLcDREZFxSb/Hx8VxdXV2B9f/973+5SkpK3FevXjHrdu/ezVVTU+Pm5+c34gjrz8LCghsbGyvrYdRL7969uRMmTOBb17FjR+78+fNlNKKGiYiI4Hbr1k3WwyANQKfwEnThwgV07twZbdq0YdZ5eHigpKQE165dk+HIRBMTEwMDAwM4ODhg+fLlcn3pobS0FNeuXYO7uzvfend3d5w/f15Go2q4hw8fok2bNmjXrh38/Pzw5MkTWQ+JiIBO4SUoJycHrVu35lunr68PVVVV5OTkyGhUopk2bRp69OgBfX19XL58GQsWLMA///yD7du3y3poQr19+xYVFRUCP+/WrVvL/c/6c46OjtixYwc6dOiAf//9F8uWLYOzszPu3LkDAwMDWQ+P1ELhZ6DCLuB/vly9elXk/lgslsA6LpcrdL201efYZsyYgX79+qFr164YN24cNm/eDA6Hg9zc3EYfd318/nOV1c9aHF5eXvDx8UGXLl0wcOBAHD58GACQmJgo45GRuij8DHTy5Mnw8/OrtY2lpaVIfRkbG+PSpUt8696/f4+ysjKBmVJjEOfYvvzySwDAo0eP5HIWZGhoCGVlZYHZ5uvXr2Xys5YkLS0tdOnSBQ8fPpT1UEgdFD6AGhoawtDQUCJ9OTk5Yfny5cjOzoaJiQkA4NixY1BTU0PPnj0l8h31Ic6x3bhxAwCY45A3qqqq6NmzJ44fP45hw4Yx648fP44hQ4bIcGTiKykpwb179/D111/LeiikDgofQOvj+fPnePfuHZ4/f46KigpkZGQAAGxsbMBms+Hu7g47OzuMHj0aq1atwrt37zB79myEhITIdaLfCxcu4OLFi3B1dYWuri6uXLmCGTNm4Ntvv5Xrx4FmzpyJ0aNHo1evXnBycsLWrVvx/PlzTJgwQdZDq5fZs2dj8ODBMDc3x+vXr7Fs2TIUFBQgMDBQ1kMjdZH1YwBNSWBgIBeAwHL69GmmzbNnz7je3t5cDQ0NbsuWLbmTJ0/mfvr0SXaDFsG1a9e4jo6OXF1dXa66ujrX1taWGxERwf348aOsh1anX375hWthYcFVVVXl9ujRg5ueni7rIdWbr68v18TEhNuiRQtumzZtuMOHD+feuXNH1sMiIqB0doQQ0kAKfxeeEEIaigIoIYQ0EAVQQghpIAqghBDSQBRACSGkgSiAEkJIA1EAJYSQBqIASuRKQkJCjdn+hUlLSwOLxUJeXp7UxkRITSiAErGdP38eysrK8PT0rNd+lpaWWLNmDd86X19fZGZmityHs7MzsrOzoaurC6D+AZgQcVAAJWKLi4vDlClTcO7cOTx//lysvjQ0NGBkZCRye1VVVRgbGze5FHakeaAASsTy8eNH7N27FxMnTsSgQYOQkJDAtz01NRW9evWCuro6DA0NMXz4cACAi4sLnj17hhkzZjC5SQH+GeSDBw/AYrFw//59vj7/85//wNLSElwul+8UPi0tDWPGjEF+fj7T5+LFixEZGYkuXboIjL1nz54IDw+X/A+FKAwKoEQsycnJsLW1ha2tLQICAhAfHw9eeoXDhw9j+PDh8Pb2xo0bN3Dy5En06tULAJCSkgJTU1NERkYiOzsb2dnZAn3b2tqiZ8+e2LVrF9/6pKQkjBo1SmDW6ezsjDVr1kBHR4fpc/bs2QgODsbdu3dx5coVpu2tW7dw48YNBAUFSfgnQhQJBVAiFg6Hg4CAAACAp6cnCgsLcfLkSQBVZaD9/PywZMkSdOrUCd26dUNYWBgAoGXLllBWVoa2tjaMjY1rLOPr7++PpKQk5nNmZiauXbvGfGd1qqqq0NXVZcoCGxsbg81mw9TUFB4eHoiPj2faxsfHo1+/frCyspLYz4IoHgqgpMEePHiAy5cvM1nvVVRU4Ovri7i4OABARkYGBgwYINZ3+Pn54dmzZ7h48SIAYNeuXXBwcICdnV29+gkJCcHu3bvx6dMnlJWVYdeuXQgODhZrbIRQQmXSYBwOB+Xl5Wjbti2zjsvlokWLFnj//j00NDTE/g4TExO4uroiKSkJX375JXbv3o3Q0NB69zN48GCoqanhwIEDUFNTQ0lJCXx8fMQeH1FsNAMlDVJeXo4dO3bg559/RkZGBrPcvHkTFhYW2LVrF7p27cqczgujqqqKioqKOr/L398fycnJuHDhAh4/flxrnaea+lRRUUFgYCDi4+MRHx8PPz8/aGpqinawhNSAZqCkQQ4dOoT3799j7NixzDOYPN999x04HA5iY2MxYMAAWFtbw8/PD+Xl5fjzzz8xd+5cAFXPgZ45cwZ+fn5QU1OrsX7T8OHDMXHiREycOBGurq58M97PWVpaMtdhu3XrBk1NTSZQjhs3Dp06dQIA/PXXX5L4MRAFRzNQ0iAcDgcDBw4UCJ4A4OPjg4yMDOjo6OC3335DamoqHBwc0L9/f76qpZGRkXj69Cmsra3RqlWrGr9LR0cHgwcPxs2bN+Hv71/ruJydnTFhwgT4+vqiVatWWLlyJbOtffv2cHZ2hq2tLRwdHRtw1ITwo5IeRGFwuVx07NgRoaGhmDlzpqyHQ5oBOoUnCuH169f49ddf8erVK4wZM0bWwyHNBAVQohBat24NQ0NDbN26Ffr6+rIeDmkmKIAShUBXqog00E0kQghpIAqghBDSQBRACSGkgSiAEkJIA1EAJYSQBqIASgghDUQBlBBCGogCKCGENBAFUEIIaaD/A1iWdrsllD0eAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dc.plot_barplot(\n", " acts=tf_acts, contrast=\"treatment.vs.control\", top=25, vertical=True, figsize=(3, 6)\n", ")" ] }, { "cell_type": "code", "execution_count": 15, "id": "65226927-8da1-4555-88c1-c213f7ac46d4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1201" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We obtain ligand-receptor interactions from Omnipath, and we keep only the receptors\n", "# This is our list of a prior potential receptors from which we will infer the network\n", "unique_receptors = set(\n", " op.interactions.LigRecExtra.get(genesymbols=True)[\n", " \"target_genesymbol\"\n", " ].values.tolist()\n", ")\n", "len(unique_receptors)" ] }, { "cell_type": "code", "execution_count": 53, "id": "6b6634d6-09b3-486e-984a-b382c20d41f8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df_de_receptors = results_df.loc[results_df.index.intersection(unique_receptors)]\n", "df_de_receptors = df_de_receptors.sort_values(by=\"stat\", ascending=False)\n", "df_de_receptors.plot.scatter(x=\"log2FoldChange\", y=\"stat\")" ] }, { "cell_type": "code", "execution_count": 56, "id": "2ceda357-2783-457e-a6ab-091b02630650", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
baseMeanlog2FoldChangelfcSEstatpvaluepadj
GeneName
CDH628262.2969833.0198060.07741739.0070750.000000e+000.000000e+00
CRLF17919.6723433.3416440.08799737.9743170.000000e+000.000000e+00
FZD82719.7814983.8430150.10269637.4214271.751855e-3061.817595e-303
CDH27111.5075472.8094610.08192934.2912731.058818e-2576.138964e-255
DYSF441.4495114.5932500.18220725.2089113.198723e-1405.680759e-138
INHBA24329.3596412.5986130.10432124.9097875.828479e-1379.655193e-135
CELSR1492.3244353.5173150.15449522.7665069.849205e-1151.303070e-112
PDGFC5481.1670751.8948570.08381122.6087073.558087e-1134.676039e-111
VDR1450.3043532.5550070.11678221.8784674.166147e-1064.977410e-104
HHIP379.0640346.0058410.28737420.8990365.463696e-975.439689e-95
IGF1361.1890766.4626560.31179520.7272321.967869e-951.910966e-93
NPTN12640.9711641.4186760.07935517.8774801.766413e-711.095010e-69
EFNB23320.0768051.5603310.08784717.7618611.395299e-708.385834e-69
ITGB36530.3141591.3647670.07877217.3254693.022208e-671.673505e-65
TGFB18948.2436941.3352710.07761817.2030572.518840e-661.367876e-64
IL21R259.2214683.2279030.19209716.8035412.298997e-631.180212e-61
ITGA126223.8325041.3103510.07983016.4142701.511887e-607.251541e-59
FAP7231.1574831.7509010.11518815.2004263.513274e-521.413412e-50
EGF144.2620443.7333010.25163414.8362468.540295e-503.194589e-48
ITGA1112471.0336683.6731990.25031414.6743789.407359e-493.390261e-47
\n", "
" ], "text/plain": [ " baseMean log2FoldChange lfcSE stat pvalue \\\n", "GeneName \n", "CDH6 28262.296983 3.019806 0.077417 39.007075 0.000000e+00 \n", "CRLF1 7919.672343 3.341644 0.087997 37.974317 0.000000e+00 \n", "FZD8 2719.781498 3.843015 0.102696 37.421427 1.751855e-306 \n", "CDH2 7111.507547 2.809461 0.081929 34.291273 1.058818e-257 \n", "DYSF 441.449511 4.593250 0.182207 25.208911 3.198723e-140 \n", "INHBA 24329.359641 2.598613 0.104321 24.909787 5.828479e-137 \n", "CELSR1 492.324435 3.517315 0.154495 22.766506 9.849205e-115 \n", "PDGFC 5481.167075 1.894857 0.083811 22.608707 3.558087e-113 \n", "VDR 1450.304353 2.555007 0.116782 21.878467 4.166147e-106 \n", "HHIP 379.064034 6.005841 0.287374 20.899036 5.463696e-97 \n", "IGF1 361.189076 6.462656 0.311795 20.727232 1.967869e-95 \n", "NPTN 12640.971164 1.418676 0.079355 17.877480 1.766413e-71 \n", "EFNB2 3320.076805 1.560331 0.087847 17.761861 1.395299e-70 \n", "ITGB3 6530.314159 1.364767 0.078772 17.325469 3.022208e-67 \n", "TGFB1 8948.243694 1.335271 0.077618 17.203057 2.518840e-66 \n", "IL21R 259.221468 3.227903 0.192097 16.803541 2.298997e-63 \n", "ITGA1 26223.832504 1.310351 0.079830 16.414270 1.511887e-60 \n", "FAP 7231.157483 1.750901 0.115188 15.200426 3.513274e-52 \n", "EGF 144.262044 3.733301 0.251634 14.836246 8.540295e-50 \n", "ITGA11 12471.033668 3.673199 0.250314 14.674378 9.407359e-49 \n", "\n", " padj \n", "GeneName \n", "CDH6 0.000000e+00 \n", "CRLF1 0.000000e+00 \n", "FZD8 1.817595e-303 \n", "CDH2 6.138964e-255 \n", "DYSF 5.680759e-138 \n", "INHBA 9.655193e-135 \n", "CELSR1 1.303070e-112 \n", "PDGFC 4.676039e-111 \n", "VDR 4.977410e-104 \n", "HHIP 5.439689e-95 \n", "IGF1 1.910966e-93 \n", "NPTN 1.095010e-69 \n", "EFNB2 8.385834e-69 \n", "ITGB3 1.673505e-65 \n", "TGFB1 1.367876e-64 \n", "IL21R 1.180212e-61 \n", "ITGA1 7.251541e-59 \n", "FAP 1.413412e-50 \n", "EGF 3.194589e-48 \n", "ITGA11 3.390261e-47 " ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We will take the top 20 receptors that increased the expression after treatment\n", "df_top_receptors = df_de_receptors.head(20)\n", "df_top_receptors" ] }, { "cell_type": "markdown", "id": "4071c630-59d4-4928-b2f1-283eba931d06", "metadata": {}, "source": [ "## Inferring intracellular signalling network with CARNIVAL and CORNETO\n", "\n", "CORNETO is a unified framework for knowledge-driven network inference. It includes a very flexible implementation of CARNIVAL that expands its original capabilities. We will see how to use it under different assumptions to extract a network from a prior knowledge network and a set of potential receptors + our estimated TFs" ] }, { "cell_type": "code", "execution_count": 57, "id": "3b2b7222-cc3c-4981-aa82-1f17ee546214", "metadata": {}, "outputs": [ { "data": { "text/html": [], "text/plain": [] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", "
\n", " \n", " \n", " \n", " \n", "
Installed version:v1.0.0.dev1 (latest: v1.0.0.dev0)
Available backends:CVXPY v1.5.3
Default backend (corneto.opt):CVXPY
Installed solvers:GUROBI, SCIP, SCIPY
Graphviz version:v0.20.3
Installed path:C:\\Users\\pablo\\Documents\\work\\projects\\corneto\\corneto
Repository:https://github.com/saezlab/corneto
\n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cn.info()" ] }, { "cell_type": "code", "execution_count": 58, "id": "653e2ae6-a86a-4433-aca9-e783662e0848", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sourcetargetsource_genesymboltarget_genesymbolis_directedis_stimulationis_inhibitionconsensus_directionconsensus_stimulationconsensus_inhibitioncuration_effortreferencessourcesn_sourcesn_primary_sourcesn_referencesreferences_stripped
0Q13976Q13507PRKG1TRPC3TrueFalseTrueTrueFalseTrue9HPRD:14983059;KEA:14983059;ProtMapper:14983059...HPRD;HPRD_KEA;HPRD_MIMP;KEA;MIMP;PhosphoPoint;...158214983059;16331690
1Q13976Q9HCX4PRKG1TRPC7TrueTrueFalseTrueTrueFalse3SIGNOR:21402151;TRIP:21402151;iPTMnet:21402151SIGNOR;TRIP;iPTMnet33121402151
2Q13438Q9HBA0OS9TRPV4TrueTrueTrueTrueTrueTrue3HPRD:17932042;SIGNOR:17932042;TRIP:17932042HPRD;SIGNOR;TRIP33117932042
3P18031Q9H1D0PTPN1TRPV6TrueFalseTrueTrueFalseTrue11DEPOD:15894168;DEPOD:17197020;HPRD:15894168;In...DEPOD;HPRD;IntAct;Lit-BM-17;SIGNOR;SPIKE_LC;TRIP76215894168;17197020
4P63244Q9BX84RACK1TRPM6TrueFalseTrueTrueFalseTrue2SIGNOR:18258429;TRIP:18258429SIGNOR;TRIP22118258429
\n", "
" ], "text/plain": [ " source target source_genesymbol target_genesymbol is_directed \\\n", "0 Q13976 Q13507 PRKG1 TRPC3 True \n", "1 Q13976 Q9HCX4 PRKG1 TRPC7 True \n", "2 Q13438 Q9HBA0 OS9 TRPV4 True \n", "3 P18031 Q9H1D0 PTPN1 TRPV6 True \n", "4 P63244 Q9BX84 RACK1 TRPM6 True \n", "\n", " is_stimulation is_inhibition consensus_direction consensus_stimulation \\\n", "0 False True True False \n", "1 True False True True \n", "2 True True True True \n", "3 False True True False \n", "4 False True True False \n", "\n", " consensus_inhibition curation_effort \\\n", "0 True 9 \n", "1 False 3 \n", "2 True 3 \n", "3 True 11 \n", "4 True 2 \n", "\n", " references \\\n", "0 HPRD:14983059;KEA:14983059;ProtMapper:14983059... \n", "1 SIGNOR:21402151;TRIP:21402151;iPTMnet:21402151 \n", "2 HPRD:17932042;SIGNOR:17932042;TRIP:17932042 \n", "3 DEPOD:15894168;DEPOD:17197020;HPRD:15894168;In... \n", "4 SIGNOR:18258429;TRIP:18258429 \n", "\n", " sources n_sources \\\n", "0 HPRD;HPRD_KEA;HPRD_MIMP;KEA;MIMP;PhosphoPoint;... 15 \n", "1 SIGNOR;TRIP;iPTMnet 3 \n", "2 HPRD;SIGNOR;TRIP 3 \n", "3 DEPOD;HPRD;IntAct;Lit-BM-17;SIGNOR;SPIKE_LC;TRIP 7 \n", "4 SIGNOR;TRIP 2 \n", "\n", " n_primary_sources n_references references_stripped \n", "0 8 2 14983059;16331690 \n", "1 3 1 21402151 \n", "2 3 1 17932042 \n", "3 6 2 15894168;17197020 \n", "4 2 1 18258429 " ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We get only interactions from SIGNOR http://signor.uniroma2.it/\n", "pkn = op.interactions.OmniPath.get(databases=[\"SIGNOR\"], genesymbols=True)\n", "pkn = pkn[pkn.consensus_direction == True]\n", "pkn.head()" ] }, { "cell_type": "code", "execution_count": 59, "id": "1a040ca9-e406-4f04-82d6-aae294de7eff", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
source_genesymbolinteractiontarget_genesymbol
0PRKG1-1TRPC3
1PRKG11TRPC7
2OS90TRPV4
3PTPN1-1TRPV6
4RACK1-1TRPM6
............
61579DTNBP11WASF2
61580CDK11KMT5A
61581PIM21CDKN1A
61582AKT11WNK1
61583PRKCA1CSPG4
\n", "

60903 rows × 3 columns

\n", "
" ], "text/plain": [ " source_genesymbol interaction target_genesymbol\n", "0 PRKG1 -1 TRPC3\n", "1 PRKG1 1 TRPC7\n", "2 OS9 0 TRPV4\n", "3 PTPN1 -1 TRPV6\n", "4 RACK1 -1 TRPM6\n", "... ... ... ...\n", "61579 DTNBP1 1 WASF2\n", "61580 CDK1 1 KMT5A\n", "61581 PIM2 1 CDKN1A\n", "61582 AKT1 1 WNK1\n", "61583 PRKCA 1 CSPG4\n", "\n", "[60903 rows x 3 columns]" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pkn[\"interaction\"] = pkn[\"is_stimulation\"].astype(int) - pkn[\"is_inhibition\"].astype(\n", " int\n", ")\n", "sel_pkn = pkn[[\"source_genesymbol\", \"interaction\", \"target_genesymbol\"]]\n", "sel_pkn" ] }, { "cell_type": "code", "execution_count": 60, "id": "99849f5d-f449-40ae-94af-01d01bcd2240", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(5436, 60020)" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We create the CORNETO graph by importing the edges and interaction\n", "G = cn.Graph.from_sif_tuples(\n", " [(r[0], r[1], r[2]) for _, r in sel_pkn.iterrows() if r[1] != 0]\n", ")\n", "G.shape" ] }, { "cell_type": "code", "execution_count": 61, "id": "634cac48-79f5-4812-a7bb-8ef37df7bcf9", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
treatment.vs.control
SRF7.421123
MYOCD7.372481
SMAD37.190940
BTG26.206934
TCF216.183177
......
SPI1-5.427345
NR4A3-5.749818
HIF3A-5.882730
NR1H4-6.081834
IRF1-9.395861
\n", "

84 rows × 1 columns

\n", "
" ], "text/plain": [ " treatment.vs.control\n", "SRF 7.421123\n", "MYOCD 7.372481\n", "SMAD3 7.190940\n", "BTG2 6.206934\n", "TCF21 6.183177\n", "... ...\n", "SPI1 -5.427345\n", "NR4A3 -5.749818\n", "HIF3A -5.882730\n", "NR1H4 -6.081834\n", "IRF1 -9.395861\n", "\n", "[84 rows x 1 columns]" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# As measurements, we take the estimated TFs, we will filter out TFs with p-val > 0.001\n", "significant_tfs = (\n", " tf_acts[tf_pvals <= 0.001]\n", " .T.dropna()\n", " .sort_values(by=\"treatment.vs.control\", ascending=False)\n", ")\n", "significant_tfs" ] }, { "cell_type": "code", "execution_count": 62, "id": "83c01323-be92-456e-bb46-c79d5147f40a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'SRF': 7.4211225509643555,\n", " 'MYOCD': 7.372481346130371,\n", " 'SMAD3': 7.190939903259277,\n", " 'BTG2': 6.206934452056885,\n", " 'SMAD2': 5.634183883666992,\n", " 'JUNB': 5.632753849029541,\n", " 'HMGA2': 4.937854766845703,\n", " 'POU3F1': 4.921204090118408,\n", " 'RORA': 4.765202045440674,\n", " 'SMAD4': 4.588079452514648,\n", " 'MEF2A': 4.287934303283691,\n", " 'FOSL1': 3.938856363296509,\n", " 'SOX4': 3.9252400398254395,\n", " 'NCOA1': 3.8250725269317627,\n", " 'SFPQ': 3.7440223693847656,\n", " 'FOSB': 3.7315196990966797,\n", " 'SP7': 3.6977312564849854,\n", " 'HBP1': 3.6794629096984863,\n", " 'CREB3': 3.632990837097168,\n", " 'ASXL1': 3.574924945831299,\n", " 'MEIS2': 3.4930355548858643,\n", " 'TAL1': 3.354771852493286,\n", " 'HOXC8': 3.347809314727783,\n", " 'DLX5': 3.3378002643585205,\n", " 'DLX2': -3.2941677570343018,\n", " 'CDX2': -3.2988994121551514,\n", " 'MAFA': -3.310776472091675,\n", " 'STAT5A': -3.430389165878296,\n", " 'RXRB': -3.4593443870544434,\n", " 'MSX2': -3.5386831760406494,\n", " 'SMAD6': -3.5516138076782227,\n", " 'CEBPA': -3.59158992767334,\n", " 'PLAGL1': -3.6208605766296387,\n", " 'RELA': -3.63592267036438,\n", " 'TP53': -3.6599860191345215,\n", " 'NKX2-1': -3.6630992889404297,\n", " 'NFKB1': -3.842646598815918,\n", " 'CEBPB': -3.861898422241211,\n", " 'WWTR1': -3.9853055477142334,\n", " 'SMAD5': -4.020087242126465,\n", " 'VHL': -4.030272483825684,\n", " 'CIITA': -4.151106834411621,\n", " 'NFKBIB': -4.1750593185424805,\n", " 'REL': -4.184780120849609,\n", " 'PITX3': -4.216534614562988,\n", " 'PITX1': -4.358892440795898,\n", " 'MECP2': -4.400153160095215,\n", " 'TGIF1': -4.501400470733643,\n", " 'MECOM': -4.5638203620910645,\n", " 'IRF3': -4.733184814453125,\n", " 'RELB': -4.848578453063965,\n", " 'NFE2L2': -4.937533378601074,\n", " 'STAT1': -5.215514659881592,\n", " 'HOXC6': -5.283187389373779,\n", " 'IRF2': -5.291377544403076,\n", " 'KLF11': -5.293704509735107,\n", " 'SMAD7': -5.3725266456604,\n", " 'SPI1': -5.427344799041748,\n", " 'NR4A3': -5.749818325042725,\n", " 'HIF3A': -5.882729530334473,\n", " 'NR1H4': -6.081834316253662,\n", " 'IRF1': -9.39586067199707}" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We keep only the ones in the PKN graph\n", "measurements = significant_tfs.loc[significant_tfs.index.intersection(G.V)].to_dict()[\n", " \"treatment.vs.control\"\n", "]\n", "measurements" ] }, { "cell_type": "code", "execution_count": 64, "id": "8f644411-e8c8-4072-b62e-230adea6eb08", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'CDH6': 0,\n", " 'CRLF1': 0,\n", " 'FZD8': 0,\n", " 'CDH2': 0,\n", " 'INHBA': 0,\n", " 'VDR': 0,\n", " 'IGF1': 0,\n", " 'EFNB2': 0,\n", " 'ITGB3': 0,\n", " 'TGFB1': 0,\n", " 'IL21R': 0,\n", " 'EGF': 0,\n", " 'ITGA11': 0}" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We will infer the direction, so for the inputs, we use a value of 0 (=unknown direction)\n", "inputs = {k: 0 for k in df_top_receptors.index.intersection(G.V).values}\n", "inputs" ] }, { "cell_type": "code", "execution_count": 65, "id": "7f5b695a-e965-4e3d-8f7c-55efda9b2eb1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(958, 3279)" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We prune the network from inputs (receptors) to TFs to improve the performance.\n", "# The pruning step removes only parts of the network that cannot be reached from the pre-selected receptors\n", "from corneto.methods.carnival import preprocess_graph\n", "\n", "Gp, inputs_p, measurements_p = preprocess_graph(G, inputs, measurements)\n", "Gp.shape" ] }, { "cell_type": "code", "execution_count": 66, "id": "cab88e0f-333a-463a-942a-86aefea03be4", "metadata": {}, "outputs": [], "source": [ "vertices = Gp.V" ] }, { "cell_type": "code", "execution_count": 75, "id": "a94e21f6-14a8-4f01-804a-73b88eda11ba", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'vertex_inhibited': Variable((958,), vertex_inhibited, boolean=True),\n", " 'edge_activating': Variable((3279,), edge_activating, boolean=True),\n", " 'edge_inhibiting': Variable((3279,), edge_inhibiting, boolean=True),\n", " 'vertex_activated': Variable((958,), vertex_activated, boolean=True),\n", " 'vertex_position': Variable((958,), vertex_position),\n", " 'vertex_values': Expression(AFFINE, UNKNOWN, (958,)),\n", " 'edge_values': Expression(AFFINE, UNKNOWN, (3279,))}" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from corneto.methods.carnival import milp_carnival\n", "\n", "# We create a CARNIVAL problem\n", "P = milp_carnival(Gp, inputs_p, measurements_p, beta_weight=0.2)\n", "\n", "# The CARNIVAL problem contains useful variables that we will estimate from the data\n", "P.expr" ] }, { "cell_type": "code", "execution_count": 76, "id": "3b32b7e6-e5d1-458d-9b52-cc5eb44323c7", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Warning: node 'FBXW7', graph '%3' size too small for label\n", "Warning: node 'HIPK2', graph '%3' size too small for label\n", "Warning: node 'MAPK1', graph '%3' size too small for label\n", "Warning: node 'NFKB2', graph '%3' size too small for label\n", "Warning: node 'TRIP11', graph '%3' size too small for label\n", "Warning: node 'THRA', graph '%3' size too small for label\n", "Warning: node 'MYOCD', graph '%3' size too small for label\n", "Warning: node 'RORA', graph '%3' size too small for label\n", "Warning: node 'NFKB1', graph '%3' size too small for label\n", "Warning: node 'PPP2CA', graph '%3' size too small for label\n", "Warning: node 'TRAF2', graph '%3' size too small for label\n", "Warning: node 'SMURF1', graph '%3' size too small for label\n", "Warning: node 'SMAD6', graph '%3' size too small for label\n", "Warning: node 'FOSL1', graph '%3' size too small for label\n", "Warning: node 'MAPK14', graph '%3' size too small for label\n", "Warning: node 'MEF2A', graph '%3' size too small for label\n", "Warning: node 'NCOA1', graph '%3' size too small for label\n", "Warning: node 'ASXL1', graph '%3' size too small for label\n", "Warning: node 'APC_AXIN1_GSK3B', graph '%3' size too small for label\n", "Warning: node 'MSX2', graph '%3' size too small for label\n", "Warning: node 'PRKCA', graph '%3' size too small for label\n", "Warning: node 'NFE2L2', graph '%3' size too small for label\n", "Warning: node 'TICAM1', graph '%3' size too small for label\n", "Warning: node 'SMAD7', graph '%3' size too small for label\n", "Warning: node 'STAT1', graph '%3' size too small for label\n", "Warning: node 'TGFB1', graph '%3' size too small for label\n", "Warning: node 'PPP2R2A', graph '%3' size too small for label\n", "Warning: node 'SMAD3', graph '%3' size too small for label\n", "Warning: node 'NKX2-1', graph '%3' size too small for label\n", "Warning: node 'GSK3B', graph '%3' size too small for label\n", "Warning: node 'SMAD2', graph '%3' size too small for label\n", "Warning: node 'SMAD4', graph '%3' size too small for label\n", "Warning: node 'CDON', graph '%3' size too small for label\n", "Warning: node 'PITX1', graph '%3' size too small for label\n", "Warning: node 'CHEK2', graph '%3' size too small for label\n", "Warning: node 'CTNNB1', graph '%3' size too small for label\n", "Warning: node 'HMGA2', graph '%3' size too small for label\n", "Warning: node 'STAT5A', graph '%3' size too small for label\n", "Warning: node 'MECP2', graph '%3' size too small for label\n", "Warning: node 'MAFA', graph '%3' size too small for label\n", "Warning: node 'CSNK1D', graph '%3' size too small for label\n", "Warning: node 'HIF3A', graph '%3' size too small for label\n", "Warning: node 'MAP3K7', graph '%3' size too small for label\n", "Warning: node 'NFKBIB', graph '%3' size too small for label\n", "Warning: node 'AKAP12', graph '%3' size too small for label\n", "Warning: node 'CEBPB', graph '%3' size too small for label\n", "Warning: node 'CUL1_RBX1_SKP1', graph '%3' size too small for label\n", "Warning: node 'MEIS2', graph '%3' size too small for label\n", "Warning: node 'WWTR1', graph '%3' size too small for label\n", "Warning: node 'INHBA', graph '%3' size too small for label\n", "Warning: node 'ACVR2B', graph '%3' size too small for label\n", "Warning: node 'RARG', graph '%3' size too small for label\n", "Warning: node 'RXRB', graph '%3' size too small for label\n", "Warning: node 'CEBPA', graph '%3' size too small for label\n", "Warning: node 'ERBB2', graph '%3' size too small for label\n", "Warning: node 'PPP1CA', graph '%3' size too small for label\n", "Warning: node 'MAPK3', graph '%3' size too small for label\n", "Warning: node 'HMGA1', graph '%3' size too small for label\n", "Warning: node 'POU3F1', graph '%3' size too small for label\n", "Warning: node 'SMAD5', graph '%3' size too small for label\n", "Warning: node 'NR1H4', graph '%3' size too small for label\n", "Warning: node 'FBXW7', graph '%3' size too small for label\n", "Warning: node 'HIPK2', graph '%3' size too small for label\n", "Warning: node 'MAPK1', graph '%3' size too small for label\n", "Warning: node 'NFKB2', graph '%3' size too small for label\n", "Warning: node 'TRIP11', graph '%3' size too small for label\n", "Warning: node 'THRA', graph '%3' size too small for label\n", "Warning: node 'MYOCD', graph '%3' size too small for label\n", "Warning: node 'RORA', graph '%3' size too small for label\n", "Warning: node 'NFKB1', graph '%3' size too small for label\n", "Warning: node 'PPP2CA', graph '%3' size too small for label\n", "Warning: node 'TRAF2', graph '%3' size too small for label\n", "Warning: node 'SMURF1', graph '%3' size too small for label\n", "Warning: node 'SMAD6', graph '%3' size too small for label\n", "Warning: node 'FOSL1', graph '%3' size too small for label\n", "Warning: node 'MAPK14', graph '%3' size too small for label\n", "Warning: node 'MEF2A', graph '%3' size too small for label\n", "Warning: node 'NCOA1', graph '%3' size too small for label\n", "Warning: node 'ASXL1', graph '%3' size too small for label\n", "Warning: node 'APC_AXIN1_GSK3B', graph '%3' size too small for label\n", "Warning: node 'MSX2', graph '%3' size too small for label\n", "Warning: node 'PRKCA', graph '%3' size too small for label\n", "Warning: node 'NFE2L2', graph '%3' size too small for label\n", "Warning: node 'TICAM1', graph '%3' size too small for label\n", "Warning: node 'SMAD7', graph '%3' size too small for label\n", "Warning: node 'STAT1', graph '%3' size too small for label\n", "Warning: node 'TGFB1', graph '%3' size too small for label\n", "Warning: node 'PPP2R2A', graph '%3' size too small for label\n", "Warning: node 'SMAD3', graph '%3' size too small for label\n", "Warning: node 'NKX2-1', graph '%3' size too small for label\n", "Warning: node 'GSK3B', graph '%3' size too small for label\n", "Warning: node 'SMAD2', graph '%3' size too small for label\n", "Warning: node 'SMAD4', graph '%3' size too small for label\n", "Warning: node 'CDON', graph '%3' size too small for label\n", "Warning: node 'PITX1', graph '%3' size too small for label\n", "Warning: node 'CHEK2', graph '%3' size too small for label\n", "Warning: node 'CTNNB1', graph '%3' size too small for label\n", "Warning: node 'HMGA2', graph '%3' size too small for label\n", "Warning: node 'STAT5A', graph '%3' size too small for label\n", "Warning: node 'MECP2', graph '%3' size too small for label\n", "Warning: node 'MAFA', graph '%3' size too small for label\n", "Warning: node 'CSNK1D', graph '%3' size too small for label\n", "Warning: node 'HIF3A', graph '%3' size too small for label\n", "Warning: node 'MAP3K7', graph '%3' size too small for label\n", "Warning: node 'NFKBIB', graph '%3' size too small for label\n", "Warning: node 'AKAP12', graph '%3' size too small for label\n", "Warning: node 'CEBPB', graph '%3' size too small for label\n", "Warning: node 'CUL1_RBX1_SKP1', graph '%3' size too small for label\n", "Warning: node 'MEIS2', graph '%3' size too small for label\n", "Warning: node 'WWTR1', graph '%3' size too small for label\n", "Warning: node 'INHBA', graph '%3' size too small for label\n", "Warning: node 'ACVR2B', graph '%3' size too small for label\n", "Warning: node 'RARG', graph '%3' size too small for label\n", "Warning: node 'RXRB', graph '%3' size too small for label\n", "Warning: node 'CEBPA', graph '%3' size too small for label\n", "Warning: node 'ERBB2', graph '%3' size too small for label\n", "Warning: node 'PPP1CA', graph '%3' size too small for label\n", "Warning: node 'MAPK3', graph '%3' size too small for label\n", "Warning: node 'HMGA1', graph '%3' size too small for label\n", "Warning: node 'POU3F1', graph '%3' size too small for label\n", "Warning: node 'SMAD5', graph '%3' size too small for label\n", "Warning: node 'NR1H4', graph '%3' size too small for label\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "ATM\n", "\n", "ATM\n", "\n", "\n", "\n", "FBXW7\n", "\n", "FBXW7\n", "\n", "\n", "\n", "ATM->FBXW7\n", "\n", "\n", "\n", "\n", "\n", "ABL1\n", "\n", "ABL1\n", "\n", "\n", "\n", "ATM->ABL1\n", "\n", "\n", "\n", "\n", "\n", "CHEK2\n", "\n", "CHEK2\n", "\n", "\n", "\n", "ATM->CHEK2\n", "\n", "\n", "\n", "\n", "\n", "CUL1_RBX1_SKP1\n", "\n", "CUL1_RBX1_SKP1\n", "\n", "\n", "\n", "FBXW7->CUL1_RBX1_SKP1\n", "\n", "\n", "\n", "\n", "\n", "HIPK2\n", "\n", "HIPK2\n", "\n", "\n", "\n", "ABL1->HIPK2\n", "\n", "\n", "\n", "\n", "\n", "PRKN\n", "\n", "PRKN\n", "\n", "\n", "\n", "ABL1->PRKN\n", "\n", "\n", "\n", "\n", "\n", "\n", "CEBPB\n", "\n", "CEBPB\n", "\n", "\n", "\n", "ABL1->CEBPB\n", "\n", "\n", "\n", "\n", "\n", "JAK2\n", "\n", "JAK2\n", "\n", "\n", "\n", "ABL1->JAK2\n", "\n", "\n", "\n", "\n", "\n", "MECP2\n", "\n", "MECP2\n", "\n", "\n", "\n", "HIPK2->MECP2\n", "\n", "\n", "\n", "\n", "\n", "HMGA1\n", "\n", "HMGA1\n", "\n", "\n", "\n", "HIPK2->HMGA1\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAPK1\n", "\n", "MAPK1\n", "\n", "\n", "\n", "JUN\n", "\n", "JUN\n", "\n", "\n", "\n", "MAPK1->JUN\n", "\n", "\n", "\n", "\n", "\n", "RORA\n", "\n", "RORA\n", "\n", "\n", "\n", "MAPK1->RORA\n", "\n", "\n", "\n", "\n", "\n", "\n", "EP300\n", "\n", "EP300\n", "\n", "\n", "\n", "MAPK1->EP300\n", "\n", "\n", "\n", "\n", "\n", "STAT5A\n", "\n", "STAT5A\n", "\n", "\n", "\n", "MAPK1->STAT5A\n", "\n", "\n", "\n", "\n", "\n", "MAFA\n", "\n", "MAFA\n", "\n", "\n", "\n", "MAPK1->MAFA\n", "\n", "\n", "\n", "\n", "\n", "SPI1\n", "\n", "SPI1\n", "\n", "\n", "\n", "JUN->SPI1\n", "\n", "\n", "\n", "\n", "\n", "NFKB2\n", "\n", "NFKB2\n", "\n", "\n", "\n", "RELB\n", "\n", "RELB\n", "\n", "\n", "\n", "NFKB2->RELB\n", "\n", "\n", "\n", "\n", "\n", "TRIP11\n", "\n", "TRIP11\n", "\n", "\n", "\n", "THRA\n", "\n", "THRA\n", "\n", "\n", "\n", "TRIP11->THRA\n", "\n", "\n", "\n", "\n", "\n", "RARG\n", "\n", "RARG\n", "\n", "\n", "\n", "THRA->RARG\n", "\n", "\n", "\n", "\n", "\n", "MYOCD\n", "\n", "MYOCD\n", "\n", "\n", "\n", "SRF\n", "\n", "SRF\n", "\n", "\n", "\n", "MYOCD->SRF\n", "\n", "\n", "\n", "\n", "\n", "TP53\n", "\n", "TP53\n", "\n", "\n", "\n", "TP53->NFKB2\n", "\n", "\n", "\n", "\n", "\n", "RB1\n", "\n", "RB1\n", "\n", "\n", "\n", "RB1->TRIP11\n", "\n", "\n", "\n", "\n", "\n", "\n", "TBK1\n", "\n", "TBK1\n", "\n", "\n", "\n", "REL\n", "\n", "REL\n", "\n", "\n", "\n", "TBK1->REL\n", "\n", "\n", "\n", "\n", "\n", "IRF3\n", "\n", "IRF3\n", "\n", "\n", "\n", "TBK1->IRF3\n", "\n", "\n", "\n", "\n", "\n", "NFKB1\n", "\n", "NFKB1\n", "\n", "\n", "\n", "RELA\n", "\n", "RELA\n", "\n", "\n", "\n", "NFKB1->RELA\n", "\n", "\n", "\n", "\n", "\n", "EGR1\n", "\n", "EGR1\n", "\n", "\n", "\n", "RELA->EGR1\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA\n", "\n", "PPP2CA\n", "\n", "\n", "\n", "PPP2CA->ATM\n", "\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA->MAPK1\n", "\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA->RB1\n", "\n", "\n", "\n", "\n", "\n", "TRAF2\n", "\n", "TRAF2\n", "\n", "\n", "\n", "PPP2CA->TRAF2\n", "\n", "\n", "\n", "\n", "\n", "\n", "TICAM1\n", "\n", "TICAM1\n", "\n", "\n", "\n", "TRAF2->TICAM1\n", "\n", "\n", "\n", "\n", "\n", "SMURF1\n", "\n", "SMURF1\n", "\n", "\n", "\n", "SMAD6\n", "\n", "SMAD6\n", "\n", "\n", "\n", "SMURF1->SMAD6\n", "\n", "\n", "\n", "\n", "\n", "\n", "SMAD5\n", "\n", "SMAD5\n", "\n", "\n", "\n", "SMURF1->SMAD5\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAP3K7\n", "\n", "MAP3K7\n", "\n", "\n", "\n", "SMAD6->MAP3K7\n", "\n", "\n", "\n", "\n", "\n", "\n", "USF1\n", "\n", "USF1\n", "\n", "\n", "\n", "FOSL1\n", "\n", "FOSL1\n", "\n", "\n", "\n", "USF1->FOSL1\n", "\n", "\n", "\n", "\n", "\n", "\n", "SMAD7\n", "\n", "SMAD7\n", "\n", "\n", "\n", "EP300->SMAD7\n", "\n", "\n", "\n", "\n", "\n", "MAPK14\n", "\n", "MAPK14\n", "\n", "\n", "\n", "MEF2A\n", "\n", "MEF2A\n", "\n", "\n", "\n", "MAPK14->MEF2A\n", "\n", "\n", "\n", "\n", "\n", "JUNB\n", "\n", "JUNB\n", "\n", "\n", "\n", "MAPK14->JUNB\n", "\n", "\n", "\n", "\n", "\n", "DLX5\n", "\n", "DLX5\n", "\n", "\n", "\n", "MAPK14->DLX5\n", "\n", "\n", "\n", "\n", "\n", "SMAD3\n", "\n", "SMAD3\n", "\n", "\n", "\n", "MAPK14->SMAD3\n", "\n", "\n", "\n", "\n", "\n", "GSK3B\n", "\n", "GSK3B\n", "\n", "\n", "\n", "MAPK14->GSK3B\n", "\n", "\n", "\n", "\n", "\n", "\n", "SP7\n", "\n", "SP7\n", "\n", "\n", "\n", "MAPK14->SP7\n", "\n", "\n", "\n", "\n", "\n", "CDX2\n", "\n", "CDX2\n", "\n", "\n", "\n", "MAPK14->CDX2\n", "\n", "\n", "\n", "\n", "\n", "\n", "HBP1\n", "\n", "HBP1\n", "\n", "\n", "\n", "MAPK14->HBP1\n", "\n", "\n", "\n", "\n", "\n", "PITX1\n", "\n", "PITX1\n", "\n", "\n", "\n", "EGR1->PITX1\n", "\n", "\n", "\n", "\n", "\n", "VHL\n", "\n", "VHL\n", "\n", "\n", "\n", "VHL->TP53\n", "\n", "\n", "\n", "\n", "\n", "NCOA1\n", "\n", "NCOA1\n", "\n", "\n", "\n", "ASXL1\n", "\n", "ASXL1\n", "\n", "\n", "\n", "NCOA1->ASXL1\n", "\n", "\n", "\n", "\n", "\n", "IGF1\n", "\n", "IGF1\n", "\n", "\n", "\n", "APC_AXIN1_GSK3B\n", "\n", "APC_AXIN1_GSK3B\n", "\n", "\n", "\n", "IGF1->APC_AXIN1_GSK3B\n", "\n", "\n", "\n", "\n", "\n", "\n", "CSNK1D\n", "\n", "CSNK1D\n", "\n", "\n", "\n", "APC_AXIN1_GSK3B->CSNK1D\n", "\n", "\n", "\n", "\n", "\n", "MSX2\n", "\n", "MSX2\n", "\n", "\n", "\n", "DLX5->MSX2\n", "\n", "\n", "\n", "\n", "\n", "\n", "PRKCA\n", "\n", "PRKCA\n", "\n", "\n", "\n", "NFE2L2\n", "\n", "NFE2L2\n", "\n", "\n", "\n", "PRKCA->NFE2L2\n", "\n", "\n", "\n", "\n", "\n", "NR1H4\n", "\n", "NR1H4\n", "\n", "\n", "\n", "PRKCA->NR1H4\n", "\n", "\n", "\n", "\n", "\n", "TICAM1->TBK1\n", "\n", "\n", "\n", "\n", "\n", "PPP1CA\n", "\n", "PPP1CA\n", "\n", "\n", "\n", "SMAD7->PPP1CA\n", "\n", "\n", "\n", "\n", "\n", "TAL1\n", "\n", "TAL1\n", "\n", "\n", "\n", "SPI1->TAL1\n", "\n", "\n", "\n", "\n", "\n", "\n", "STAT1\n", "\n", "STAT1\n", "\n", "\n", "\n", "IRF2\n", "\n", "IRF2\n", "\n", "\n", "\n", "STAT1->IRF2\n", "\n", "\n", "\n", "\n", "\n", "TGFB1\n", "\n", "TGFB1\n", "\n", "\n", "\n", "PPP2R2A\n", "\n", "PPP2R2A\n", "\n", "\n", "\n", "TGFB1->PPP2R2A\n", "\n", "\n", "\n", "\n", "\n", "PPP2R2A->PPP2CA\n", "\n", "\n", "\n", "\n", "\n", "\n", "NKX2-1\n", "\n", "NKX2-1\n", "\n", "\n", "\n", "SMAD3->NKX2-1\n", "\n", "\n", "\n", "\n", "\n", "\n", "GSK3B->MYOCD\n", "\n", "\n", "\n", "\n", "\n", "\n", "GSK3B->NFKB1\n", "\n", "\n", "\n", "\n", "\n", "SFPQ\n", "\n", "SFPQ\n", "\n", "\n", "\n", "GSK3B->SFPQ\n", "\n", "\n", "\n", "\n", "\n", "\n", "CIITA\n", "\n", "CIITA\n", "\n", "\n", "\n", "GSK3B->CIITA\n", "\n", "\n", "\n", "\n", "\n", "CEBPA\n", "\n", "CEBPA\n", "\n", "\n", "\n", "GSK3B->CEBPA\n", "\n", "\n", "\n", "\n", "\n", "SMAD2\n", "\n", "SMAD2\n", "\n", "\n", "\n", "SMAD4\n", "\n", "SMAD4\n", "\n", "\n", "\n", "SMAD2->SMAD4\n", "\n", "\n", "\n", "\n", "\n", "CDON\n", "\n", "CDON\n", "\n", "\n", "\n", "CDON->MAPK14\n", "\n", "\n", "\n", "\n", "\n", "CHEK2->VHL\n", "\n", "\n", "\n", "\n", "\n", "CDH6\n", "\n", "CDH6\n", "\n", "\n", "\n", "CTNNB1\n", "\n", "CTNNB1\n", "\n", "\n", "\n", "CDH6->CTNNB1\n", "\n", "\n", "\n", "\n", "\n", "KLF4\n", "\n", "KLF4\n", "\n", "\n", "\n", "CTNNB1->KLF4\n", "\n", "\n", "\n", "\n", "\n", "CDK1\n", "\n", "CDK1\n", "\n", "\n", "\n", "HMGA2\n", "\n", "HMGA2\n", "\n", "\n", "\n", "CDK1->HMGA2\n", "\n", "\n", "\n", "\n", "\n", "\n", "AKAP12\n", "\n", "AKAP12\n", "\n", "\n", "\n", "CDK1->AKAP12\n", "\n", "\n", "\n", "\n", "\n", "WWTR1\n", "\n", "WWTR1\n", "\n", "\n", "\n", "CSNK1D->WWTR1\n", "\n", "\n", "\n", "\n", "\n", "\n", "HIF3A\n", "\n", "HIF3A\n", "\n", "\n", "\n", "PRKN->HIF3A\n", "\n", "\n", "\n", "\n", "\n", "\n", "NFKBIB\n", "\n", "NFKBIB\n", "\n", "\n", "\n", "MAP3K7->NFKBIB\n", "\n", "\n", "\n", "\n", "\n", "\n", "AKAP12->PRKCA\n", "\n", "\n", "\n", "\n", "\n", "JAK2->STAT1\n", "\n", "\n", "\n", "\n", "\n", "CUL1_RBX1_SKP1->SMURF1\n", "\n", "\n", "\n", "\n", "\n", "\n", "MEIS2\n", "\n", "MEIS2\n", "\n", "\n", "\n", "KLF4->MEIS2\n", "\n", "\n", "\n", "\n", "\n", "INHBA\n", "\n", "INHBA\n", "\n", "\n", "\n", "ACVR2B\n", "\n", "ACVR2B\n", "\n", "\n", "\n", "INHBA->ACVR2B\n", "\n", "\n", "\n", "\n", "\n", "ACVR2B->SMAD2\n", "\n", "\n", "\n", "\n", "\n", "RXRB\n", "\n", "RXRB\n", "\n", "\n", "\n", "RARG->RXRB\n", "\n", "\n", "\n", "\n", "\n", "CEBPA->USF1\n", "\n", "\n", "\n", "\n", "\n", "CDH2\n", "\n", "CDH2\n", "\n", "\n", "\n", "CDH2->CDON\n", "\n", "\n", "\n", "\n", "\n", "EGF\n", "\n", "EGF\n", "\n", "\n", "\n", "ERBB2\n", "\n", "ERBB2\n", "\n", "\n", "\n", "EGF->ERBB2\n", "\n", "\n", "\n", "\n", "\n", "ERBB2->CDK1\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAPK3\n", "\n", "MAPK3\n", "\n", "\n", "\n", "PPP1CA->MAPK3\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAPK3->NCOA1\n", "\n", "\n", "\n", "\n", "\n", "POU3F1\n", "\n", "POU3F1\n", "\n", "\n", "\n", "HMGA1->POU3F1\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We first run CARNIVAL using all selected receptors.\n", "# We find the value for the variables using the solver GUROBI\n", "# (needs to be installed with a valid license, academic licenses are free)\n", "# TimeLimit and Seed are GUROBI specific parameters\n", "P.solve(solver=\"GUROBI\", Seed=seed)\n", "\n", "# We extract the selected edges\n", "G_sol = Gp.edge_subgraph(np.flatnonzero(P.expr.edge_values.value))\n", "\n", "# We plot generating custom drawing attributes\n", "values = P.expr.vertex_values.value\n", "vertex_values = {v: values[i] for i, v in enumerate(Gp.V)}\n", "vertex_sol_values = [vertex_values[v] for v in G_sol.V]\n", "G_sol.plot(\n", " custom_vertex_attr=cn.pl.create_graphviz_vertex_attributes(\n", " G_sol.V, vertex_sol_values\n", " )\n", ")" ] }, { "cell_type": "code", "execution_count": 77, "id": "f37de568-afd8-4c83-a4d0-9d36ed258afa", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10.373496770858765\n", "88.0\n" ] } ], "source": [ "# Print the values of the objectives:\n", "# - First objective is error (non-fited TFs).\n", "# - Second objective is number of interactions\n", "for o in P.objectives:\n", " print(o.value)" ] }, { "cell_type": "code", "execution_count": 78, "id": "89140b57-43da-4150-b71f-25956ccad4dd", "metadata": {}, "outputs": [], "source": [ "# The CARNIVAL problem can be manipulated for hypothesis exploration.\n", "# For example, we will say that only 1 of the provided receptors has to be selected, at most.\n", "P = milp_carnival(Gp, inputs_p, measurements_p, beta_weight=0.2)\n", "idx_receptors = [vertices.index(k) for k in inputs_p.keys()]\n", "protein_selected = P.expr.vertex_activated + P.expr.vertex_inhibited\n", "P += sum(protein_selected[idx_receptors]) == 1\n", "P.solve(solver=\"GUROBI\", TimeLimit=max_time, Seed=seed);" ] }, { "cell_type": "code", "execution_count": 79, "id": "538e1d57-3c9f-4513-a89f-0138454ce23e", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Warning: node 'FBXW7', graph '%3' size too small for label\n", "Warning: node 'CDKN1A', graph '%3' size too small for label\n", "Warning: node 'MAPK14', graph '%3' size too small for label\n", "Warning: node 'KHSRP', graph '%3' size too small for label\n", "Warning: node 'HIPK2', graph '%3' size too small for label\n", "Warning: node 'NFKB2', graph '%3' size too small for label\n", "Warning: node 'TRIP11', graph '%3' size too small for label\n", "Warning: node 'THRA', graph '%3' size too small for label\n", "Warning: node 'MYOCD', graph '%3' size too small for label\n", "Warning: node 'MAPK1', graph '%3' size too small for label\n", "Warning: node 'RORA', graph '%3' size too small for label\n", "Warning: node 'SMAD2', graph '%3' size too small for label\n", "Warning: node 'MEF2A', graph '%3' size too small for label\n", "Warning: node 'NFKB1', graph '%3' size too small for label\n", "Warning: node 'PDPK1', graph '%3' size too small for label\n", "Warning: node 'PPP2CA', graph '%3' size too small for label\n", "Warning: node 'TRAF2', graph '%3' size too small for label\n", "Warning: node 'SMURF1', graph '%3' size too small for label\n", "Warning: node 'SMAD6', graph '%3' size too small for label\n", "Warning: node 'FOSL1', graph '%3' size too small for label\n", "Warning: node 'SMAD3', graph '%3' size too small for label\n", "Warning: node 'SMAD4', graph '%3' size too small for label\n", "Warning: node 'GSK3B', graph '%3' size too small for label\n", "Warning: node 'MUC1', graph '%3' size too small for label\n", "Warning: node 'NCOA1', graph '%3' size too small for label\n", "Warning: node 'ASXL1', graph '%3' size too small for label\n", "Warning: node 'MSX2', graph '%3' size too small for label\n", "Warning: node 'PRKCA', graph '%3' size too small for label\n", "Warning: node 'NFE2L2', graph '%3' size too small for label\n", "Warning: node 'TICAM1', graph '%3' size too small for label\n", "Warning: node 'SMAD7', graph '%3' size too small for label\n", "Warning: node 'STAT1', graph '%3' size too small for label\n", "Warning: node 'NKX2-1', graph '%3' size too small for label\n", "Warning: node 'PITX1', graph '%3' size too small for label\n", "Warning: node 'CDON', graph '%3' size too small for label\n", "Warning: node 'CHEK2', graph '%3' size too small for label\n", "Warning: node 'HMGA2', graph '%3' size too small for label\n", "Warning: node 'MECP2', graph '%3' size too small for label\n", "Warning: node 'MAFA', graph '%3' size too small for label\n", "Warning: node 'APC_AXIN1_GSK3B', graph '%3' size too small for label\n", "Warning: node 'CSNK1D', graph '%3' size too small for label\n", "Warning: node 'HIF3A', graph '%3' size too small for label\n", "Warning: node 'MAP3K7', graph '%3' size too small for label\n", "Warning: node 'NFKBIB', graph '%3' size too small for label\n", "Warning: node 'MAPK3', graph '%3' size too small for label\n", "Warning: node 'CEBPA', graph '%3' size too small for label\n", "Warning: node 'CUL1_RBX1_SKP1', graph '%3' size too small for label\n", "Warning: node 'MEIS2', graph '%3' size too small for label\n", "Warning: node 'WWTR1', graph '%3' size too small for label\n", "Warning: node 'HMGA1', graph '%3' size too small for label\n", "Warning: node 'PPP1CA', graph '%3' size too small for label\n", "Warning: node 'POU3F1', graph '%3' size too small for label\n", "Warning: node 'CEBPB', graph '%3' size too small for label\n", "Warning: node 'STAT5A', graph '%3' size too small for label\n", "Warning: node 'SMAD5', graph '%3' size too small for label\n", "Warning: node 'RARB', graph '%3' size too small for label\n", "Warning: node 'RXRB', graph '%3' size too small for label\n", "Warning: node 'NR1H4', graph '%3' size too small for label\n", "Warning: node 'FBXW7', graph '%3' size too small for label\n", "Warning: node 'CDKN1A', graph '%3' size too small for label\n", "Warning: node 'MAPK14', graph '%3' size too small for label\n", "Warning: node 'KHSRP', graph '%3' size too small for label\n", "Warning: node 'HIPK2', graph '%3' size too small for label\n", "Warning: node 'NFKB2', graph '%3' size too small for label\n", "Warning: node 'TRIP11', graph '%3' size too small for label\n", "Warning: node 'THRA', graph '%3' size too small for label\n", "Warning: node 'MYOCD', graph '%3' size too small for label\n", "Warning: node 'MAPK1', graph '%3' size too small for label\n", "Warning: node 'RORA', graph '%3' size too small for label\n", "Warning: node 'SMAD2', graph '%3' size too small for label\n", "Warning: node 'MEF2A', graph '%3' size too small for label\n", "Warning: node 'NFKB1', graph '%3' size too small for label\n", "Warning: node 'PDPK1', graph '%3' size too small for label\n", "Warning: node 'PPP2CA', graph '%3' size too small for label\n", "Warning: node 'TRAF2', graph '%3' size too small for label\n", "Warning: node 'SMURF1', graph '%3' size too small for label\n", "Warning: node 'SMAD6', graph '%3' size too small for label\n", "Warning: node 'FOSL1', graph '%3' size too small for label\n", "Warning: node 'SMAD3', graph '%3' size too small for label\n", "Warning: node 'SMAD4', graph '%3' size too small for label\n", "Warning: node 'GSK3B', graph '%3' size too small for label\n", "Warning: node 'MUC1', graph '%3' size too small for label\n", "Warning: node 'NCOA1', graph '%3' size too small for label\n", "Warning: node 'ASXL1', graph '%3' size too small for label\n", "Warning: node 'MSX2', graph '%3' size too small for label\n", "Warning: node 'PRKCA', graph '%3' size too small for label\n", "Warning: node 'NFE2L2', graph '%3' size too small for label\n", "Warning: node 'TICAM1', graph '%3' size too small for label\n", "Warning: node 'SMAD7', graph '%3' size too small for label\n", "Warning: node 'STAT1', graph '%3' size too small for label\n", "Warning: node 'NKX2-1', graph '%3' size too small for label\n", "Warning: node 'PITX1', graph '%3' size too small for label\n", "Warning: node 'CDON', graph '%3' size too small for label\n", "Warning: node 'CHEK2', graph '%3' size too small for label\n", "Warning: node 'HMGA2', graph '%3' size too small for label\n", "Warning: node 'MECP2', graph '%3' size too small for label\n", "Warning: node 'MAFA', graph '%3' size too small for label\n", "Warning: node 'APC_AXIN1_GSK3B', graph '%3' size too small for label\n", "Warning: node 'CSNK1D', graph '%3' size too small for label\n", "Warning: node 'HIF3A', graph '%3' size too small for label\n", "Warning: node 'MAP3K7', graph '%3' size too small for label\n", "Warning: node 'NFKBIB', graph '%3' size too small for label\n", "Warning: node 'MAPK3', graph '%3' size too small for label\n", "Warning: node 'CEBPA', graph '%3' size too small for label\n", "Warning: node 'CUL1_RBX1_SKP1', graph '%3' size too small for label\n", "Warning: node 'MEIS2', graph '%3' size too small for label\n", "Warning: node 'WWTR1', graph '%3' size too small for label\n", "Warning: node 'HMGA1', graph '%3' size too small for label\n", "Warning: node 'PPP1CA', graph '%3' size too small for label\n", "Warning: node 'POU3F1', graph '%3' size too small for label\n", "Warning: node 'CEBPB', graph '%3' size too small for label\n", "Warning: node 'STAT5A', graph '%3' size too small for label\n", "Warning: node 'SMAD5', graph '%3' size too small for label\n", "Warning: node 'RARB', graph '%3' size too small for label\n", "Warning: node 'RXRB', graph '%3' size too small for label\n", "Warning: node 'NR1H4', graph '%3' size too small for label\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "ATM\n", "\n", "ATM\n", "\n", "\n", "\n", "FBXW7\n", "\n", "FBXW7\n", "\n", "\n", "\n", "ATM->FBXW7\n", "\n", "\n", "\n", "\n", "\n", "ABL1\n", "\n", "ABL1\n", "\n", "\n", "\n", "ATM->ABL1\n", "\n", "\n", "\n", "\n", "\n", "EP300\n", "\n", "EP300\n", "\n", "\n", "\n", "ATM->EP300\n", "\n", "\n", "\n", "\n", "\n", "CHEK2\n", "\n", "CHEK2\n", "\n", "\n", "\n", "ATM->CHEK2\n", "\n", "\n", "\n", "\n", "\n", "CUL1_RBX1_SKP1\n", "\n", "CUL1_RBX1_SKP1\n", "\n", "\n", "\n", "FBXW7->CUL1_RBX1_SKP1\n", "\n", "\n", "\n", "\n", "\n", "CDKN1A\n", "\n", "CDKN1A\n", "\n", "\n", "\n", "CDK1\n", "\n", "CDK1\n", "\n", "\n", "\n", "CDKN1A->CDK1\n", "\n", "\n", "\n", "\n", "\n", "\n", "HMGA2\n", "\n", "HMGA2\n", "\n", "\n", "\n", "CDK1->HMGA2\n", "\n", "\n", "\n", "\n", "\n", "\n", "HMGA1\n", "\n", "HMGA1\n", "\n", "\n", "\n", "CDK1->HMGA1\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAPK14\n", "\n", "MAPK14\n", "\n", "\n", "\n", "MAPK14->CDKN1A\n", "\n", "\n", "\n", "\n", "\n", "KHSRP\n", "\n", "KHSRP\n", "\n", "\n", "\n", "MAPK14->KHSRP\n", "\n", "\n", "\n", "\n", "\n", "\n", "JUNB\n", "\n", "JUNB\n", "\n", "\n", "\n", "MAPK14->JUNB\n", "\n", "\n", "\n", "\n", "\n", "GSK3B\n", "\n", "GSK3B\n", "\n", "\n", "\n", "MAPK14->GSK3B\n", "\n", "\n", "\n", "\n", "\n", "\n", "DLX5\n", "\n", "DLX5\n", "\n", "\n", "\n", "MAPK14->DLX5\n", "\n", "\n", "\n", "\n", "\n", "SP7\n", "\n", "SP7\n", "\n", "\n", "\n", "MAPK14->SP7\n", "\n", "\n", "\n", "\n", "\n", "CDX2\n", "\n", "CDX2\n", "\n", "\n", "\n", "MAPK14->CDX2\n", "\n", "\n", "\n", "\n", "\n", "\n", "HBP1\n", "\n", "HBP1\n", "\n", "\n", "\n", "MAPK14->HBP1\n", "\n", "\n", "\n", "\n", "\n", "SRC\n", "\n", "SRC\n", "\n", "\n", "\n", "KHSRP->SRC\n", "\n", "\n", "\n", "\n", "\n", "HIPK2\n", "\n", "HIPK2\n", "\n", "\n", "\n", "ABL1->HIPK2\n", "\n", "\n", "\n", "\n", "\n", "PRKN\n", "\n", "PRKN\n", "\n", "\n", "\n", "ABL1->PRKN\n", "\n", "\n", "\n", "\n", "\n", "\n", "TP53\n", "\n", "TP53\n", "\n", "\n", "\n", "HIPK2->TP53\n", "\n", "\n", "\n", "\n", "\n", "MECP2\n", "\n", "MECP2\n", "\n", "\n", "\n", "HIPK2->MECP2\n", "\n", "\n", "\n", "\n", "\n", "NFKB2\n", "\n", "NFKB2\n", "\n", "\n", "\n", "RELB\n", "\n", "RELB\n", "\n", "\n", "\n", "NFKB2->RELB\n", "\n", "\n", "\n", "\n", "\n", "TRIP11\n", "\n", "TRIP11\n", "\n", "\n", "\n", "THRA\n", "\n", "THRA\n", "\n", "\n", "\n", "TRIP11->THRA\n", "\n", "\n", "\n", "\n", "\n", "RARB\n", "\n", "RARB\n", "\n", "\n", "\n", "THRA->RARB\n", "\n", "\n", "\n", "\n", "\n", "MYOCD\n", "\n", "MYOCD\n", "\n", "\n", "\n", "SRF\n", "\n", "SRF\n", "\n", "\n", "\n", "MYOCD->SRF\n", "\n", "\n", "\n", "\n", "\n", "TP53->NFKB2\n", "\n", "\n", "\n", "\n", "\n", "RB1\n", "\n", "RB1\n", "\n", "\n", "\n", "RB1->TRIP11\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAPK1\n", "\n", "MAPK1\n", "\n", "\n", "\n", "RORA\n", "\n", "RORA\n", "\n", "\n", "\n", "MAPK1->RORA\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAFA\n", "\n", "MAFA\n", "\n", "\n", "\n", "MAPK1->MAFA\n", "\n", "\n", "\n", "\n", "\n", "APC_AXIN1_GSK3B\n", "\n", "APC_AXIN1_GSK3B\n", "\n", "\n", "\n", "MAPK1->APC_AXIN1_GSK3B\n", "\n", "\n", "\n", "\n", "\n", "\n", "SMAD2\n", "\n", "SMAD2\n", "\n", "\n", "\n", "MEF2A\n", "\n", "MEF2A\n", "\n", "\n", "\n", "SMAD2->MEF2A\n", "\n", "\n", "\n", "\n", "\n", "TBK1\n", "\n", "TBK1\n", "\n", "\n", "\n", "REL\n", "\n", "REL\n", "\n", "\n", "\n", "TBK1->REL\n", "\n", "\n", "\n", "\n", "\n", "IRF3\n", "\n", "IRF3\n", "\n", "\n", "\n", "TBK1->IRF3\n", "\n", "\n", "\n", "\n", "\n", "NFKB1\n", "\n", "NFKB1\n", "\n", "\n", "\n", "RELA\n", "\n", "RELA\n", "\n", "\n", "\n", "NFKB1->RELA\n", "\n", "\n", "\n", "\n", "\n", "EGR1\n", "\n", "EGR1\n", "\n", "\n", "\n", "RELA->EGR1\n", "\n", "\n", "\n", "\n", "\n", "JUN\n", "\n", "JUN\n", "\n", "\n", "\n", "RELA->JUN\n", "\n", "\n", "\n", "\n", "\n", "PDPK1\n", "\n", "PDPK1\n", "\n", "\n", "\n", "SRC->PDPK1\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA\n", "\n", "PPP2CA\n", "\n", "\n", "\n", "SRC->PPP2CA\n", "\n", "\n", "\n", "\n", "\n", "\n", "STAT1\n", "\n", "STAT1\n", "\n", "\n", "\n", "SRC->STAT1\n", "\n", "\n", "\n", "\n", "\n", "STAT5A\n", "\n", "STAT5A\n", "\n", "\n", "\n", "SRC->STAT5A\n", "\n", "\n", "\n", "\n", "\n", "PRKCA\n", "\n", "PRKCA\n", "\n", "\n", "\n", "PDPK1->PRKCA\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA->ATM\n", "\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA->RB1\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA->MAPK1\n", "\n", "\n", "\n", "\n", "\n", "\n", "TRAF2\n", "\n", "TRAF2\n", "\n", "\n", "\n", "PPP2CA->TRAF2\n", "\n", "\n", "\n", "\n", "\n", "\n", "TICAM1\n", "\n", "TICAM1\n", "\n", "\n", "\n", "TRAF2->TICAM1\n", "\n", "\n", "\n", "\n", "\n", "SMURF1\n", "\n", "SMURF1\n", "\n", "\n", "\n", "SMAD6\n", "\n", "SMAD6\n", "\n", "\n", "\n", "SMURF1->SMAD6\n", "\n", "\n", "\n", "\n", "\n", "\n", "SMAD5\n", "\n", "SMAD5\n", "\n", "\n", "\n", "SMURF1->SMAD5\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAP3K7\n", "\n", "MAP3K7\n", "\n", "\n", "\n", "SMAD6->MAP3K7\n", "\n", "\n", "\n", "\n", "\n", "\n", "USF1\n", "\n", "USF1\n", "\n", "\n", "\n", "FOSL1\n", "\n", "FOSL1\n", "\n", "\n", "\n", "USF1->FOSL1\n", "\n", "\n", "\n", "\n", "\n", "\n", "PITX1\n", "\n", "PITX1\n", "\n", "\n", "\n", "EGR1->PITX1\n", "\n", "\n", "\n", "\n", "\n", "SMAD3\n", "\n", "SMAD3\n", "\n", "\n", "\n", "SMAD4\n", "\n", "SMAD4\n", "\n", "\n", "\n", "SMAD3->SMAD4\n", "\n", "\n", "\n", "\n", "\n", "NKX2-1\n", "\n", "NKX2-1\n", "\n", "\n", "\n", "SMAD3->NKX2-1\n", "\n", "\n", "\n", "\n", "\n", "\n", "CEBPA\n", "\n", "CEBPA\n", "\n", "\n", "\n", "SMAD3->CEBPA\n", "\n", "\n", "\n", "\n", "\n", "\n", "CEBPB\n", "\n", "CEBPB\n", "\n", "\n", "\n", "SMAD3->CEBPB\n", "\n", "\n", "\n", "\n", "\n", "\n", "GSK3B->MYOCD\n", "\n", "\n", "\n", "\n", "\n", "\n", "GSK3B->NFKB1\n", "\n", "\n", "\n", "\n", "\n", "MUC1\n", "\n", "MUC1\n", "\n", "\n", "\n", "GSK3B->MUC1\n", "\n", "\n", "\n", "\n", "\n", "\n", "SFPQ\n", "\n", "SFPQ\n", "\n", "\n", "\n", "GSK3B->SFPQ\n", "\n", "\n", "\n", "\n", "\n", "\n", "CIITA\n", "\n", "CIITA\n", "\n", "\n", "\n", "GSK3B->CIITA\n", "\n", "\n", "\n", "\n", "\n", "KLF4\n", "\n", "KLF4\n", "\n", "\n", "\n", "MUC1->KLF4\n", "\n", "\n", "\n", "\n", "\n", "NCOA1\n", "\n", "NCOA1\n", "\n", "\n", "\n", "ASXL1\n", "\n", "ASXL1\n", "\n", "\n", "\n", "NCOA1->ASXL1\n", "\n", "\n", "\n", "\n", "\n", "MSX2\n", "\n", "MSX2\n", "\n", "\n", "\n", "DLX5->MSX2\n", "\n", "\n", "\n", "\n", "\n", "\n", "NFE2L2\n", "\n", "NFE2L2\n", "\n", "\n", "\n", "PRKCA->NFE2L2\n", "\n", "\n", "\n", "\n", "\n", "NR1H4\n", "\n", "NR1H4\n", "\n", "\n", "\n", "PRKCA->NR1H4\n", "\n", "\n", "\n", "\n", "\n", "TICAM1->TBK1\n", "\n", "\n", "\n", "\n", "\n", "SMAD7\n", "\n", "SMAD7\n", "\n", "\n", "\n", "EP300->SMAD7\n", "\n", "\n", "\n", "\n", "\n", "PPP1CA\n", "\n", "PPP1CA\n", "\n", "\n", "\n", "SMAD7->PPP1CA\n", "\n", "\n", "\n", "\n", "\n", "SPI1\n", "\n", "SPI1\n", "\n", "\n", "\n", "JUN->SPI1\n", "\n", "\n", "\n", "\n", "\n", "TAL1\n", "\n", "TAL1\n", "\n", "\n", "\n", "SPI1->TAL1\n", "\n", "\n", "\n", "\n", "\n", "\n", "IRF2\n", "\n", "IRF2\n", "\n", "\n", "\n", "STAT1->IRF2\n", "\n", "\n", "\n", "\n", "\n", "CDON\n", "\n", "CDON\n", "\n", "\n", "\n", "CDON->MAPK14\n", "\n", "\n", "\n", "\n", "\n", "VHL\n", "\n", "VHL\n", "\n", "\n", "\n", "CHEK2->VHL\n", "\n", "\n", "\n", "\n", "\n", "CSNK1D\n", "\n", "CSNK1D\n", "\n", "\n", "\n", "APC_AXIN1_GSK3B->CSNK1D\n", "\n", "\n", "\n", "\n", "\n", "WWTR1\n", "\n", "WWTR1\n", "\n", "\n", "\n", "CSNK1D->WWTR1\n", "\n", "\n", "\n", "\n", "\n", "\n", "HIF3A\n", "\n", "HIF3A\n", "\n", "\n", "\n", "PRKN->HIF3A\n", "\n", "\n", "\n", "\n", "\n", "\n", "NFKBIB\n", "\n", "NFKBIB\n", "\n", "\n", "\n", "MAP3K7->NFKBIB\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAPK3\n", "\n", "MAPK3\n", "\n", "\n", "\n", "MAPK3->NCOA1\n", "\n", "\n", "\n", "\n", "\n", "PML\n", "\n", "PML\n", "\n", "\n", "\n", "MAPK3->PML\n", "\n", "\n", "\n", "\n", "\n", "PML->SMAD2\n", "\n", "\n", "\n", "\n", "\n", "PML->SMAD3\n", "\n", "\n", "\n", "\n", "\n", "CEBPA->USF1\n", "\n", "\n", "\n", "\n", "\n", "CUL1_RBX1_SKP1->SMURF1\n", "\n", "\n", "\n", "\n", "\n", "\n", "MEIS2\n", "\n", "MEIS2\n", "\n", "\n", "\n", "KLF4->MEIS2\n", "\n", "\n", "\n", "\n", "\n", "POU3F1\n", "\n", "POU3F1\n", "\n", "\n", "\n", "HMGA1->POU3F1\n", "\n", "\n", "\n", "\n", "\n", "CDH2\n", "\n", "CDH2\n", "\n", "\n", "\n", "CDH2->CDON\n", "\n", "\n", "\n", "\n", "\n", "PPP1CA->MAPK3\n", "\n", "\n", "\n", "\n", "\n", "\n", "RXRB\n", "\n", "RXRB\n", "\n", "\n", "\n", "RARB->RXRB\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We extract the edges that have some signal (edge_values != 0)\n", "# We select the sub-graph from the processed PKN\n", "G_sol = Gp.edge_subgraph(np.flatnonzero(P.expr.edge_values.value))\n", "\n", "# We plot generating custom drawing attributes\n", "values = P.expr.vertex_values.value\n", "vertex_values = {v: values[i] for i, v in enumerate(Gp.V)}\n", "vertex_sol_values = [vertex_values[v] for v in G_sol.V]\n", "G_sol.plot(\n", " custom_vertex_attr=cn.pl.create_graphviz_vertex_attributes(\n", " G_sol.V, vertex_sol_values\n", " )\n", ")" ] }, { "cell_type": "code", "execution_count": 80, "id": "7c0cba49-68d4-4c30-99f9-684c4f346979", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10.373496770858765\n", "88.0\n" ] } ], "source": [ "# Print the values of the objectives:\n", "# - First objective is error (non-fited TFs).\n", "# - Second objective is number of interactions\n", "for o in P.objectives:\n", " print(o.value)" ] }, { "cell_type": "markdown", "id": "1a182f07-2ca6-4d4e-9e78-f9d655444750", "metadata": {}, "source": [ "## Adding more knowledge\n", "\n", "We can add more prior knowledge to the CARNIVAL problem. For example, we are going to penalise genes that are lowly abundant, according to the average basal gene expression levels. " ] }, { "cell_type": "code", "execution_count": 101, "id": "f38f62f5-ff99-4c4c-8281-b6dc4856ba58", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
baseMeanlog2FoldChangelfcSEstatpvaluepadj
GeneName
TRIM1753.443434-0.6891250.300338-2.2944990.0217620.050210
NLGN332.581601-0.8957980.390573-2.2935450.0218170.050307
RP11-1109F11.311.672715-1.5870700.692036-2.2933360.0218290.050323
RP11-661A12.515.285895-1.2978080.566496-2.2909380.0219670.050602
RP11-77K12.725.489581-0.9915420.432922-2.2903500.0220010.050661
.....................
GDPD174.8922520.0003260.2627460.0012410.9990100.999415
RP11-452K12.749.986985-0.0002590.302890-0.0008550.9993170.999520
MIR6859-110.1146210.0006250.6575810.0009500.9992420.999520
RP11-463C8.448.479410-0.0002800.305891-0.0009160.9992690.999520
AIF1L11.870434-0.0003510.619997-0.0005660.9995490.999599
\n", "

3750 rows × 6 columns

\n", "
" ], "text/plain": [ " baseMean log2FoldChange lfcSE stat pvalue \\\n", "GeneName \n", "TRIM17 53.443434 -0.689125 0.300338 -2.294499 0.021762 \n", "NLGN3 32.581601 -0.895798 0.390573 -2.293545 0.021817 \n", "RP11-1109F11.3 11.672715 -1.587070 0.692036 -2.293336 0.021829 \n", "RP11-661A12.5 15.285895 -1.297808 0.566496 -2.290938 0.021967 \n", "RP11-77K12.7 25.489581 -0.991542 0.432922 -2.290350 0.022001 \n", "... ... ... ... ... ... \n", "GDPD1 74.892252 0.000326 0.262746 0.001241 0.999010 \n", "RP11-452K12.7 49.986985 -0.000259 0.302890 -0.000855 0.999317 \n", "MIR6859-1 10.114621 0.000625 0.657581 0.000950 0.999242 \n", "RP11-463C8.4 48.479410 -0.000280 0.305891 -0.000916 0.999269 \n", "AIF1L 11.870434 -0.000351 0.619997 -0.000566 0.999549 \n", "\n", " padj \n", "GeneName \n", "TRIM17 0.050210 \n", "NLGN3 0.050307 \n", "RP11-1109F11.3 0.050323 \n", "RP11-661A12.5 0.050602 \n", "RP11-77K12.7 0.050661 \n", "... ... \n", "GDPD1 0.999415 \n", "RP11-452K12.7 0.999520 \n", "MIR6859-1 0.999520 \n", "RP11-463C8.4 0.999520 \n", "AIF1L 0.999599 \n", "\n", "[3750 rows x 6 columns]" ] }, "execution_count": 101, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_lowly_abundant_genes = results_df[\n", " (results_df.baseMean <= results_df.baseMean.quantile(0.25))\n", " & (results_df.padj >= 0.05)\n", "]\n", "df_lowly_abundant_genes.sort_values(by=\"padj\")" ] }, { "cell_type": "code", "execution_count": 103, "id": "fd4b32f4-aa01-488f-b6b8-52d50882a3b1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "({'CARD11',\n", " 'DCC',\n", " 'DLX2',\n", " 'ERBB3',\n", " 'FERMT3',\n", " 'GHR',\n", " 'HOXC8',\n", " 'INPP5D',\n", " 'ITGB4',\n", " 'MAF',\n", " 'MSX1',\n", " 'NOXO1',\n", " 'PARD6A',\n", " 'PLEKHG6',\n", " 'PSTPIP1',\n", " 'PTPN22',\n", " 'RPS6KA5',\n", " 'TEC',\n", " 'TIAM1'},\n", " 19)" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lowly_abundant_genes = set(Gp.V).intersection(df_lowly_abundant_genes.index.tolist())\n", "lowly_abundant_genes, len(lowly_abundant_genes)" ] }, { "cell_type": "code", "execution_count": 104, "id": "201455a9-04be-4558-98ff-377721cc413b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0.01, 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0.01, 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0.01, 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0.01, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0.01, 0. , 0. , 0. , 0. , 0. , 0. , 0.01, 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0.01, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0.01, 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0.01, 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.01, 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.01, 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.01,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0.01, 0. , 0. , 0. , 0.01, 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.01, 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0.01, 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0.01, 0. , 0.01, 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0.01, 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. ])" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Now we will add a penalty to avoid selecting lowly expressed genes\n", "vertices = Gp.V\n", "penalties = np.zeros(Gp.num_vertices)\n", "penalties[[vertices.index(v) for v in lowly_abundant_genes.intersection(vertices)]] = (\n", " 0.01\n", ")\n", "penalties" ] }, { "cell_type": "code", "execution_count": 105, "id": "25208669-b019-4ec8-afe8-4d1cda41cd14", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\pablo\\miniconda3\\envs\\corneto-dev-mini\\Lib\\site-packages\\cvxpy\\problems\\problem.py:158: UserWarning: Objective contains too many subexpressions. Consider vectorizing your CVXPY code to speed up compilation.\n", " warnings.warn(\"Objective contains too many subexpressions. \"\n" ] } ], "source": [ "# Create the carnival problem\n", "P = milp_carnival(Gp, inputs_p, measurements_p, beta_weight=0.2)\n", "\n", "# We penalize the inclusion of lowly expressed genes:\n", "# protein_selected is just the sum of the binary variables vertex activated and vertex inhibited, defined in carnival.\n", "# these variables are mutually exclusive, so the sum is at most 1, meaning that the vertex was selected, either activated (+1) or inhibited (-1)\n", "protein_selected = P.expr.vertex_activated + P.expr.vertex_inhibited\n", "\n", "# We multiply the vector variable of selected proteins and the penalties to\n", "# sum the total cost: sum (v1 * penalty1 + v2 * penalty2, + v3 ...) and we add this as an objective\n", "penalty_vertices = protein_selected @ penalties\n", "P.add_objectives(penalty_vertices)\n", "\n", "# Select only 1 receptor\n", "protein_selected = P.expr.vertex_activated + P.expr.vertex_inhibited\n", "# P += sum(protein_selected[idx_receptors]) == 1\n", "\n", "P.solve(solver=\"GUROBI\", Seed=seed, TimeLimit=max_time);" ] }, { "cell_type": "code", "execution_count": 106, "id": "a4c0f22c-748e-457e-9223-8c83f5829897", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Warning: node 'FBXW7', graph '%3' size too small for label\n", "Warning: node 'PRKCA', graph '%3' size too small for label\n", "Warning: node 'HIPK2', graph '%3' size too small for label\n", "Warning: node 'NFKB2', graph '%3' size too small for label\n", "Warning: node 'TRIP11', graph '%3' size too small for label\n", "Warning: node 'THRA', graph '%3' size too small for label\n", "Warning: node 'PHLPP1', graph '%3' size too small for label\n", "Warning: node 'MYOCD', graph '%3' size too small for label\n", "Warning: node 'MAPK1', graph '%3' size too small for label\n", "Warning: node 'RORA', graph '%3' size too small for label\n", "Warning: node 'SMAD2', graph '%3' size too small for label\n", "Warning: node 'MEF2A', graph '%3' size too small for label\n", "Warning: node 'PPP2CA', graph '%3' size too small for label\n", "Warning: node 'TRAF2', graph '%3' size too small for label\n", "Warning: node 'SMURF1', graph '%3' size too small for label\n", "Warning: node 'SMAD6', graph '%3' size too small for label\n", "Warning: node 'FOSL1', graph '%3' size too small for label\n", "Warning: node 'MAPK14', graph '%3' size too small for label\n", "Warning: node 'SMAD3', graph '%3' size too small for label\n", "Warning: node 'SMAD4', graph '%3' size too small for label\n", "Warning: node 'NCOA1', graph '%3' size too small for label\n", "Warning: node 'ASXL1', graph '%3' size too small for label\n", "Warning: node 'APC_AXIN1_GSK3B', graph '%3' size too small for label\n", "Warning: node 'MSX2', graph '%3' size too small for label\n", "Warning: node 'NFE2L2', graph '%3' size too small for label\n", "Warning: node 'TICAM1', graph '%3' size too small for label\n", "Warning: node 'SMAD7', graph '%3' size too small for label\n", "Warning: node 'STAT1', graph '%3' size too small for label\n", "Warning: node 'TGFB1', graph '%3' size too small for label\n", "Warning: node 'PPP2R2A', graph '%3' size too small for label\n", "Warning: node 'NKX2-1', graph '%3' size too small for label\n", "Warning: node 'GSK3B', graph '%3' size too small for label\n", "Warning: node 'PITX1', graph '%3' size too small for label\n", "Warning: node 'CHEK2', graph '%3' size too small for label\n", "Warning: node 'CTNNB1', graph '%3' size too small for label\n", "Warning: node 'HMGA2', graph '%3' size too small for label\n", "Warning: node 'PTPRR', graph '%3' size too small for label\n", "Warning: node 'STAT5A', graph '%3' size too small for label\n", "Warning: node 'MECP2', graph '%3' size too small for label\n", "Warning: node 'NFKB1', graph '%3' size too small for label\n", "Warning: node 'MAFA', graph '%3' size too small for label\n", "Warning: node 'CSNK1D', graph '%3' size too small for label\n", "Warning: node 'HIF3A', graph '%3' size too small for label\n", "Warning: node 'MAP3K7', graph '%3' size too small for label\n", "Warning: node 'NFKBIB', graph '%3' size too small for label\n", "Warning: node 'CUL1_RBX1_SKP1', graph '%3' size too small for label\n", "Warning: node 'MEIS2', graph '%3' size too small for label\n", "Warning: node 'WWTR1', graph '%3' size too small for label\n", "Warning: node 'INHBA', graph '%3' size too small for label\n", "Warning: node 'ACVR2B', graph '%3' size too small for label\n", "Warning: node 'CEBPA', graph '%3' size too small for label\n", "Warning: node 'HMGA1', graph '%3' size too small for label\n", "Warning: node 'ERBB2', graph '%3' size too small for label\n", "Warning: node 'PPP1CA', graph '%3' size too small for label\n", "Warning: node 'MAPK3', graph '%3' size too small for label\n", "Warning: node 'POU3F1', graph '%3' size too small for label\n", "Warning: node 'CEBPB', graph '%3' size too small for label\n", "Warning: node 'SMAD5', graph '%3' size too small for label\n", "Warning: node 'RARB', graph '%3' size too small for label\n", "Warning: node 'RXRB', graph '%3' size too small for label\n", "Warning: node 'NR1H4', graph '%3' size too small for label\n", "Warning: node 'FBXW7', graph '%3' size too small for label\n", "Warning: node 'PRKCA', graph '%3' size too small for label\n", "Warning: node 'HIPK2', graph '%3' size too small for label\n", "Warning: node 'NFKB2', graph '%3' size too small for label\n", "Warning: node 'TRIP11', graph '%3' size too small for label\n", "Warning: node 'THRA', graph '%3' size too small for label\n", "Warning: node 'PHLPP1', graph '%3' size too small for label\n", "Warning: node 'MYOCD', graph '%3' size too small for label\n", "Warning: node 'MAPK1', graph '%3' size too small for label\n", "Warning: node 'RORA', graph '%3' size too small for label\n", "Warning: node 'SMAD2', graph '%3' size too small for label\n", "Warning: node 'MEF2A', graph '%3' size too small for label\n", "Warning: node 'PPP2CA', graph '%3' size too small for label\n", "Warning: node 'TRAF2', graph '%3' size too small for label\n", "Warning: node 'SMURF1', graph '%3' size too small for label\n", "Warning: node 'SMAD6', graph '%3' size too small for label\n", "Warning: node 'FOSL1', graph '%3' size too small for label\n", "Warning: node 'MAPK14', graph '%3' size too small for label\n", "Warning: node 'SMAD3', graph '%3' size too small for label\n", "Warning: node 'SMAD4', graph '%3' size too small for label\n", "Warning: node 'NCOA1', graph '%3' size too small for label\n", "Warning: node 'ASXL1', graph '%3' size too small for label\n", "Warning: node 'APC_AXIN1_GSK3B', graph '%3' size too small for label\n", "Warning: node 'MSX2', graph '%3' size too small for label\n", "Warning: node 'NFE2L2', graph '%3' size too small for label\n", "Warning: node 'TICAM1', graph '%3' size too small for label\n", "Warning: node 'SMAD7', graph '%3' size too small for label\n", "Warning: node 'STAT1', graph '%3' size too small for label\n", "Warning: node 'TGFB1', graph '%3' size too small for label\n", "Warning: node 'PPP2R2A', graph '%3' size too small for label\n", "Warning: node 'NKX2-1', graph '%3' size too small for label\n", "Warning: node 'GSK3B', graph '%3' size too small for label\n", "Warning: node 'PITX1', graph '%3' size too small for label\n", "Warning: node 'CHEK2', graph '%3' size too small for label\n", "Warning: node 'CTNNB1', graph '%3' size too small for label\n", "Warning: node 'HMGA2', graph '%3' size too small for label\n", "Warning: node 'PTPRR', graph '%3' size too small for label\n", "Warning: node 'STAT5A', graph '%3' size too small for label\n", "Warning: node 'MECP2', graph '%3' size too small for label\n", "Warning: node 'NFKB1', graph '%3' size too small for label\n", "Warning: node 'MAFA', graph '%3' size too small for label\n", "Warning: node 'CSNK1D', graph '%3' size too small for label\n", "Warning: node 'HIF3A', graph '%3' size too small for label\n", "Warning: node 'MAP3K7', graph '%3' size too small for label\n", "Warning: node 'NFKBIB', graph '%3' size too small for label\n", "Warning: node 'CUL1_RBX1_SKP1', graph '%3' size too small for label\n", "Warning: node 'MEIS2', graph '%3' size too small for label\n", "Warning: node 'WWTR1', graph '%3' size too small for label\n", "Warning: node 'INHBA', graph '%3' size too small for label\n", "Warning: node 'ACVR2B', graph '%3' size too small for label\n", "Warning: node 'CEBPA', graph '%3' size too small for label\n", "Warning: node 'HMGA1', graph '%3' size too small for label\n", "Warning: node 'ERBB2', graph '%3' size too small for label\n", "Warning: node 'PPP1CA', graph '%3' size too small for label\n", "Warning: node 'MAPK3', graph '%3' size too small for label\n", "Warning: node 'POU3F1', graph '%3' size too small for label\n", "Warning: node 'CEBPB', graph '%3' size too small for label\n", "Warning: node 'SMAD5', graph '%3' size too small for label\n", "Warning: node 'RARB', graph '%3' size too small for label\n", "Warning: node 'RXRB', graph '%3' size too small for label\n", "Warning: node 'NR1H4', graph '%3' size too small for label\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "ATM\n", "\n", "ATM\n", "\n", "\n", "\n", "FBXW7\n", "\n", "FBXW7\n", "\n", "\n", "\n", "ATM->FBXW7\n", "\n", "\n", "\n", "\n", "\n", "ABL1\n", "\n", "ABL1\n", "\n", "\n", "\n", "ATM->ABL1\n", "\n", "\n", "\n", "\n", "\n", "CHEK2\n", "\n", "CHEK2\n", "\n", "\n", "\n", "ATM->CHEK2\n", "\n", "\n", "\n", "\n", "\n", "CUL1_RBX1_SKP1\n", "\n", "CUL1_RBX1_SKP1\n", "\n", "\n", "\n", "FBXW7->CUL1_RBX1_SKP1\n", "\n", "\n", "\n", "\n", "\n", "PRKCA\n", "\n", "PRKCA\n", "\n", "\n", "\n", "TP53\n", "\n", "TP53\n", "\n", "\n", "\n", "PRKCA->TP53\n", "\n", "\n", "\n", "\n", "\n", "NFE2L2\n", "\n", "NFE2L2\n", "\n", "\n", "\n", "PRKCA->NFE2L2\n", "\n", "\n", "\n", "\n", "\n", "NR1H4\n", "\n", "NR1H4\n", "\n", "\n", "\n", "PRKCA->NR1H4\n", "\n", "\n", "\n", "\n", "\n", "NFKB2\n", "\n", "NFKB2\n", "\n", "\n", "\n", "TP53->NFKB2\n", "\n", "\n", "\n", "\n", "\n", "HIPK2\n", "\n", "HIPK2\n", "\n", "\n", "\n", "ABL1->HIPK2\n", "\n", "\n", "\n", "\n", "\n", "PRKN\n", "\n", "PRKN\n", "\n", "\n", "\n", "ABL1->PRKN\n", "\n", "\n", "\n", "\n", "\n", "\n", "MECP2\n", "\n", "MECP2\n", "\n", "\n", "\n", "HIPK2->MECP2\n", "\n", "\n", "\n", "\n", "\n", "RELB\n", "\n", "RELB\n", "\n", "\n", "\n", "NFKB2->RELB\n", "\n", "\n", "\n", "\n", "\n", "TRIP11\n", "\n", "TRIP11\n", "\n", "\n", "\n", "THRA\n", "\n", "THRA\n", "\n", "\n", "\n", "TRIP11->THRA\n", "\n", "\n", "\n", "\n", "\n", "RARB\n", "\n", "RARB\n", "\n", "\n", "\n", "THRA->RARB\n", "\n", "\n", "\n", "\n", "\n", "PHLPP1\n", "\n", "PHLPP1\n", "\n", "\n", "\n", "PHLPP1->PRKCA\n", "\n", "\n", "\n", "\n", "\n", "\n", "MYOCD\n", "\n", "MYOCD\n", "\n", "\n", "\n", "SRF\n", "\n", "SRF\n", "\n", "\n", "\n", "MYOCD->SRF\n", "\n", "\n", "\n", "\n", "\n", "RB1\n", "\n", "RB1\n", "\n", "\n", "\n", "RB1->TRIP11\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAPK1\n", "\n", "MAPK1\n", "\n", "\n", "\n", "RORA\n", "\n", "RORA\n", "\n", "\n", "\n", "MAPK1->RORA\n", "\n", "\n", "\n", "\n", "\n", "\n", "EP300\n", "\n", "EP300\n", "\n", "\n", "\n", "MAPK1->EP300\n", "\n", "\n", "\n", "\n", "\n", "PTPRR\n", "\n", "PTPRR\n", "\n", "\n", "\n", "MAPK1->PTPRR\n", "\n", "\n", "\n", "\n", "\n", "STAT5A\n", "\n", "STAT5A\n", "\n", "\n", "\n", "MAPK1->STAT5A\n", "\n", "\n", "\n", "\n", "\n", "MAFA\n", "\n", "MAFA\n", "\n", "\n", "\n", "MAPK1->MAFA\n", "\n", "\n", "\n", "\n", "\n", "SMAD2\n", "\n", "SMAD2\n", "\n", "\n", "\n", "MEF2A\n", "\n", "MEF2A\n", "\n", "\n", "\n", "SMAD2->MEF2A\n", "\n", "\n", "\n", "\n", "\n", "TBK1\n", "\n", "TBK1\n", "\n", "\n", "\n", "REL\n", "\n", "REL\n", "\n", "\n", "\n", "TBK1->REL\n", "\n", "\n", "\n", "\n", "\n", "IRF3\n", "\n", "IRF3\n", "\n", "\n", "\n", "TBK1->IRF3\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA\n", "\n", "PPP2CA\n", "\n", "\n", "\n", "PPP2CA->ATM\n", "\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA->RB1\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA->MAPK1\n", "\n", "\n", "\n", "\n", "\n", "\n", "TRAF2\n", "\n", "TRAF2\n", "\n", "\n", "\n", "PPP2CA->TRAF2\n", "\n", "\n", "\n", "\n", "\n", "\n", "TICAM1\n", "\n", "TICAM1\n", "\n", "\n", "\n", "TRAF2->TICAM1\n", "\n", "\n", "\n", "\n", "\n", "SMURF1\n", "\n", "SMURF1\n", "\n", "\n", "\n", "SMAD6\n", "\n", "SMAD6\n", "\n", "\n", "\n", "SMURF1->SMAD6\n", "\n", "\n", "\n", "\n", "\n", "\n", "SMAD5\n", "\n", "SMAD5\n", "\n", "\n", "\n", "SMURF1->SMAD5\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAP3K7\n", "\n", "MAP3K7\n", "\n", "\n", "\n", "SMAD6->MAP3K7\n", "\n", "\n", "\n", "\n", "\n", "\n", "USF1\n", "\n", "USF1\n", "\n", "\n", "\n", "FOSL1\n", "\n", "FOSL1\n", "\n", "\n", "\n", "USF1->FOSL1\n", "\n", "\n", "\n", "\n", "\n", "\n", "SMAD7\n", "\n", "SMAD7\n", "\n", "\n", "\n", "EP300->SMAD7\n", "\n", "\n", "\n", "\n", "\n", "MAPK14\n", "\n", "MAPK14\n", "\n", "\n", "\n", "JUNB\n", "\n", "JUNB\n", "\n", "\n", "\n", "MAPK14->JUNB\n", "\n", "\n", "\n", "\n", "\n", "SMAD3\n", "\n", "SMAD3\n", "\n", "\n", "\n", "MAPK14->SMAD3\n", "\n", "\n", "\n", "\n", "\n", "DLX5\n", "\n", "DLX5\n", "\n", "\n", "\n", "MAPK14->DLX5\n", "\n", "\n", "\n", "\n", "\n", "GSK3B\n", "\n", "GSK3B\n", "\n", "\n", "\n", "MAPK14->GSK3B\n", "\n", "\n", "\n", "\n", "\n", "\n", "SP7\n", "\n", "SP7\n", "\n", "\n", "\n", "MAPK14->SP7\n", "\n", "\n", "\n", "\n", "\n", "CDX2\n", "\n", "CDX2\n", "\n", "\n", "\n", "MAPK14->CDX2\n", "\n", "\n", "\n", "\n", "\n", "\n", "HBP1\n", "\n", "HBP1\n", "\n", "\n", "\n", "MAPK14->HBP1\n", "\n", "\n", "\n", "\n", "\n", "RELA\n", "\n", "RELA\n", "\n", "\n", "\n", "EGR1\n", "\n", "EGR1\n", "\n", "\n", "\n", "RELA->EGR1\n", "\n", "\n", "\n", "\n", "\n", "JUN\n", "\n", "JUN\n", "\n", "\n", "\n", "RELA->JUN\n", "\n", "\n", "\n", "\n", "\n", "PITX1\n", "\n", "PITX1\n", "\n", "\n", "\n", "EGR1->PITX1\n", "\n", "\n", "\n", "\n", "\n", "SMAD4\n", "\n", "SMAD4\n", "\n", "\n", "\n", "SMAD3->SMAD4\n", "\n", "\n", "\n", "\n", "\n", "NKX2-1\n", "\n", "NKX2-1\n", "\n", "\n", "\n", "SMAD3->NKX2-1\n", "\n", "\n", "\n", "\n", "\n", "\n", "CEBPB\n", "\n", "CEBPB\n", "\n", "\n", "\n", "SMAD3->CEBPB\n", "\n", "\n", "\n", "\n", "\n", "\n", "NCOA1\n", "\n", "NCOA1\n", "\n", "\n", "\n", "ASXL1\n", "\n", "ASXL1\n", "\n", "\n", "\n", "NCOA1->ASXL1\n", "\n", "\n", "\n", "\n", "\n", "IGF1\n", "\n", "IGF1\n", "\n", "\n", "\n", "APC_AXIN1_GSK3B\n", "\n", "APC_AXIN1_GSK3B\n", "\n", "\n", "\n", "IGF1->APC_AXIN1_GSK3B\n", "\n", "\n", "\n", "\n", "\n", "\n", "CSNK1D\n", "\n", "CSNK1D\n", "\n", "\n", "\n", "APC_AXIN1_GSK3B->CSNK1D\n", "\n", "\n", "\n", "\n", "\n", "MSX2\n", "\n", "MSX2\n", "\n", "\n", "\n", "DLX5->MSX2\n", "\n", "\n", "\n", "\n", "\n", "\n", "TICAM1->TBK1\n", "\n", "\n", "\n", "\n", "\n", "PPP1CA\n", "\n", "PPP1CA\n", "\n", "\n", "\n", "SMAD7->PPP1CA\n", "\n", "\n", "\n", "\n", "\n", "SPI1\n", "\n", "SPI1\n", "\n", "\n", "\n", "JUN->SPI1\n", "\n", "\n", "\n", "\n", "\n", "TAL1\n", "\n", "TAL1\n", "\n", "\n", "\n", "SPI1->TAL1\n", "\n", "\n", "\n", "\n", "\n", "\n", "STAT1\n", "\n", "STAT1\n", "\n", "\n", "\n", "IRF2\n", "\n", "IRF2\n", "\n", "\n", "\n", "STAT1->IRF2\n", "\n", "\n", "\n", "\n", "\n", "TGFB1\n", "\n", "TGFB1\n", "\n", "\n", "\n", "PPP2R2A\n", "\n", "PPP2R2A\n", "\n", "\n", "\n", "TGFB1->PPP2R2A\n", "\n", "\n", "\n", "\n", "\n", "PPP2R2A->PPP2CA\n", "\n", "\n", "\n", "\n", "\n", "\n", "GSK3B->PHLPP1\n", "\n", "\n", "\n", "\n", "\n", "\n", "GSK3B->MYOCD\n", "\n", "\n", "\n", "\n", "\n", "\n", "GSK3B->RELA\n", "\n", "\n", "\n", "\n", "\n", "SFPQ\n", "\n", "SFPQ\n", "\n", "\n", "\n", "GSK3B->SFPQ\n", "\n", "\n", "\n", "\n", "\n", "\n", "NFKB1\n", "\n", "NFKB1\n", "\n", "\n", "\n", "GSK3B->NFKB1\n", "\n", "\n", "\n", "\n", "\n", "CIITA\n", "\n", "CIITA\n", "\n", "\n", "\n", "GSK3B->CIITA\n", "\n", "\n", "\n", "\n", "\n", "CEBPA\n", "\n", "CEBPA\n", "\n", "\n", "\n", "GSK3B->CEBPA\n", "\n", "\n", "\n", "\n", "\n", "VHL\n", "\n", "VHL\n", "\n", "\n", "\n", "CHEK2->VHL\n", "\n", "\n", "\n", "\n", "\n", "CDH6\n", "\n", "CDH6\n", "\n", "\n", "\n", "CTNNB1\n", "\n", "CTNNB1\n", "\n", "\n", "\n", "CDH6->CTNNB1\n", "\n", "\n", "\n", "\n", "\n", "KLF4\n", "\n", "KLF4\n", "\n", "\n", "\n", "CTNNB1->KLF4\n", "\n", "\n", "\n", "\n", "\n", "CDK1\n", "\n", "CDK1\n", "\n", "\n", "\n", "HMGA2\n", "\n", "HMGA2\n", "\n", "\n", "\n", "CDK1->HMGA2\n", "\n", "\n", "\n", "\n", "\n", "\n", "HMGA1\n", "\n", "HMGA1\n", "\n", "\n", "\n", "CDK1->HMGA1\n", "\n", "\n", "\n", "\n", "\n", "\n", "PTPRR->MAPK14\n", "\n", "\n", "\n", "\n", "\n", "\n", "WWTR1\n", "\n", "WWTR1\n", "\n", "\n", "\n", "CSNK1D->WWTR1\n", "\n", "\n", "\n", "\n", "\n", "\n", "HIF3A\n", "\n", "HIF3A\n", "\n", "\n", "\n", "PRKN->HIF3A\n", "\n", "\n", "\n", "\n", "\n", "\n", "IL21R\n", "\n", "IL21R\n", "\n", "\n", "\n", "JAK1\n", "\n", "JAK1\n", "\n", "\n", "\n", "IL21R->JAK1\n", "\n", "\n", "\n", "\n", "\n", "JAK1->STAT1\n", "\n", "\n", "\n", "\n", "\n", "NFKBIB\n", "\n", "NFKBIB\n", "\n", "\n", "\n", "MAP3K7->NFKBIB\n", "\n", "\n", "\n", "\n", "\n", "\n", "CUL1_RBX1_SKP1->SMURF1\n", "\n", "\n", "\n", "\n", "\n", "\n", "MEIS2\n", "\n", "MEIS2\n", "\n", "\n", "\n", "KLF4->MEIS2\n", "\n", "\n", "\n", "\n", "\n", "INHBA\n", "\n", "INHBA\n", "\n", "\n", "\n", "ACVR2B\n", "\n", "ACVR2B\n", "\n", "\n", "\n", "INHBA->ACVR2B\n", "\n", "\n", "\n", "\n", "\n", "ACVR2B->SMAD2\n", "\n", "\n", "\n", "\n", "\n", "CEBPA->USF1\n", "\n", "\n", "\n", "\n", "\n", "POU3F1\n", "\n", "POU3F1\n", "\n", "\n", "\n", "HMGA1->POU3F1\n", "\n", "\n", "\n", "\n", "\n", "EGF\n", "\n", "EGF\n", "\n", "\n", "\n", "ERBB2\n", "\n", "ERBB2\n", "\n", "\n", "\n", "EGF->ERBB2\n", "\n", "\n", "\n", "\n", "\n", "ERBB2->CDK1\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAPK3\n", "\n", "MAPK3\n", "\n", "\n", "\n", "PPP1CA->MAPK3\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAPK3->NCOA1\n", "\n", "\n", "\n", "\n", "\n", "RXRB\n", "\n", "RXRB\n", "\n", "\n", "\n", "RARB->RXRB\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G_sol = Gp.edge_subgraph(np.flatnonzero(P.expr.edge_values.value))\n", "values = P.expr.vertex_values.value\n", "vertex_values = {v: values[i] for i, v in enumerate(Gp.V)}\n", "vertex_sol_values = [vertex_values[v] for v in G_sol.V]\n", "G_sol.plot(\n", " custom_vertex_attr=cn.pl.create_graphviz_vertex_attributes(\n", " G_sol.V, vertex_sol_values\n", " )\n", ")" ] }, { "cell_type": "code", "execution_count": 107, "id": "897bd341-948d-4026-a17a-b0b6b6796f4d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10.373496770858765\n", "88.0\n", "0.0\n" ] } ], "source": [ "# Print the values of the objectives:\n", "for o in P.objectives:\n", " print(o.value)" ] }, { "cell_type": "code", "execution_count": 108, "id": "16795952-fb4a-4490-b418-6439fbf5ae5d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(949, 3261)" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Now we are going to force that only TGFB1 (active)\n", "Gp, inputs_p, measurements_p = preprocess_graph(G, {\"TGFB1\": 1}, measurements)\n", "Gp.shape" ] }, { "cell_type": "code", "execution_count": 109, "id": "56fab499-da46-4387-8b53-04f2a050d7b1", "metadata": {}, "outputs": [], "source": [ "P = milp_carnival(Gp, inputs_p, measurements_p, beta_weight=0.2)\n", "P.solve(solver=\"GUROBI\", Seed=seed, TimeLimit=max_time);" ] }, { "cell_type": "code", "execution_count": 110, "id": "73530ad5-a8b8-41fb-b8ba-087c8ecb592a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10.373496770858765\n", "90.0\n" ] } ], "source": [ "# Same error but +2 edges were included to explain the TFs\n", "for o in P.objectives:\n", " print(o.value)" ] }, { "cell_type": "code", "execution_count": 111, "id": "170e8316-5307-48de-8ba5-5a69091ac237", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Warning: node 'CDKN1A', graph '%3' size too small for label\n", "Warning: node 'TRIP11', graph '%3' size too small for label\n", "Warning: node 'THRA', graph '%3' size too small for label\n", "Warning: node 'HIPK2', graph '%3' size too small for label\n", "Warning: node 'MAPK1', graph '%3' size too small for label\n", "Warning: node 'PHLPP1', graph '%3' size too small for label\n", "Warning: node 'PRKCA', graph '%3' size too small for label\n", "Warning: node 'MYOCD', graph '%3' size too small for label\n", "Warning: node 'NFKB2', graph '%3' size too small for label\n", "Warning: node 'RORA', graph '%3' size too small for label\n", "Warning: node 'PPP2CA', graph '%3' size too small for label\n", "Warning: node 'TRAF2', graph '%3' size too small for label\n", "Warning: node 'SMURF1', graph '%3' size too small for label\n", "Warning: node 'SMAD6', graph '%3' size too small for label\n", "Warning: node 'DUSP16', graph '%3' size too small for label\n", "Warning: node 'MAPK14', graph '%3' size too small for label\n", "Warning: node 'FOSL1', graph '%3' size too small for label\n", "Warning: node 'MEF2A', graph '%3' size too small for label\n", "Warning: node 'GSK3B', graph '%3' size too small for label\n", "Warning: node 'MUC1', graph '%3' size too small for label\n", "Warning: node 'NCOA1', graph '%3' size too small for label\n", "Warning: node 'ASXL1', graph '%3' size too small for label\n", "Warning: node 'MSX2', graph '%3' size too small for label\n", "Warning: node 'SMAD3', graph '%3' size too small for label\n", "Warning: node 'SMAD4', graph '%3' size too small for label\n", "Warning: node 'NFE2L2', graph '%3' size too small for label\n", "Warning: node 'STAT1', graph '%3' size too small for label\n", "Warning: node 'SMAD7', graph '%3' size too small for label\n", "Warning: node 'TICAM1', graph '%3' size too small for label\n", "Warning: node 'AURKA', graph '%3' size too small for label\n", "Warning: node 'LATS2', graph '%3' size too small for label\n", "Warning: node 'NKX2-1', graph '%3' size too small for label\n", "Warning: node 'PITX1', graph '%3' size too small for label\n", "Warning: node 'CHEK2', graph '%3' size too small for label\n", "Warning: node 'HMGA2', graph '%3' size too small for label\n", "Warning: node 'STAT5A', graph '%3' size too small for label\n", "Warning: node 'MECP2', graph '%3' size too small for label\n", "Warning: node 'NFKB1', graph '%3' size too small for label\n", "Warning: node 'MAFA', graph '%3' size too small for label\n", "Warning: node 'HIF3A', graph '%3' size too small for label\n", "Warning: node 'MAP3K7', graph '%3' size too small for label\n", "Warning: node 'NFKBIB', graph '%3' size too small for label\n", "Warning: node 'KHSRP', graph '%3' size too small for label\n", "Warning: node 'CEBPB', graph '%3' size too small for label\n", "Warning: node 'MAPK3', graph '%3' size too small for label\n", "Warning: node 'FBXW7', graph '%3' size too small for label\n", "Warning: node 'CUL1_RBX1_SKP1', graph '%3' size too small for label\n", "Warning: node 'PIK3CA_PIK3R1', graph '%3' size too small for label\n", "Warning: node 'TGFB1', graph '%3' size too small for label\n", "Warning: node 'SMAD2', graph '%3' size too small for label\n", "Warning: node 'PPP1CA', graph '%3' size too small for label\n", "Warning: node 'MEIS2', graph '%3' size too small for label\n", "Warning: node 'CEBPA', graph '%3' size too small for label\n", "Warning: node 'RARG', graph '%3' size too small for label\n", "Warning: node 'RXRB', graph '%3' size too small for label\n", "Warning: node 'HMGA1', graph '%3' size too small for label\n", "Warning: node 'POU3F1', graph '%3' size too small for label\n", "Warning: node 'SMAD5', graph '%3' size too small for label\n", "Warning: node 'WWTR1', graph '%3' size too small for label\n", "Warning: node 'NR1H4', graph '%3' size too small for label\n", "Warning: node 'CDKN1A', graph '%3' size too small for label\n", "Warning: node 'TRIP11', graph '%3' size too small for label\n", "Warning: node 'THRA', graph '%3' size too small for label\n", "Warning: node 'HIPK2', graph '%3' size too small for label\n", "Warning: node 'MAPK1', graph '%3' size too small for label\n", "Warning: node 'PHLPP1', graph '%3' size too small for label\n", "Warning: node 'PRKCA', graph '%3' size too small for label\n", "Warning: node 'MYOCD', graph '%3' size too small for label\n", "Warning: node 'NFKB2', graph '%3' size too small for label\n", "Warning: node 'RORA', graph '%3' size too small for label\n", "Warning: node 'PPP2CA', graph '%3' size too small for label\n", "Warning: node 'TRAF2', graph '%3' size too small for label\n", "Warning: node 'SMURF1', graph '%3' size too small for label\n", "Warning: node 'SMAD6', graph '%3' size too small for label\n", "Warning: node 'DUSP16', graph '%3' size too small for label\n", "Warning: node 'MAPK14', graph '%3' size too small for label\n", "Warning: node 'FOSL1', graph '%3' size too small for label\n", "Warning: node 'MEF2A', graph '%3' size too small for label\n", "Warning: node 'GSK3B', graph '%3' size too small for label\n", "Warning: node 'MUC1', graph '%3' size too small for label\n", "Warning: node 'NCOA1', graph '%3' size too small for label\n", "Warning: node 'ASXL1', graph '%3' size too small for label\n", "Warning: node 'MSX2', graph '%3' size too small for label\n", "Warning: node 'SMAD3', graph '%3' size too small for label\n", "Warning: node 'SMAD4', graph '%3' size too small for label\n", "Warning: node 'NFE2L2', graph '%3' size too small for label\n", "Warning: node 'STAT1', graph '%3' size too small for label\n", "Warning: node 'SMAD7', graph '%3' size too small for label\n", "Warning: node 'TICAM1', graph '%3' size too small for label\n", "Warning: node 'AURKA', graph '%3' size too small for label\n", "Warning: node 'LATS2', graph '%3' size too small for label\n", "Warning: node 'NKX2-1', graph '%3' size too small for label\n", "Warning: node 'PITX1', graph '%3' size too small for label\n", "Warning: node 'CHEK2', graph '%3' size too small for label\n", "Warning: node 'HMGA2', graph '%3' size too small for label\n", "Warning: node 'STAT5A', graph '%3' size too small for label\n", "Warning: node 'MECP2', graph '%3' size too small for label\n", "Warning: node 'NFKB1', graph '%3' size too small for label\n", "Warning: node 'MAFA', graph '%3' size too small for label\n", "Warning: node 'HIF3A', graph '%3' size too small for label\n", "Warning: node 'MAP3K7', graph '%3' size too small for label\n", "Warning: node 'NFKBIB', graph '%3' size too small for label\n", "Warning: node 'KHSRP', graph '%3' size too small for label\n", "Warning: node 'CEBPB', graph '%3' size too small for label\n", "Warning: node 'MAPK3', graph '%3' size too small for label\n", "Warning: node 'FBXW7', graph '%3' size too small for label\n", "Warning: node 'CUL1_RBX1_SKP1', graph '%3' size too small for label\n", "Warning: node 'PIK3CA_PIK3R1', graph '%3' size too small for label\n", "Warning: node 'TGFB1', graph '%3' size too small for label\n", "Warning: node 'SMAD2', graph '%3' size too small for label\n", "Warning: node 'PPP1CA', graph '%3' size too small for label\n", "Warning: node 'MEIS2', graph '%3' size too small for label\n", "Warning: node 'CEBPA', graph '%3' size too small for label\n", "Warning: node 'RARG', graph '%3' size too small for label\n", "Warning: node 'RXRB', graph '%3' size too small for label\n", "Warning: node 'HMGA1', graph '%3' size too small for label\n", "Warning: node 'POU3F1', graph '%3' size too small for label\n", "Warning: node 'SMAD5', graph '%3' size too small for label\n", "Warning: node 'WWTR1', graph '%3' size too small for label\n", "Warning: node 'NR1H4', graph '%3' size too small for label\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "CDKN1A\n", "\n", "CDKN1A\n", "\n", "\n", "\n", "CDK1\n", "\n", "CDK1\n", "\n", "\n", "\n", "CDKN1A->CDK1\n", "\n", "\n", "\n", "\n", "\n", "\n", "TP53\n", "\n", "TP53\n", "\n", "\n", "\n", "CDK1->TP53\n", "\n", "\n", "\n", "\n", "\n", "HMGA2\n", "\n", "HMGA2\n", "\n", "\n", "\n", "CDK1->HMGA2\n", "\n", "\n", "\n", "\n", "\n", "\n", "TRIP11\n", "\n", "TRIP11\n", "\n", "\n", "\n", "THRA\n", "\n", "THRA\n", "\n", "\n", "\n", "TRIP11->THRA\n", "\n", "\n", "\n", "\n", "\n", "RARG\n", "\n", "RARG\n", "\n", "\n", "\n", "THRA->RARG\n", "\n", "\n", "\n", "\n", "\n", "ABL1\n", "\n", "ABL1\n", "\n", "\n", "\n", "HIPK2\n", "\n", "HIPK2\n", "\n", "\n", "\n", "ABL1->HIPK2\n", "\n", "\n", "\n", "\n", "\n", "PRKN\n", "\n", "PRKN\n", "\n", "\n", "\n", "ABL1->PRKN\n", "\n", "\n", "\n", "\n", "\n", "\n", "CEBPB\n", "\n", "CEBPB\n", "\n", "\n", "\n", "ABL1->CEBPB\n", "\n", "\n", "\n", "\n", "\n", "MECP2\n", "\n", "MECP2\n", "\n", "\n", "\n", "HIPK2->MECP2\n", "\n", "\n", "\n", "\n", "\n", "HMGA1\n", "\n", "HMGA1\n", "\n", "\n", "\n", "HIPK2->HMGA1\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAPK1\n", "\n", "MAPK1\n", "\n", "\n", "\n", "JUN\n", "\n", "JUN\n", "\n", "\n", "\n", "MAPK1->JUN\n", "\n", "\n", "\n", "\n", "\n", "RORA\n", "\n", "RORA\n", "\n", "\n", "\n", "MAPK1->RORA\n", "\n", "\n", "\n", "\n", "\n", "\n", "DUSP16\n", "\n", "DUSP16\n", "\n", "\n", "\n", "MAPK1->DUSP16\n", "\n", "\n", "\n", "\n", "\n", "STAT5A\n", "\n", "STAT5A\n", "\n", "\n", "\n", "MAPK1->STAT5A\n", "\n", "\n", "\n", "\n", "\n", "MAFA\n", "\n", "MAFA\n", "\n", "\n", "\n", "MAPK1->MAFA\n", "\n", "\n", "\n", "\n", "\n", "SPI1\n", "\n", "SPI1\n", "\n", "\n", "\n", "JUN->SPI1\n", "\n", "\n", "\n", "\n", "\n", "PHLPP1\n", "\n", "PHLPP1\n", "\n", "\n", "\n", "PRKCA\n", "\n", "PRKCA\n", "\n", "\n", "\n", "PHLPP1->PRKCA\n", "\n", "\n", "\n", "\n", "\n", "\n", "NFE2L2\n", "\n", "NFE2L2\n", "\n", "\n", "\n", "PRKCA->NFE2L2\n", "\n", "\n", "\n", "\n", "\n", "NR1H4\n", "\n", "NR1H4\n", "\n", "\n", "\n", "PRKCA->NR1H4\n", "\n", "\n", "\n", "\n", "\n", "MYOCD\n", "\n", "MYOCD\n", "\n", "\n", "\n", "SRF\n", "\n", "SRF\n", "\n", "\n", "\n", "MYOCD->SRF\n", "\n", "\n", "\n", "\n", "\n", "NFKB2\n", "\n", "NFKB2\n", "\n", "\n", "\n", "TP53->NFKB2\n", "\n", "\n", "\n", "\n", "\n", "RELB\n", "\n", "RELB\n", "\n", "\n", "\n", "NFKB2->RELB\n", "\n", "\n", "\n", "\n", "\n", "RB1\n", "\n", "RB1\n", "\n", "\n", "\n", "RB1->TRIP11\n", "\n", "\n", "\n", "\n", "\n", "\n", "TBK1\n", "\n", "TBK1\n", "\n", "\n", "\n", "REL\n", "\n", "REL\n", "\n", "\n", "\n", "TBK1->REL\n", "\n", "\n", "\n", "\n", "\n", "IRF3\n", "\n", "IRF3\n", "\n", "\n", "\n", "TBK1->IRF3\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA\n", "\n", "PPP2CA\n", "\n", "\n", "\n", "PPP2CA->MAPK1\n", "\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA->RB1\n", "\n", "\n", "\n", "\n", "\n", "TRAF2\n", "\n", "TRAF2\n", "\n", "\n", "\n", "PPP2CA->TRAF2\n", "\n", "\n", "\n", "\n", "\n", "\n", "ATM\n", "\n", "ATM\n", "\n", "\n", "\n", "PPP2CA->ATM\n", "\n", "\n", "\n", "\n", "\n", "\n", "TICAM1\n", "\n", "TICAM1\n", "\n", "\n", "\n", "TRAF2->TICAM1\n", "\n", "\n", "\n", "\n", "\n", "SMURF1\n", "\n", "SMURF1\n", "\n", "\n", "\n", "SMAD6\n", "\n", "SMAD6\n", "\n", "\n", "\n", "SMURF1->SMAD6\n", "\n", "\n", "\n", "\n", "\n", "\n", "SMAD5\n", "\n", "SMAD5\n", "\n", "\n", "\n", "SMURF1->SMAD5\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAP3K7\n", "\n", "MAP3K7\n", "\n", "\n", "\n", "SMAD6->MAP3K7\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAPK14\n", "\n", "MAPK14\n", "\n", "\n", "\n", "DUSP16->MAPK14\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAPK14->CDKN1A\n", "\n", "\n", "\n", "\n", "\n", "JUNB\n", "\n", "JUNB\n", "\n", "\n", "\n", "MAPK14->JUNB\n", "\n", "\n", "\n", "\n", "\n", "MEF2A\n", "\n", "MEF2A\n", "\n", "\n", "\n", "MAPK14->MEF2A\n", "\n", "\n", "\n", "\n", "\n", "GSK3B\n", "\n", "GSK3B\n", "\n", "\n", "\n", "MAPK14->GSK3B\n", "\n", "\n", "\n", "\n", "\n", "\n", "DLX5\n", "\n", "DLX5\n", "\n", "\n", "\n", "MAPK14->DLX5\n", "\n", "\n", "\n", "\n", "\n", "SMAD3\n", "\n", "SMAD3\n", "\n", "\n", "\n", "MAPK14->SMAD3\n", "\n", "\n", "\n", "\n", "\n", "SP7\n", "\n", "SP7\n", "\n", "\n", "\n", "MAPK14->SP7\n", "\n", "\n", "\n", "\n", "\n", "CDX2\n", "\n", "CDX2\n", "\n", "\n", "\n", "MAPK14->CDX2\n", "\n", "\n", "\n", "\n", "\n", "\n", "HBP1\n", "\n", "HBP1\n", "\n", "\n", "\n", "MAPK14->HBP1\n", "\n", "\n", "\n", "\n", "\n", "USF1\n", "\n", "USF1\n", "\n", "\n", "\n", "FOSL1\n", "\n", "FOSL1\n", "\n", "\n", "\n", "USF1->FOSL1\n", "\n", "\n", "\n", "\n", "\n", "\n", "RELA\n", "\n", "RELA\n", "\n", "\n", "\n", "EGR1\n", "\n", "EGR1\n", "\n", "\n", "\n", "RELA->EGR1\n", "\n", "\n", "\n", "\n", "\n", "PITX1\n", "\n", "PITX1\n", "\n", "\n", "\n", "EGR1->PITX1\n", "\n", "\n", "\n", "\n", "\n", "GSK3B->PHLPP1\n", "\n", "\n", "\n", "\n", "\n", "\n", "GSK3B->MYOCD\n", "\n", "\n", "\n", "\n", "\n", "\n", "GSK3B->RELA\n", "\n", "\n", "\n", "\n", "\n", "MUC1\n", "\n", "MUC1\n", "\n", "\n", "\n", "GSK3B->MUC1\n", "\n", "\n", "\n", "\n", "\n", "\n", "SFPQ\n", "\n", "SFPQ\n", "\n", "\n", "\n", "GSK3B->SFPQ\n", "\n", "\n", "\n", "\n", "\n", "\n", "NFKB1\n", "\n", "NFKB1\n", "\n", "\n", "\n", "GSK3B->NFKB1\n", "\n", "\n", "\n", "\n", "\n", "CIITA\n", "\n", "CIITA\n", "\n", "\n", "\n", "GSK3B->CIITA\n", "\n", "\n", "\n", "\n", "\n", "CEBPA\n", "\n", "CEBPA\n", "\n", "\n", "\n", "GSK3B->CEBPA\n", "\n", "\n", "\n", "\n", "\n", "KLF4\n", "\n", "KLF4\n", "\n", "\n", "\n", "MUC1->KLF4\n", "\n", "\n", "\n", "\n", "\n", "NCOA1\n", "\n", "NCOA1\n", "\n", "\n", "\n", "ASXL1\n", "\n", "ASXL1\n", "\n", "\n", "\n", "NCOA1->ASXL1\n", "\n", "\n", "\n", "\n", "\n", "MSX2\n", "\n", "MSX2\n", "\n", "\n", "\n", "DLX5->MSX2\n", "\n", "\n", "\n", "\n", "\n", "\n", "SMAD4\n", "\n", "SMAD4\n", "\n", "\n", "\n", "SMAD3->SMAD4\n", "\n", "\n", "\n", "\n", "\n", "NKX2-1\n", "\n", "NKX2-1\n", "\n", "\n", "\n", "SMAD3->NKX2-1\n", "\n", "\n", "\n", "\n", "\n", "\n", "TAL1\n", "\n", "TAL1\n", "\n", "\n", "\n", "SPI1->TAL1\n", "\n", "\n", "\n", "\n", "\n", "\n", "STAT1\n", "\n", "STAT1\n", "\n", "\n", "\n", "IRF2\n", "\n", "IRF2\n", "\n", "\n", "\n", "STAT1->IRF2\n", "\n", "\n", "\n", "\n", "\n", "ATM->ABL1\n", "\n", "\n", "\n", "\n", "\n", "EP300\n", "\n", "EP300\n", "\n", "\n", "\n", "ATM->EP300\n", "\n", "\n", "\n", "\n", "\n", "CHEK2\n", "\n", "CHEK2\n", "\n", "\n", "\n", "ATM->CHEK2\n", "\n", "\n", "\n", "\n", "\n", "FBXW7\n", "\n", "FBXW7\n", "\n", "\n", "\n", "ATM->FBXW7\n", "\n", "\n", "\n", "\n", "\n", "SMAD7\n", "\n", "SMAD7\n", "\n", "\n", "\n", "EP300->SMAD7\n", "\n", "\n", "\n", "\n", "\n", "PPP1CA\n", "\n", "PPP1CA\n", "\n", "\n", "\n", "SMAD7->PPP1CA\n", "\n", "\n", "\n", "\n", "\n", "TICAM1->TBK1\n", "\n", "\n", "\n", "\n", "\n", "AURKA\n", "\n", "AURKA\n", "\n", "\n", "\n", "LATS2\n", "\n", "LATS2\n", "\n", "\n", "\n", "AURKA->LATS2\n", "\n", "\n", "\n", "\n", "\n", "WWTR1\n", "\n", "WWTR1\n", "\n", "\n", "\n", "LATS2->WWTR1\n", "\n", "\n", "\n", "\n", "\n", "\n", "VHL\n", "\n", "VHL\n", "\n", "\n", "\n", "CHEK2->VHL\n", "\n", "\n", "\n", "\n", "\n", "SRC\n", "\n", "SRC\n", "\n", "\n", "\n", "SRC->PPP2CA\n", "\n", "\n", "\n", "\n", "\n", "\n", "SRC->STAT1\n", "\n", "\n", "\n", "\n", "\n", "HIF3A\n", "\n", "HIF3A\n", "\n", "\n", "\n", "PRKN->HIF3A\n", "\n", "\n", "\n", "\n", "\n", "\n", "NFKBIB\n", "\n", "NFKBIB\n", "\n", "\n", "\n", "MAP3K7->NFKBIB\n", "\n", "\n", "\n", "\n", "\n", "\n", "AKT1\n", "\n", "AKT1\n", "\n", "\n", "\n", "KHSRP\n", "\n", "KHSRP\n", "\n", "\n", "\n", "AKT1->KHSRP\n", "\n", "\n", "\n", "\n", "\n", "\n", "KHSRP->SRC\n", "\n", "\n", "\n", "\n", "\n", "MAPK3\n", "\n", "MAPK3\n", "\n", "\n", "\n", "MAPK3->NCOA1\n", "\n", "\n", "\n", "\n", "\n", "PML\n", "\n", "PML\n", "\n", "\n", "\n", "MAPK3->PML\n", "\n", "\n", "\n", "\n", "\n", "SMAD2\n", "\n", "SMAD2\n", "\n", "\n", "\n", "PML->SMAD2\n", "\n", "\n", "\n", "\n", "\n", "CUL1_RBX1_SKP1\n", "\n", "CUL1_RBX1_SKP1\n", "\n", "\n", "\n", "FBXW7->CUL1_RBX1_SKP1\n", "\n", "\n", "\n", "\n", "\n", "CUL1_RBX1_SKP1->SMURF1\n", "\n", "\n", "\n", "\n", "\n", "\n", "PIK3CA_PIK3R1\n", "\n", "PIK3CA_PIK3R1\n", "\n", "\n", "\n", "PIK3CA_PIK3R1->AKT1\n", "\n", "\n", "\n", "\n", "\n", "TGFB1\n", "\n", "TGFB1\n", "\n", "\n", "\n", "TGFB1->PIK3CA_PIK3R1\n", "\n", "\n", "\n", "\n", "\n", "MEIS2\n", "\n", "MEIS2\n", "\n", "\n", "\n", "KLF4->MEIS2\n", "\n", "\n", "\n", "\n", "\n", "PPP1CA->AURKA\n", "\n", "\n", "\n", "\n", "\n", "\n", "PPP1CA->MAPK3\n", "\n", "\n", "\n", "\n", "\n", "\n", "CEBPA->USF1\n", "\n", "\n", "\n", "\n", "\n", "RXRB\n", "\n", "RXRB\n", "\n", "\n", "\n", "RARG->RXRB\n", "\n", "\n", "\n", "\n", "\n", "POU3F1\n", "\n", "POU3F1\n", "\n", "\n", "\n", "HMGA1->POU3F1\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 111, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G_sol = Gp.edge_subgraph(np.flatnonzero(P.expr.edge_values.value))\n", "values = P.expr.vertex_values.value\n", "vertex_values = {v: values[i] for i, v in enumerate(Gp.V)}\n", "vertex_sol_values = [vertex_values[v] for v in G_sol.V]\n", "G_sol.plot(\n", " custom_vertex_attr=cn.pl.create_graphviz_vertex_attributes(\n", " G_sol.V, vertex_sol_values\n", " )\n", ")" ] }, { "cell_type": "code", "execution_count": 112, "id": "6380c9af-ef90-4bb7-8337-9b6981d5c5ea", "metadata": {}, "outputs": [], "source": [ "# Biasing the networks towards activatory interactions\n", "\n", "# Create the carnival problem with Beta = 0 (to not equally penalise all interactions)\n", "# Gp, inputs_p, measurements_p = preprocess_graph(G, {\"TGFB1\": 0}, measurements)\n", "Gp, inputs_p, measurements_p = preprocess_graph(G, inputs, measurements)\n", "P = milp_carnival(Gp, inputs_p, measurements_p, beta_weight=0)\n", "\n", "# Bias towards activations, by penalizing only inhibitions\n", "P.add_objectives(P.expr.edge_inhibiting.sum(), weights=0.2)\n", "\n", "# Much smaller penalty for activations, since we only want to penalise them\n", "# slightly to avoid having spurious interactions. However, inhibitions are\n", "# penalised 20x more than activations (weight 0.2 vs 0.01)\n", "P.add_objectives(P.expr.edge_activating.sum(), weights=0.01)\n", "\n", "P.solve(solver=\"GUROBI\", TimeLimit=max_time, Seed=seed);" ] }, { "cell_type": "code", "execution_count": 113, "id": "b0e07155-d54f-4e4a-8ba3-a4384aef0d8a", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Warning: node 'FBXW7', graph '%3' size too small for label\n", "Warning: node 'MAPK1', graph '%3' size too small for label\n", "Warning: node 'PPP2R5C', graph '%3' size too small for label\n", "Warning: node 'HIPK2', graph '%3' size too small for label\n", "Warning: node 'PTPN7', graph '%3' size too small for label\n", "Warning: node 'NFKB2', graph '%3' size too small for label\n", "Warning: node 'TRIP11', graph '%3' size too small for label\n", "Warning: node 'THRA', graph '%3' size too small for label\n", "Warning: node 'PHLPP1', graph '%3' size too small for label\n", "Warning: node 'PRKCA', graph '%3' size too small for label\n", "Warning: node 'MYOCD', graph '%3' size too small for label\n", "Warning: node 'MAP2K1', graph '%3' size too small for label\n", "Warning: node 'RORA', graph '%3' size too small for label\n", "Warning: node 'SMAD2', graph '%3' size too small for label\n", "Warning: node 'MEF2A', graph '%3' size too small for label\n", "Warning: node 'PPP2CA', graph '%3' size too small for label\n", "Warning: node 'TRAF2', graph '%3' size too small for label\n", "Warning: node 'SMURF1', graph '%3' size too small for label\n", "Warning: node 'SMAD6', graph '%3' size too small for label\n", "Warning: node 'PRKCQ', graph '%3' size too small for label\n", "Warning: node 'MAPK3', graph '%3' size too small for label\n", "Warning: node 'MAPK14', graph '%3' size too small for label\n", "Warning: node 'SMAD3', graph '%3' size too small for label\n", "Warning: node 'SMAD4', graph '%3' size too small for label\n", "Warning: node 'NCOA1', graph '%3' size too small for label\n", "Warning: node 'ASXL1', graph '%3' size too small for label\n", "Warning: node 'MSX2', graph '%3' size too small for label\n", "Warning: node 'NFE2L2', graph '%3' size too small for label\n", "Warning: node 'TICAM1', graph '%3' size too small for label\n", "Warning: node 'SMAD7', graph '%3' size too small for label\n", "Warning: node 'STAT1', graph '%3' size too small for label\n", "Warning: node 'NKX2-1', graph '%3' size too small for label\n", "Warning: node 'GSK3B', graph '%3' size too small for label\n", "Warning: node 'FOSL1', graph '%3' size too small for label\n", "Warning: node 'PITX1', graph '%3' size too small for label\n", "Warning: node 'CDON', graph '%3' size too small for label\n", "Warning: node 'CHEK2', graph '%3' size too small for label\n", "Warning: node 'CTNNB1', graph '%3' size too small for label\n", "Warning: node 'LATS2', graph '%3' size too small for label\n", "Warning: node 'HMGA2', graph '%3' size too small for label\n", "Warning: node 'STAT5A', graph '%3' size too small for label\n", "Warning: node 'MECP2', graph '%3' size too small for label\n", "Warning: node 'NFKB1', graph '%3' size too small for label\n", "Warning: node 'MAFA', graph '%3' size too small for label\n", "Warning: node 'STAT6', graph '%3' size too small for label\n", "Warning: node 'HIF3A', graph '%3' size too small for label\n", "Warning: node 'MAP3K7', graph '%3' size too small for label\n", "Warning: node 'NFKBIB', graph '%3' size too small for label\n", "Warning: node 'CEBPB', graph '%3' size too small for label\n", "Warning: node 'CUL1_RBX1_SKP1', graph '%3' size too small for label\n", "Warning: node 'MEIS2', graph '%3' size too small for label\n", "Warning: node 'INHBA', graph '%3' size too small for label\n", "Warning: node 'ACVR2B', graph '%3' size too small for label\n", "Warning: node 'GATA2', graph '%3' size too small for label\n", "Warning: node 'HMGA1', graph '%3' size too small for label\n", "Warning: node 'ERBB2', graph '%3' size too small for label\n", "Warning: node 'POU3F1', graph '%3' size too small for label\n", "Warning: node 'SMAD5', graph '%3' size too small for label\n", "Warning: node 'RARB', graph '%3' size too small for label\n", "Warning: node 'RXRB', graph '%3' size too small for label\n", "Warning: node 'WWTR1', graph '%3' size too small for label\n", "Warning: node 'CEBPA', graph '%3' size too small for label\n", "Warning: node 'NR1H4', graph '%3' size too small for label\n", "Warning: node 'FBXW7', graph '%3' size too small for label\n", "Warning: node 'MAPK1', graph '%3' size too small for label\n", "Warning: node 'PPP2R5C', graph '%3' size too small for label\n", "Warning: node 'HIPK2', graph '%3' size too small for label\n", "Warning: node 'PTPN7', graph '%3' size too small for label\n", "Warning: node 'NFKB2', graph '%3' size too small for label\n", "Warning: node 'TRIP11', graph '%3' size too small for label\n", "Warning: node 'THRA', graph '%3' size too small for label\n", "Warning: node 'PHLPP1', graph '%3' size too small for label\n", "Warning: node 'PRKCA', graph '%3' size too small for label\n", "Warning: node 'MYOCD', graph '%3' size too small for label\n", "Warning: node 'MAP2K1', graph '%3' size too small for label\n", "Warning: node 'RORA', graph '%3' size too small for label\n", "Warning: node 'SMAD2', graph '%3' size too small for label\n", "Warning: node 'MEF2A', graph '%3' size too small for label\n", "Warning: node 'PPP2CA', graph '%3' size too small for label\n", "Warning: node 'TRAF2', graph '%3' size too small for label\n", "Warning: node 'SMURF1', graph '%3' size too small for label\n", "Warning: node 'SMAD6', graph '%3' size too small for label\n", "Warning: node 'PRKCQ', graph '%3' size too small for label\n", "Warning: node 'MAPK3', graph '%3' size too small for label\n", "Warning: node 'MAPK14', graph '%3' size too small for label\n", "Warning: node 'SMAD3', graph '%3' size too small for label\n", "Warning: node 'SMAD4', graph '%3' size too small for label\n", "Warning: node 'NCOA1', graph '%3' size too small for label\n", "Warning: node 'ASXL1', graph '%3' size too small for label\n", "Warning: node 'MSX2', graph '%3' size too small for label\n", "Warning: node 'NFE2L2', graph '%3' size too small for label\n", "Warning: node 'TICAM1', graph '%3' size too small for label\n", "Warning: node 'SMAD7', graph '%3' size too small for label\n", "Warning: node 'STAT1', graph '%3' size too small for label\n", "Warning: node 'NKX2-1', graph '%3' size too small for label\n", "Warning: node 'GSK3B', graph '%3' size too small for label\n", "Warning: node 'FOSL1', graph '%3' size too small for label\n", "Warning: node 'PITX1', graph '%3' size too small for label\n", "Warning: node 'CDON', graph '%3' size too small for label\n", "Warning: node 'CHEK2', graph '%3' size too small for label\n", "Warning: node 'CTNNB1', graph '%3' size too small for label\n", "Warning: node 'LATS2', graph '%3' size too small for label\n", "Warning: node 'HMGA2', graph '%3' size too small for label\n", "Warning: node 'STAT5A', graph '%3' size too small for label\n", "Warning: node 'MECP2', graph '%3' size too small for label\n", "Warning: node 'NFKB1', graph '%3' size too small for label\n", "Warning: node 'MAFA', graph '%3' size too small for label\n", "Warning: node 'STAT6', graph '%3' size too small for label\n", "Warning: node 'HIF3A', graph '%3' size too small for label\n", "Warning: node 'MAP3K7', graph '%3' size too small for label\n", "Warning: node 'NFKBIB', graph '%3' size too small for label\n", "Warning: node 'CEBPB', graph '%3' size too small for label\n", "Warning: node 'CUL1_RBX1_SKP1', graph '%3' size too small for label\n", "Warning: node 'MEIS2', graph '%3' size too small for label\n", "Warning: node 'INHBA', graph '%3' size too small for label\n", "Warning: node 'ACVR2B', graph '%3' size too small for label\n", "Warning: node 'GATA2', graph '%3' size too small for label\n", "Warning: node 'HMGA1', graph '%3' size too small for label\n", "Warning: node 'ERBB2', graph '%3' size too small for label\n", "Warning: node 'POU3F1', graph '%3' size too small for label\n", "Warning: node 'SMAD5', graph '%3' size too small for label\n", "Warning: node 'RARB', graph '%3' size too small for label\n", "Warning: node 'RXRB', graph '%3' size too small for label\n", "Warning: node 'WWTR1', graph '%3' size too small for label\n", "Warning: node 'CEBPA', graph '%3' size too small for label\n", "Warning: node 'NR1H4', graph '%3' size too small for label\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "ATM\n", "\n", "ATM\n", "\n", "\n", "\n", "FBXW7\n", "\n", "FBXW7\n", "\n", "\n", "\n", "ATM->FBXW7\n", "\n", "\n", "\n", "\n", "\n", "ABL1\n", "\n", "ABL1\n", "\n", "\n", "\n", "ATM->ABL1\n", "\n", "\n", "\n", "\n", "\n", "CHEK2\n", "\n", "CHEK2\n", "\n", "\n", "\n", "ATM->CHEK2\n", "\n", "\n", "\n", "\n", "\n", "CUL1_RBX1_SKP1\n", "\n", "CUL1_RBX1_SKP1\n", "\n", "\n", "\n", "FBXW7->CUL1_RBX1_SKP1\n", "\n", "\n", "\n", "\n", "\n", "MAPK1\n", "\n", "MAPK1\n", "\n", "\n", "\n", "PPP2R5C\n", "\n", "PPP2R5C\n", "\n", "\n", "\n", "MAPK1->PPP2R5C\n", "\n", "\n", "\n", "\n", "\n", "\n", "RORA\n", "\n", "RORA\n", "\n", "\n", "\n", "MAPK1->RORA\n", "\n", "\n", "\n", "\n", "\n", "\n", "EP300\n", "\n", "EP300\n", "\n", "\n", "\n", "MAPK1->EP300\n", "\n", "\n", "\n", "\n", "\n", "STAT5A\n", "\n", "STAT5A\n", "\n", "\n", "\n", "MAPK1->STAT5A\n", "\n", "\n", "\n", "\n", "\n", "MAFA\n", "\n", "MAFA\n", "\n", "\n", "\n", "MAPK1->MAFA\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA\n", "\n", "PPP2CA\n", "\n", "\n", "\n", "PPP2R5C->PPP2CA\n", "\n", "\n", "\n", "\n", "\n", "HIPK2\n", "\n", "HIPK2\n", "\n", "\n", "\n", "ABL1->HIPK2\n", "\n", "\n", "\n", "\n", "\n", "PRKN\n", "\n", "PRKN\n", "\n", "\n", "\n", "ABL1->PRKN\n", "\n", "\n", "\n", "\n", "\n", "\n", "CEBPB\n", "\n", "CEBPB\n", "\n", "\n", "\n", "ABL1->CEBPB\n", "\n", "\n", "\n", "\n", "\n", "MECP2\n", "\n", "MECP2\n", "\n", "\n", "\n", "HIPK2->MECP2\n", "\n", "\n", "\n", "\n", "\n", "PTPN7\n", "\n", "PTPN7\n", "\n", "\n", "\n", "PTPN7->MAPK1\n", "\n", "\n", "\n", "\n", "\n", "\n", "NFKB2\n", "\n", "NFKB2\n", "\n", "\n", "\n", "RELB\n", "\n", "RELB\n", "\n", "\n", "\n", "NFKB2->RELB\n", "\n", "\n", "\n", "\n", "\n", "TRIP11\n", "\n", "TRIP11\n", "\n", "\n", "\n", "THRA\n", "\n", "THRA\n", "\n", "\n", "\n", "TRIP11->THRA\n", "\n", "\n", "\n", "\n", "\n", "RARB\n", "\n", "RARB\n", "\n", "\n", "\n", "THRA->RARB\n", "\n", "\n", "\n", "\n", "\n", "PHLPP1\n", "\n", "PHLPP1\n", "\n", "\n", "\n", "PRKCA\n", "\n", "PRKCA\n", "\n", "\n", "\n", "PHLPP1->PRKCA\n", "\n", "\n", "\n", "\n", "\n", "\n", "STK4\n", "\n", "STK4\n", "\n", "\n", "\n", "PHLPP1->STK4\n", "\n", "\n", "\n", "\n", "\n", "NFE2L2\n", "\n", "NFE2L2\n", "\n", "\n", "\n", "PRKCA->NFE2L2\n", "\n", "\n", "\n", "\n", "\n", "KIT\n", "\n", "KIT\n", "\n", "\n", "\n", "PRKCA->KIT\n", "\n", "\n", "\n", "\n", "\n", "\n", "NR1H4\n", "\n", "NR1H4\n", "\n", "\n", "\n", "PRKCA->NR1H4\n", "\n", "\n", "\n", "\n", "\n", "MYOCD\n", "\n", "MYOCD\n", "\n", "\n", "\n", "SRF\n", "\n", "SRF\n", "\n", "\n", "\n", "MYOCD->SRF\n", "\n", "\n", "\n", "\n", "\n", "TP53\n", "\n", "TP53\n", "\n", "\n", "\n", "TP53->NFKB2\n", "\n", "\n", "\n", "\n", "\n", "RB1\n", "\n", "RB1\n", "\n", "\n", "\n", "RB1->TRIP11\n", "\n", "\n", "\n", "\n", "\n", "\n", "CDK1\n", "\n", "CDK1\n", "\n", "\n", "\n", "MAP2K1\n", "\n", "MAP2K1\n", "\n", "\n", "\n", "CDK1->MAP2K1\n", "\n", "\n", "\n", "\n", "\n", "\n", "HMGA2\n", "\n", "HMGA2\n", "\n", "\n", "\n", "CDK1->HMGA2\n", "\n", "\n", "\n", "\n", "\n", "\n", "HMGA1\n", "\n", "HMGA1\n", "\n", "\n", "\n", "CDK1->HMGA1\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAPK3\n", "\n", "MAPK3\n", "\n", "\n", "\n", "MAP2K1->MAPK3\n", "\n", "\n", "\n", "\n", "\n", "SMAD2\n", "\n", "SMAD2\n", "\n", "\n", "\n", "MEF2A\n", "\n", "MEF2A\n", "\n", "\n", "\n", "SMAD2->MEF2A\n", "\n", "\n", "\n", "\n", "\n", "TBK1\n", "\n", "TBK1\n", "\n", "\n", "\n", "REL\n", "\n", "REL\n", "\n", "\n", "\n", "TBK1->REL\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA->ATM\n", "\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA->RB1\n", "\n", "\n", "\n", "\n", "\n", "TRAF2\n", "\n", "TRAF2\n", "\n", "\n", "\n", "PPP2CA->TRAF2\n", "\n", "\n", "\n", "\n", "\n", "\n", "RELA\n", "\n", "RELA\n", "\n", "\n", "\n", "PPP2CA->RELA\n", "\n", "\n", "\n", "\n", "\n", "\n", "IRF3\n", "\n", "IRF3\n", "\n", "\n", "\n", "PPP2CA->IRF3\n", "\n", "\n", "\n", "\n", "\n", "\n", "TICAM1\n", "\n", "TICAM1\n", "\n", "\n", "\n", "TRAF2->TICAM1\n", "\n", "\n", "\n", "\n", "\n", "SMURF1\n", "\n", "SMURF1\n", "\n", "\n", "\n", "SMAD6\n", "\n", "SMAD6\n", "\n", "\n", "\n", "SMURF1->SMAD6\n", "\n", "\n", "\n", "\n", "\n", "\n", "SMAD5\n", "\n", "SMAD5\n", "\n", "\n", "\n", "SMURF1->SMAD5\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAP3K7\n", "\n", "MAP3K7\n", "\n", "\n", "\n", "SMAD6->MAP3K7\n", "\n", "\n", "\n", "\n", "\n", "\n", "LCK\n", "\n", "LCK\n", "\n", "\n", "\n", "PRKCQ\n", "\n", "PRKCQ\n", "\n", "\n", "\n", "LCK->PRKCQ\n", "\n", "\n", "\n", "\n", "\n", "FOSL1\n", "\n", "FOSL1\n", "\n", "\n", "\n", "PRKCQ->FOSL1\n", "\n", "\n", "\n", "\n", "\n", "MAPK3->PTPN7\n", "\n", "\n", "\n", "\n", "\n", "MAPK3->LCK\n", "\n", "\n", "\n", "\n", "\n", "NCOA1\n", "\n", "NCOA1\n", "\n", "\n", "\n", "MAPK3->NCOA1\n", "\n", "\n", "\n", "\n", "\n", "SMAD7\n", "\n", "SMAD7\n", "\n", "\n", "\n", "EP300->SMAD7\n", "\n", "\n", "\n", "\n", "\n", "MAPK14\n", "\n", "MAPK14\n", "\n", "\n", "\n", "JUNB\n", "\n", "JUNB\n", "\n", "\n", "\n", "MAPK14->JUNB\n", "\n", "\n", "\n", "\n", "\n", "DLX5\n", "\n", "DLX5\n", "\n", "\n", "\n", "MAPK14->DLX5\n", "\n", "\n", "\n", "\n", "\n", "GSK3B\n", "\n", "GSK3B\n", "\n", "\n", "\n", "MAPK14->GSK3B\n", "\n", "\n", "\n", "\n", "\n", "\n", "SP7\n", "\n", "SP7\n", "\n", "\n", "\n", "MAPK14->SP7\n", "\n", "\n", "\n", "\n", "\n", "GATA2\n", "\n", "GATA2\n", "\n", "\n", "\n", "MAPK14->GATA2\n", "\n", "\n", "\n", "\n", "\n", "CDX2\n", "\n", "CDX2\n", "\n", "\n", "\n", "MAPK14->CDX2\n", "\n", "\n", "\n", "\n", "\n", "\n", "HBP1\n", "\n", "HBP1\n", "\n", "\n", "\n", "MAPK14->HBP1\n", "\n", "\n", "\n", "\n", "\n", "LATS2\n", "\n", "LATS2\n", "\n", "\n", "\n", "STK4->LATS2\n", "\n", "\n", "\n", "\n", "\n", "EGR1\n", "\n", "EGR1\n", "\n", "\n", "\n", "RELA->EGR1\n", "\n", "\n", "\n", "\n", "\n", "PITX1\n", "\n", "PITX1\n", "\n", "\n", "\n", "EGR1->PITX1\n", "\n", "\n", "\n", "\n", "\n", "VHL\n", "\n", "VHL\n", "\n", "\n", "\n", "VHL->TP53\n", "\n", "\n", "\n", "\n", "\n", "SMAD3\n", "\n", "SMAD3\n", "\n", "\n", "\n", "SMAD4\n", "\n", "SMAD4\n", "\n", "\n", "\n", "SMAD3->SMAD4\n", "\n", "\n", "\n", "\n", "\n", "NKX2-1\n", "\n", "NKX2-1\n", "\n", "\n", "\n", "SMAD3->NKX2-1\n", "\n", "\n", "\n", "\n", "\n", "\n", "ASXL1\n", "\n", "ASXL1\n", "\n", "\n", "\n", "NCOA1->ASXL1\n", "\n", "\n", "\n", "\n", "\n", "MSX2\n", "\n", "MSX2\n", "\n", "\n", "\n", "DLX5->MSX2\n", "\n", "\n", "\n", "\n", "\n", "\n", "TICAM1->TBK1\n", "\n", "\n", "\n", "\n", "\n", "STAT1\n", "\n", "STAT1\n", "\n", "\n", "\n", "IRF2\n", "\n", "IRF2\n", "\n", "\n", "\n", "STAT1->IRF2\n", "\n", "\n", "\n", "\n", "\n", "GSK3B->PHLPP1\n", "\n", "\n", "\n", "\n", "\n", "\n", "GSK3B->MYOCD\n", "\n", "\n", "\n", "\n", "\n", "\n", "SFPQ\n", "\n", "SFPQ\n", "\n", "\n", "\n", "GSK3B->SFPQ\n", "\n", "\n", "\n", "\n", "\n", "\n", "NFKB1\n", "\n", "NFKB1\n", "\n", "\n", "\n", "GSK3B->NFKB1\n", "\n", "\n", "\n", "\n", "\n", "CIITA\n", "\n", "CIITA\n", "\n", "\n", "\n", "GSK3B->CIITA\n", "\n", "\n", "\n", "\n", "\n", "CEBPA\n", "\n", "CEBPA\n", "\n", "\n", "\n", "GSK3B->CEBPA\n", "\n", "\n", "\n", "\n", "\n", "CDON\n", "\n", "CDON\n", "\n", "\n", "\n", "CDON->MAPK14\n", "\n", "\n", "\n", "\n", "\n", "CHEK2->VHL\n", "\n", "\n", "\n", "\n", "\n", "CDH6\n", "\n", "CDH6\n", "\n", "\n", "\n", "CTNNB1\n", "\n", "CTNNB1\n", "\n", "\n", "\n", "CDH6->CTNNB1\n", "\n", "\n", "\n", "\n", "\n", "KLF4\n", "\n", "KLF4\n", "\n", "\n", "\n", "CTNNB1->KLF4\n", "\n", "\n", "\n", "\n", "\n", "WWTR1\n", "\n", "WWTR1\n", "\n", "\n", "\n", "LATS2->WWTR1\n", "\n", "\n", "\n", "\n", "\n", "\n", "STAT6\n", "\n", "STAT6\n", "\n", "\n", "\n", "STAT6->STAT1\n", "\n", "\n", "\n", "\n", "\n", "\n", "JAK2\n", "\n", "JAK2\n", "\n", "\n", "\n", "KIT->JAK2\n", "\n", "\n", "\n", "\n", "\n", "JAK2->STAT6\n", "\n", "\n", "\n", "\n", "\n", "HIF3A\n", "\n", "HIF3A\n", "\n", "\n", "\n", "PRKN->HIF3A\n", "\n", "\n", "\n", "\n", "\n", "\n", "NFKBIB\n", "\n", "NFKBIB\n", "\n", "\n", "\n", "MAP3K7->NFKBIB\n", "\n", "\n", "\n", "\n", "\n", "\n", "CUL1_RBX1_SKP1->SMURF1\n", "\n", "\n", "\n", "\n", "\n", "\n", "MEIS2\n", "\n", "MEIS2\n", "\n", "\n", "\n", "KLF4->MEIS2\n", "\n", "\n", "\n", "\n", "\n", "INHBA\n", "\n", "INHBA\n", "\n", "\n", "\n", "ACVR2B\n", "\n", "ACVR2B\n", "\n", "\n", "\n", "INHBA->ACVR2B\n", "\n", "\n", "\n", "\n", "\n", "ACVR2B->SMAD2\n", "\n", "\n", "\n", "\n", "\n", "ACVR2B->SMAD3\n", "\n", "\n", "\n", "\n", "\n", "SPI1\n", "\n", "SPI1\n", "\n", "\n", "\n", "GATA2->SPI1\n", "\n", "\n", "\n", "\n", "\n", "\n", "TAL1\n", "\n", "TAL1\n", "\n", "\n", "\n", "SPI1->TAL1\n", "\n", "\n", "\n", "\n", "\n", "\n", "POU3F1\n", "\n", "POU3F1\n", "\n", "\n", "\n", "HMGA1->POU3F1\n", "\n", "\n", "\n", "\n", "\n", "CDH2\n", "\n", "CDH2\n", "\n", "\n", "\n", "CDH2->CDON\n", "\n", "\n", "\n", "\n", "\n", "EGF\n", "\n", "EGF\n", "\n", "\n", "\n", "ERBB2\n", "\n", "ERBB2\n", "\n", "\n", "\n", "EGF->ERBB2\n", "\n", "\n", "\n", "\n", "\n", "ERBB2->CDK1\n", "\n", "\n", "\n", "\n", "\n", "\n", "RXRB\n", "\n", "RXRB\n", "\n", "\n", "\n", "RARB->RXRB\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 113, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G_sol = Gp.edge_subgraph(np.flatnonzero(P.expr.edge_values.value))\n", "values = P.expr.vertex_values.value\n", "vertex_values = {v: values[i] for i, v in enumerate(Gp.V)}\n", "vertex_sol_values = [vertex_values[v] for v in G_sol.V]\n", "G_sol.plot(\n", " custom_vertex_attr=cn.pl.create_graphviz_vertex_attributes(\n", " G_sol.V, vertex_sol_values\n", " )\n", ")" ] }, { "cell_type": "code", "execution_count": 114, "id": "50f2269f-5cc0-4572-be18-46887726d191", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10.373496770858765\n", "48.0\n", "44.0\n" ] } ], "source": [ "# 48 inhibitory interactions and 44 activations\n", "for o in P.objectives:\n", " print(o.value)" ] }, { "cell_type": "markdown", "id": "3249fa12-4cda-4b79-9964-21137acb480e", "metadata": {}, "source": [ "We have explored different approaches and assumptions to recover a signalling network from TF activities and a list of potential receptors. Although changes in gene expression for signalling proteins are not always predictive of signalling cascades—hence the use of CARNIVAL as a footprint-based method to bridge the gaps between receptors and TFs—we can introduce a slight bias in the network towards signalling proteins whose gene expression has changed significantly after treatment. These changes, while indirect, may still provide valuable cues. In a manner similar to how we penalised low-abundance genes, we will now prioritize the inclusion of upregulated genes." ] }, { "cell_type": "code", "execution_count": 139, "id": "aca3c182-9eba-4e7b-bb69-e9b55cd332c3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['ABL1', 'AHR', 'AIRE', 'AP1', 'APEX1', 'AR', 'ARID1A', 'ARID3A',\n", " 'ARID3B', 'ARID4A',\n", " ...\n", " 'ZNF362', 'ZNF382', 'ZNF384', 'ZNF395', 'ZNF436', 'ZNF699', 'ZNF76',\n", " 'ZNF804A', 'ZNF91', 'ZXDC'],\n", " dtype='object', length=655)" ] }, "execution_count": 139, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tf_acts.columns" ] }, { "cell_type": "code", "execution_count": 140, "id": "4ec4d220-c63d-466a-a524-967b09fc19f5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "NUAK1 -40.581591\n", "CDH6 -39.007075\n", "FZD8 -37.421427\n", "CDH2 -34.291273\n", "STK38L -30.552887\n", " ... \n", "IL6R 21.833188\n", "MAP3K5 21.883284\n", "CASP1 23.060970\n", "IL1R1 24.058471\n", "TNFRSF1B 25.812839\n", "Name: stat, Length: 627, dtype: float64" ] }, "execution_count": 140, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Since the problem minimises error, we change sign. Upregulated genes get negative score\n", "# so if they are selected, the error decreases. The opposite for downregulated genes\n", "df_gene_scores = -results_df.loc[\n", " results_df.index.intersection(Gp.V).difference(tf_acts.columns)\n", "].stat\n", "dict_scores = df_gene_scores.to_dict()\n", "\n", "df_gene_scores.sort_values()" ] }, { "cell_type": "code", "execution_count": 141, "id": "796cf5b1-25d4-4807-9679-e9bf04a4b475", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3045.9775260752576" ] }, "execution_count": 141, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Now we will add a penalty to avoid selecting lowly expressed genes\n", "vertices = Gp.V\n", "scores = np.array([dict_scores.get(v, 0) for v in vertices])\n", "np.sum(np.abs(scores))" ] }, { "cell_type": "code", "execution_count": 142, "id": "90eb8df5-a39d-4ebc-a508-6e75d90617bb", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\pablo\\miniconda3\\envs\\corneto-dev-mini\\Lib\\site-packages\\cvxpy\\problems\\problem.py:158: UserWarning: Objective contains too many subexpressions. Consider vectorizing your CVXPY code to speed up compilation.\n", " warnings.warn(\"Objective contains too many subexpressions. \"\n" ] } ], "source": [ "# Create the carnival problem\n", "P = milp_carnival(Gp, inputs_p, measurements_p, beta_weight=0.2)\n", "vertex_selected = P.expr.vertex_activated + P.expr.vertex_inhibited\n", "total_score = vertex_selected @ scores\n", "P.add_objectives(total_score, weights=1e-3)\n", "P.solve(solver=\"GUROBI\", Seed=seed, TimeLimit=max_time);" ] }, { "cell_type": "code", "execution_count": 143, "id": "bd7dcb88-bc2b-4131-b102-25dfd7d31921", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Warning: node 'FBXW7', graph '%3' size too small for label\n", "Warning: node 'CDKN1A', graph '%3' size too small for label\n", "Warning: node 'HIPK2', graph '%3' size too small for label\n", "Warning: node 'MAPK1', graph '%3' size too small for label\n", "Warning: node 'NFKB2', graph '%3' size too small for label\n", "Warning: node 'TRIP11', graph '%3' size too small for label\n", "Warning: node 'THRA', graph '%3' size too small for label\n", "Warning: node 'PHLPP1', graph '%3' size too small for label\n", "Warning: node 'PRKCA', graph '%3' size too small for label\n", "Warning: node 'MYOCD', graph '%3' size too small for label\n", "Warning: node 'MAP2K1', graph '%3' size too small for label\n", "Warning: node 'RORA', graph '%3' size too small for label\n", "Warning: node 'PPP2CA', graph '%3' size too small for label\n", "Warning: node 'TRAF2', graph '%3' size too small for label\n", "Warning: node 'SMURF1', graph '%3' size too small for label\n", "Warning: node 'SMAD6', graph '%3' size too small for label\n", "Warning: node 'FOSL1', graph '%3' size too small for label\n", "Warning: node 'MAPK14', graph '%3' size too small for label\n", "Warning: node 'MEF2A', graph '%3' size too small for label\n", "Warning: node 'MAPK3', graph '%3' size too small for label\n", "Warning: node 'SMAD3', graph '%3' size too small for label\n", "Warning: node 'SMAD4', graph '%3' size too small for label\n", "Warning: node 'GSK3B', graph '%3' size too small for label\n", "Warning: node 'MUC1', graph '%3' size too small for label\n", "Warning: node 'NCOA1', graph '%3' size too small for label\n", "Warning: node 'ASXL1', graph '%3' size too small for label\n", "Warning: node 'MSX2', graph '%3' size too small for label\n", "Warning: node 'NFE2L2', graph '%3' size too small for label\n", "Warning: node 'TICAM1', graph '%3' size too small for label\n", "Warning: node 'SMAD7', graph '%3' size too small for label\n", "Warning: node 'STAT1', graph '%3' size too small for label\n", "Warning: node 'TGFB1', graph '%3' size too small for label\n", "Warning: node 'PPP2R2A', graph '%3' size too small for label\n", "Warning: node 'NKX2-1', graph '%3' size too small for label\n", "Warning: node 'PITX1', graph '%3' size too small for label\n", "Warning: node 'CDON', graph '%3' size too small for label\n", "Warning: node 'CHEK2', graph '%3' size too small for label\n", "Warning: node 'HMGA2', graph '%3' size too small for label\n", "Warning: node 'STAT5A', graph '%3' size too small for label\n", "Warning: node 'MECP2', graph '%3' size too small for label\n", "Warning: node 'NFKB1', graph '%3' size too small for label\n", "Warning: node 'MAFA', graph '%3' size too small for label\n", "Warning: node 'HIF3A', graph '%3' size too small for label\n", "Warning: node 'MAP3K7', graph '%3' size too small for label\n", "Warning: node 'NFKBIB', graph '%3' size too small for label\n", "Warning: node 'CEBPB', graph '%3' size too small for label\n", "Warning: node 'CUL1_RBX1_SKP1', graph '%3' size too small for label\n", "Warning: node 'MEIS2', graph '%3' size too small for label\n", "Warning: node 'INHBA', graph '%3' size too small for label\n", "Warning: node 'ACVR2B', graph '%3' size too small for label\n", "Warning: node 'SMAD2', graph '%3' size too small for label\n", "Warning: node 'RARG', graph '%3' size too small for label\n", "Warning: node 'RXRB', graph '%3' size too small for label\n", "Warning: node 'CEBPA', graph '%3' size too small for label\n", "Warning: node 'HMGA1', graph '%3' size too small for label\n", "Warning: node 'LATS1', graph '%3' size too small for label\n", "Warning: node 'POU3F1', graph '%3' size too small for label\n", "Warning: node 'WWTR1', graph '%3' size too small for label\n", "Warning: node 'SMAD5', graph '%3' size too small for label\n", "Warning: node 'NR1H4', graph '%3' size too small for label\n", "Warning: node 'FBXW7', graph '%3' size too small for label\n", "Warning: node 'CDKN1A', graph '%3' size too small for label\n", "Warning: node 'HIPK2', graph '%3' size too small for label\n", "Warning: node 'MAPK1', graph '%3' size too small for label\n", "Warning: node 'NFKB2', graph '%3' size too small for label\n", "Warning: node 'TRIP11', graph '%3' size too small for label\n", "Warning: node 'THRA', graph '%3' size too small for label\n", "Warning: node 'PHLPP1', graph '%3' size too small for label\n", "Warning: node 'PRKCA', graph '%3' size too small for label\n", "Warning: node 'MYOCD', graph '%3' size too small for label\n", "Warning: node 'MAP2K1', graph '%3' size too small for label\n", "Warning: node 'RORA', graph '%3' size too small for label\n", "Warning: node 'PPP2CA', graph '%3' size too small for label\n", "Warning: node 'TRAF2', graph '%3' size too small for label\n", "Warning: node 'SMURF1', graph '%3' size too small for label\n", "Warning: node 'SMAD6', graph '%3' size too small for label\n", "Warning: node 'FOSL1', graph '%3' size too small for label\n", "Warning: node 'MAPK14', graph '%3' size too small for label\n", "Warning: node 'MEF2A', graph '%3' size too small for label\n", "Warning: node 'MAPK3', graph '%3' size too small for label\n", "Warning: node 'SMAD3', graph '%3' size too small for label\n", "Warning: node 'SMAD4', graph '%3' size too small for label\n", "Warning: node 'GSK3B', graph '%3' size too small for label\n", "Warning: node 'MUC1', graph '%3' size too small for label\n", "Warning: node 'NCOA1', graph '%3' size too small for label\n", "Warning: node 'ASXL1', graph '%3' size too small for label\n", "Warning: node 'MSX2', graph '%3' size too small for label\n", "Warning: node 'NFE2L2', graph '%3' size too small for label\n", "Warning: node 'TICAM1', graph '%3' size too small for label\n", "Warning: node 'SMAD7', graph '%3' size too small for label\n", "Warning: node 'STAT1', graph '%3' size too small for label\n", "Warning: node 'TGFB1', graph '%3' size too small for label\n", "Warning: node 'PPP2R2A', graph '%3' size too small for label\n", "Warning: node 'NKX2-1', graph '%3' size too small for label\n", "Warning: node 'PITX1', graph '%3' size too small for label\n", "Warning: node 'CDON', graph '%3' size too small for label\n", "Warning: node 'CHEK2', graph '%3' size too small for label\n", "Warning: node 'HMGA2', graph '%3' size too small for label\n", "Warning: node 'STAT5A', graph '%3' size too small for label\n", "Warning: node 'MECP2', graph '%3' size too small for label\n", "Warning: node 'NFKB1', graph '%3' size too small for label\n", "Warning: node 'MAFA', graph '%3' size too small for label\n", "Warning: node 'HIF3A', graph '%3' size too small for label\n", "Warning: node 'MAP3K7', graph '%3' size too small for label\n", "Warning: node 'NFKBIB', graph '%3' size too small for label\n", "Warning: node 'CEBPB', graph '%3' size too small for label\n", "Warning: node 'CUL1_RBX1_SKP1', graph '%3' size too small for label\n", "Warning: node 'MEIS2', graph '%3' size too small for label\n", "Warning: node 'INHBA', graph '%3' size too small for label\n", "Warning: node 'ACVR2B', graph '%3' size too small for label\n", "Warning: node 'SMAD2', graph '%3' size too small for label\n", "Warning: node 'RARG', graph '%3' size too small for label\n", "Warning: node 'RXRB', graph '%3' size too small for label\n", "Warning: node 'CEBPA', graph '%3' size too small for label\n", "Warning: node 'HMGA1', graph '%3' size too small for label\n", "Warning: node 'LATS1', graph '%3' size too small for label\n", "Warning: node 'POU3F1', graph '%3' size too small for label\n", "Warning: node 'WWTR1', graph '%3' size too small for label\n", "Warning: node 'SMAD5', graph '%3' size too small for label\n", "Warning: node 'NR1H4', graph '%3' size too small for label\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "ATM\n", "\n", "ATM\n", "\n", "\n", "\n", "FBXW7\n", "\n", "FBXW7\n", "\n", "\n", "\n", "ATM->FBXW7\n", "\n", "\n", "\n", "\n", "\n", "ABL1\n", "\n", "ABL1\n", "\n", "\n", "\n", "ATM->ABL1\n", "\n", "\n", "\n", "\n", "\n", "EP300\n", "\n", "EP300\n", "\n", "\n", "\n", "ATM->EP300\n", "\n", "\n", "\n", "\n", "\n", "CHEK2\n", "\n", "CHEK2\n", "\n", "\n", "\n", "ATM->CHEK2\n", "\n", "\n", "\n", "\n", "\n", "CUL1_RBX1_SKP1\n", "\n", "CUL1_RBX1_SKP1\n", "\n", "\n", "\n", "FBXW7->CUL1_RBX1_SKP1\n", "\n", "\n", "\n", "\n", "\n", "CDKN1A\n", "\n", "CDKN1A\n", "\n", "\n", "\n", "CDK1\n", "\n", "CDK1\n", "\n", "\n", "\n", "CDKN1A->CDK1\n", "\n", "\n", "\n", "\n", "\n", "\n", "TP53\n", "\n", "TP53\n", "\n", "\n", "\n", "CDK1->TP53\n", "\n", "\n", "\n", "\n", "\n", "MAP2K1\n", "\n", "MAP2K1\n", "\n", "\n", "\n", "CDK1->MAP2K1\n", "\n", "\n", "\n", "\n", "\n", "\n", "HMGA2\n", "\n", "HMGA2\n", "\n", "\n", "\n", "CDK1->HMGA2\n", "\n", "\n", "\n", "\n", "\n", "\n", "HMGA1\n", "\n", "HMGA1\n", "\n", "\n", "\n", "CDK1->HMGA1\n", "\n", "\n", "\n", "\n", "\n", "\n", "HIPK2\n", "\n", "HIPK2\n", "\n", "\n", "\n", "ABL1->HIPK2\n", "\n", "\n", "\n", "\n", "\n", "RB1\n", "\n", "RB1\n", "\n", "\n", "\n", "ABL1->RB1\n", "\n", "\n", "\n", "\n", "\n", "\n", "PRKN\n", "\n", "PRKN\n", "\n", "\n", "\n", "ABL1->PRKN\n", "\n", "\n", "\n", "\n", "\n", "\n", "CEBPB\n", "\n", "CEBPB\n", "\n", "\n", "\n", "ABL1->CEBPB\n", "\n", "\n", "\n", "\n", "\n", "JAK2\n", "\n", "JAK2\n", "\n", "\n", "\n", "ABL1->JAK2\n", "\n", "\n", "\n", "\n", "\n", "MECP2\n", "\n", "MECP2\n", "\n", "\n", "\n", "HIPK2->MECP2\n", "\n", "\n", "\n", "\n", "\n", "MAPK1\n", "\n", "MAPK1\n", "\n", "\n", "\n", "JUN\n", "\n", "JUN\n", "\n", "\n", "\n", "MAPK1->JUN\n", "\n", "\n", "\n", "\n", "\n", "RORA\n", "\n", "RORA\n", "\n", "\n", "\n", "MAPK1->RORA\n", "\n", "\n", "\n", "\n", "\n", "\n", "STAT5A\n", "\n", "STAT5A\n", "\n", "\n", "\n", "MAPK1->STAT5A\n", "\n", "\n", "\n", "\n", "\n", "MAFA\n", "\n", "MAFA\n", "\n", "\n", "\n", "MAPK1->MAFA\n", "\n", "\n", "\n", "\n", "\n", "SPI1\n", "\n", "SPI1\n", "\n", "\n", "\n", "JUN->SPI1\n", "\n", "\n", "\n", "\n", "\n", "NFKB2\n", "\n", "NFKB2\n", "\n", "\n", "\n", "RELB\n", "\n", "RELB\n", "\n", "\n", "\n", "NFKB2->RELB\n", "\n", "\n", "\n", "\n", "\n", "TRIP11\n", "\n", "TRIP11\n", "\n", "\n", "\n", "THRA\n", "\n", "THRA\n", "\n", "\n", "\n", "TRIP11->THRA\n", "\n", "\n", "\n", "\n", "\n", "RARG\n", "\n", "RARG\n", "\n", "\n", "\n", "THRA->RARG\n", "\n", "\n", "\n", "\n", "\n", "PHLPP1\n", "\n", "PHLPP1\n", "\n", "\n", "\n", "PRKCA\n", "\n", "PRKCA\n", "\n", "\n", "\n", "PHLPP1->PRKCA\n", "\n", "\n", "\n", "\n", "\n", "\n", "STK4\n", "\n", "STK4\n", "\n", "\n", "\n", "PHLPP1->STK4\n", "\n", "\n", "\n", "\n", "\n", "NFE2L2\n", "\n", "NFE2L2\n", "\n", "\n", "\n", "PRKCA->NFE2L2\n", "\n", "\n", "\n", "\n", "\n", "NR1H4\n", "\n", "NR1H4\n", "\n", "\n", "\n", "PRKCA->NR1H4\n", "\n", "\n", "\n", "\n", "\n", "MYOCD\n", "\n", "MYOCD\n", "\n", "\n", "\n", "SRF\n", "\n", "SRF\n", "\n", "\n", "\n", "MYOCD->SRF\n", "\n", "\n", "\n", "\n", "\n", "TP53->NFKB2\n", "\n", "\n", "\n", "\n", "\n", "RB1->TRIP11\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAPK3\n", "\n", "MAPK3\n", "\n", "\n", "\n", "MAP2K1->MAPK3\n", "\n", "\n", "\n", "\n", "\n", "TBK1\n", "\n", "TBK1\n", "\n", "\n", "\n", "REL\n", "\n", "REL\n", "\n", "\n", "\n", "TBK1->REL\n", "\n", "\n", "\n", "\n", "\n", "IRF3\n", "\n", "IRF3\n", "\n", "\n", "\n", "TBK1->IRF3\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA\n", "\n", "PPP2CA\n", "\n", "\n", "\n", "PPP2CA->ATM\n", "\n", "\n", "\n", "\n", "\n", "\n", "PPP2CA->MAPK1\n", "\n", "\n", "\n", "\n", "\n", "\n", "TRAF2\n", "\n", "TRAF2\n", "\n", "\n", "\n", "PPP2CA->TRAF2\n", "\n", "\n", "\n", "\n", "\n", "\n", "TICAM1\n", "\n", "TICAM1\n", "\n", "\n", "\n", "TRAF2->TICAM1\n", "\n", "\n", "\n", "\n", "\n", "SMURF1\n", "\n", "SMURF1\n", "\n", "\n", "\n", "SMAD6\n", "\n", "SMAD6\n", "\n", "\n", "\n", "SMURF1->SMAD6\n", "\n", "\n", "\n", "\n", "\n", "\n", "SMAD5\n", "\n", "SMAD5\n", "\n", "\n", "\n", "SMURF1->SMAD5\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAP3K7\n", "\n", "MAP3K7\n", "\n", "\n", "\n", "SMAD6->MAP3K7\n", "\n", "\n", "\n", "\n", "\n", "\n", "USF1\n", "\n", "USF1\n", "\n", "\n", "\n", "FOSL1\n", "\n", "FOSL1\n", "\n", "\n", "\n", "USF1->FOSL1\n", "\n", "\n", "\n", "\n", "\n", "\n", "MAPK14\n", "\n", "MAPK14\n", "\n", "\n", "\n", "MEF2A\n", "\n", "MEF2A\n", "\n", "\n", "\n", "MAPK14->MEF2A\n", "\n", "\n", "\n", "\n", "\n", "JUNB\n", "\n", "JUNB\n", "\n", "\n", "\n", "MAPK14->JUNB\n", "\n", "\n", "\n", "\n", "\n", "SMAD3\n", "\n", "SMAD3\n", "\n", "\n", "\n", "MAPK14->SMAD3\n", "\n", "\n", "\n", "\n", "\n", "GSK3B\n", "\n", "GSK3B\n", "\n", "\n", "\n", "MAPK14->GSK3B\n", "\n", "\n", "\n", "\n", "\n", "\n", "DLX5\n", "\n", "DLX5\n", "\n", "\n", "\n", "MAPK14->DLX5\n", "\n", "\n", "\n", "\n", "\n", "SP7\n", "\n", "SP7\n", "\n", "\n", "\n", "MAPK14->SP7\n", "\n", "\n", "\n", "\n", "\n", "CDX2\n", "\n", "CDX2\n", "\n", "\n", "\n", "MAPK14->CDX2\n", "\n", "\n", "\n", "\n", "\n", "\n", "HBP1\n", "\n", "HBP1\n", "\n", "\n", "\n", "MAPK14->HBP1\n", "\n", "\n", "\n", "\n", "\n", "NCOA1\n", "\n", "NCOA1\n", "\n", "\n", "\n", "MAPK3->NCOA1\n", "\n", "\n", "\n", "\n", "\n", "LATS1\n", "\n", "LATS1\n", "\n", "\n", "\n", "STK4->LATS1\n", "\n", "\n", "\n", "\n", "\n", "RELA\n", "\n", "RELA\n", "\n", "\n", "\n", "EGR1\n", "\n", "EGR1\n", "\n", "\n", "\n", "RELA->EGR1\n", "\n", "\n", "\n", "\n", "\n", "PITX1\n", "\n", "PITX1\n", "\n", "\n", "\n", "EGR1->PITX1\n", "\n", "\n", "\n", "\n", "\n", "SMAD4\n", "\n", "SMAD4\n", "\n", "\n", "\n", "SMAD3->SMAD4\n", "\n", "\n", "\n", "\n", "\n", "NKX2-1\n", "\n", "NKX2-1\n", "\n", "\n", "\n", "SMAD3->NKX2-1\n", "\n", "\n", "\n", "\n", "\n", "\n", "GSK3B->CDKN1A\n", "\n", "\n", "\n", "\n", "\n", "\n", "GSK3B->PHLPP1\n", "\n", "\n", "\n", "\n", "\n", "\n", "GSK3B->MYOCD\n", "\n", "\n", "\n", "\n", "\n", "\n", "MUC1\n", "\n", "MUC1\n", "\n", "\n", "\n", "GSK3B->MUC1\n", "\n", "\n", "\n", "\n", "\n", "\n", "SFPQ\n", "\n", "SFPQ\n", "\n", "\n", "\n", "GSK3B->SFPQ\n", "\n", "\n", "\n", "\n", "\n", "\n", "NFKB1\n", "\n", "NFKB1\n", "\n", "\n", "\n", "GSK3B->NFKB1\n", "\n", "\n", "\n", "\n", "\n", "CIITA\n", "\n", "CIITA\n", "\n", "\n", "\n", "GSK3B->CIITA\n", "\n", "\n", "\n", "\n", "\n", "CEBPA\n", "\n", "CEBPA\n", "\n", "\n", "\n", "GSK3B->CEBPA\n", "\n", "\n", "\n", "\n", "\n", "KLF4\n", "\n", "KLF4\n", "\n", "\n", "\n", "MUC1->KLF4\n", "\n", "\n", "\n", "\n", "\n", "ASXL1\n", "\n", "ASXL1\n", "\n", "\n", "\n", "NCOA1->ASXL1\n", "\n", "\n", "\n", "\n", "\n", "MSX2\n", "\n", "MSX2\n", "\n", "\n", "\n", "DLX5->MSX2\n", "\n", "\n", "\n", "\n", "\n", "\n", "EP300->RELA\n", "\n", "\n", "\n", "\n", "\n", "SMAD7\n", "\n", "SMAD7\n", "\n", "\n", "\n", "EP300->SMAD7\n", "\n", "\n", "\n", "\n", "\n", "TICAM1->TBK1\n", "\n", "\n", "\n", "\n", "\n", "TAL1\n", "\n", "TAL1\n", "\n", "\n", "\n", "SPI1->TAL1\n", "\n", "\n", "\n", "\n", "\n", "\n", "STAT1\n", "\n", "STAT1\n", "\n", "\n", "\n", "IRF2\n", "\n", "IRF2\n", "\n", "\n", "\n", "STAT1->IRF2\n", "\n", "\n", "\n", "\n", "\n", "TGFB1\n", "\n", "TGFB1\n", "\n", "\n", "\n", "PPP2R2A\n", "\n", "PPP2R2A\n", "\n", "\n", "\n", "TGFB1->PPP2R2A\n", "\n", "\n", "\n", "\n", "\n", "PPP2R2A->PPP2CA\n", "\n", "\n", "\n", "\n", "\n", "\n", "CDON\n", "\n", "CDON\n", "\n", "\n", "\n", "CDON->MAPK14\n", "\n", "\n", "\n", "\n", "\n", "VHL\n", "\n", "VHL\n", "\n", "\n", "\n", "CHEK2->VHL\n", "\n", "\n", "\n", "\n", "\n", "HIF3A\n", "\n", "HIF3A\n", "\n", "\n", "\n", "PRKN->HIF3A\n", "\n", "\n", "\n", "\n", "\n", "\n", "NFKBIB\n", "\n", "NFKBIB\n", "\n", "\n", "\n", "MAP3K7->NFKBIB\n", "\n", "\n", "\n", "\n", "\n", "\n", "JAK2->STAT1\n", "\n", "\n", "\n", "\n", "\n", "CUL1_RBX1_SKP1->SMURF1\n", "\n", "\n", "\n", "\n", "\n", "\n", "MEIS2\n", "\n", "MEIS2\n", "\n", "\n", "\n", "KLF4->MEIS2\n", "\n", "\n", "\n", "\n", "\n", "INHBA\n", "\n", "INHBA\n", "\n", "\n", "\n", "ACVR2B\n", "\n", "ACVR2B\n", "\n", "\n", "\n", "INHBA->ACVR2B\n", "\n", "\n", "\n", "\n", "\n", "SMAD2\n", "\n", "SMAD2\n", "\n", "\n", "\n", "ACVR2B->SMAD2\n", "\n", "\n", "\n", "\n", "\n", "RXRB\n", "\n", "RXRB\n", "\n", "\n", "\n", "RARG->RXRB\n", "\n", "\n", "\n", "\n", "\n", "CEBPA->USF1\n", "\n", "\n", "\n", "\n", "\n", "POU3F1\n", "\n", "POU3F1\n", "\n", "\n", "\n", "HMGA1->POU3F1\n", "\n", "\n", "\n", "\n", "\n", "CDH2\n", "\n", "CDH2\n", "\n", "\n", "\n", "CDH2->CDON\n", "\n", "\n", "\n", "\n", "\n", "WWTR1\n", "\n", "WWTR1\n", "\n", "\n", "\n", "LATS1->WWTR1\n", "\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 143, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G_sol = Gp.edge_subgraph(np.flatnonzero(P.expr.edge_values.value))\n", "values = P.expr.vertex_values.value\n", "vertex_values = {v: values[i] for i, v in enumerate(Gp.V)}\n", "vertex_sol_values = [vertex_values[v] for v in G_sol.V]\n", "G_sol.plot(\n", " custom_vertex_attr=cn.pl.create_graphviz_vertex_attributes(\n", " G_sol.V, vertex_sol_values\n", " )\n", ")" ] }, { "cell_type": "code", "execution_count": 144, "id": "aa10a36a-de26-467a-9cdd-2b4392b504c8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10.373496770858765\n", "88.0\n", "-245.81810302737185\n" ] } ], "source": [ "for o in P.objectives:\n", " print(o.value)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.15" }, "mystnb": { "execution_mode": "off" } }, "nbformat": 4, "nbformat_minor": 5 }