{ "cells": [ { "cell_type": "markdown", "id": "265129ef-a7d8-44b2-a466-e93925f11860", "metadata": {}, "source": [ "# Higher-order interaction test" ] }, { "cell_type": "code", "execution_count": 1, "id": "0e520279-ba5f-4872-a38d-27487ed26c56", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-06-10 15:32:45.740168: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: SSE4.1 SSE4.2 AVX AVX2 FMA\n", "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" ] } ], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", "from creme import creme\n", "from creme import utils\n", "from creme import custom_model\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import seaborn as sns\n", "import shuffle" ] }, { "cell_type": "markdown", "id": "f3083d60-240d-4c05-afc2-02bded899c81", "metadata": {}, "source": [ "Load Enformer and example sequences" ] }, { "cell_type": "code", "execution_count": 2, "id": "5e3979fd-a872-41fa-afc4-109ee830b141", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-06-10 15:32:47.349063: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: SSE4.1 SSE4.2 AVX AVX2 FMA\n", "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", "2024-06-10 15:32:48.819795: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1613] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 67919 MB memory: -> device: 0, name: NVIDIA A100 80GB PCIe, pci bus id: 0000:85:00.0, compute capability: 8.0\n" ] } ], "source": [ "data_dir = '../../../data'\n", "track_index = [5111]\n", "# TSS bin indeces\n", "bins = [447, 448]\n", "model = custom_model.Enformer(track_index=track_index, bin_index=bins)" ] }, { "cell_type": "code", "execution_count": 3, "id": "5b84bb66-1c29-448f-b78f-3ec690e39d22", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-06-10 15:32:53.943122: I tensorflow/compiler/xla/stream_executor/cuda/cuda_blas.cc:630] TensorFloat-32 will be used for the matrix multiplication. This will only be logged once.\n", "2024-06-10 15:32:54.196676: I tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:428] Loaded cuDNN version 8401\n" ] } ], "source": [ "fasta_path = f'{data_dir}/GRCh38.primary_assembly.genome.fa'\n", "seq_parser = utils.SequenceParser(fasta_path)\n", "\n", "gene = 'CLUAP1_chr16_3501011_+'\n", "\n", "gene_name, chrom, start, strand = gene.split('_')\n", "wt_seq = seq_parser.extract_seq_centered(chrom, int(start), strand, model.seq_length)\n", "wt = model.predict(wt_seq)[0,:,0].mean()" ] }, { "cell_type": "markdown", "id": "727193db-efab-48b9-9fe8-7fd4ed36b89a", "metadata": {}, "source": [ "**Higher-order interaction test**\n", "\n", "\n", "In this example we will comprehensively analyze the context of the GATA2 gene using a greedy search for necessary tiles.\n", "\n", "To run the test we need:\n", "- a loaded model\n", "- a list of tile coordinates to test\n", "- optimization - choice between [np.argmin, np.argmax] which determines if we will search for enhancers or silencers\n", "- num_shuffle - number of shuffled\n", "- number of iterations or tiles to shuffle\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "fa851a1f-f266-4142-821b-333d08aa684b", "metadata": {}, "outputs": [], "source": [ "\n", "perturb_window = 5000\n", "N_shuffles = 10\n", "tss_tile, cre_tiles = utils.set_tile_range(model.seq_length, perturb_window)\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "a2913af0-705d-46c3-8b75-6389b2344cdf", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "38" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(cre_tiles)" ] }, { "cell_type": "markdown", "id": "b0193ee8-b6d3-4e89-ad06-7448ae91ef62", "metadata": {}, "source": [ "CLUAP1 gene context" ] }, { "cell_type": "code", "execution_count": 6, "id": "52086ff5-48a3-45b2-99ad-818cd054e529", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " 0%| | 0/3 [00:00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(1, len(result_summary.keys()), figsize=[15, 4], sharey=True)\n", "shuffled_tiles = []\n", "for i in result_summary.keys():\n", " ax = axes[i]\n", " print(f'Number of Tiles shuffled in iteration {i+1}: {result_summary[i][\"preds\"].shape[0]}')\n", " mean_preds = result_summary[i]['preds'].mean(axis=-1).copy()\n", " for s in shuffled_tiles:\n", " mean_preds = np.insert(mean_preds, s, np.nan)\n", " min_i = np.nanargmin(mean_preds)\n", " shuffled_tiles.append(min_i)\n", " \n", " sns.scatterplot(x=range(38), y=mean_preds/wt, color='purple', ax=ax)\n", " ax.set_xlabel('Tile number')\n", " axes[0].set_ylabel('Normalized prediction')\n", " assert np.min(result_summary[i]['preds'].mean(axis=-1)) == result_summary[i]['selected_mean_pred']\n", " sns.scatterplot(x=[min_i], y=[mean_preds[min_i]/wt], s=80, facecolors='none', edgecolors='k', linewidth=2, ax=ax)\n", " ax.annotate(f'selected tile #{min_i}', [min_i+1.5, mean_preds[min_i]/wt]);\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "id": "79ed4275-35f5-43d2-958f-1ff172ae3593", "metadata": {}, "source": [ "Now let's re-create the sequences in each iteration by following the tile order in 'selected tile' to shuffle putative CRE tiles, then obtain predictions and plot those versus the WT." ] }, { "cell_type": "code", "execution_count": 9, "id": "ff14f96b-163e-4c18-838b-627d867bc494", "metadata": {}, "outputs": [], "source": [ "model.bin_index = None # switch to saving all track not just TSS bins\n", "wt_track = model.predict(wt_seq)[0,:,0]" ] }, { "cell_type": "code", "execution_count": 10, "id": "ca44937c-c56b-4217-9c3f-5f7616ee5316", "metadata": {}, "outputs": [], "source": [ "\n", "shuffled_tile_seq = wt_seq.copy()\n", "per_iteration_preds = []\n", "for i in result_summary.keys():\n", " preds = []\n", " tile_start, tile_end = result_summary[i]['selected_tile']\n", " #shuffle this\n", " for j in range(10): # number of shuffles\n", " background_seq = shuffle.dinuc_shuffle(wt_seq)\n", " shuffled_tile_seq[tile_start: tile_end] = background_seq[tile_start: tile_end]\n", " preds.append(model.predict(shuffled_tile_seq)[0,:,0])\n", " per_iteration_preds.append(preds)" ] }, { "cell_type": "code", "execution_count": 11, "id": "a40848d1-4685-4a7b-8ccd-0ba9f5c36b33", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax=utils.plot_track([wt_track], label='WT', color='k', alpha=1)\n", "colors = ['purple', 'cyan', 'orange']\n", "for i, preds in enumerate(per_iteration_preds):\n", " \n", " utils.plot_track([np.array(preds).mean(axis=0)], zoom=[420, 480], label=f'iteration {i+1}', ax=ax, color=colors[i])\n", "ax.set_ylim(0,100)\n", "plt.legend();" ] }, { "cell_type": "code", "execution_count": null, "id": "e3b907e6-ac4a-4684-9c0b-45c8f92c3449", "metadata": {}, "outputs": [], "source": [] } ], "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.9.16" } }, "nbformat": 4, "nbformat_minor": 5 }