{ "cells": [ { "cell_type": "code", "execution_count": 2, "id": "083c4136", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "from scipy import stats, sparse\n", "import bottleneck\n", "from scipy.stats import mannwhitneyu" ] }, { "cell_type": "code", "execution_count": 3, "id": "ec09568c", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "from scipy import stats, sparse\n", "import bottleneck\n", "def run_egad(go, nw, **kwargs):\n", " \"\"\"EGAD running function\n", " \n", " Wrapper to lower level functions for EGAD\n", "\n", " EGAD measures modularity of gene lists in co-expression networks. \n", "\n", " This was translated from the MATLAB version, which does tiled Cross Validation\n", " \n", " The useful kwargs are:\n", " int - nFold : Number of CV folds to do, default is 3, \n", " int - {min,max}_count : limits for number of terms in each gene list, these are exclusive values\n", "\n", "\n", " Arguments:\n", " go {pd.DataFrame} -- dataframe of genes x terms of values [0,1], where 1 is included in gene lists\n", " nw {pd.DataFrame} -- dataframe of co-expression network, genes x genes\n", " **kwargs \n", " \n", " Returns:\n", " pd.DataFrame -- dataframe of terms x metrics where the metrics are \n", " ['AUC', 'AVG_NODE_DEGREE', 'DEGREE_NULL_AUC', 'P_Value']\n", " \"\"\"\n", " assert nw.shape[0] == nw.shape[1] , 'Network is not square'\n", " #print(nw.index)\n", " #nw.columns = nw.columns.astype(int)\n", " #print(nw.columns.astype(int))\n", " assert np.all(nw.index == nw.columns) , 'Network index and columns are not in the same order'\n", "\n", " #nw_mask = nw.isna().sum(axis=1) != nw.shape[1]\n", " #nw = nw.loc[nw_mask, nw_mask].astype('float')\n", " #np.fill_diagonal(nw.values, 1)\n", " return _runNV(go, nw, **kwargs)\n", "\n", "def _runNV(go, nw, nFold=3, min_count=3, max_count=1000000):\n", "\n", " #Make sure genes are same in go and nw\n", " #go.index = go.index.map(str) \n", " #nw.index = nw.index.map(str)\n", " #nw.index = nw.index.str.replace('_', '')\n", " #go.index = go.index.str.replace('_', '')\n", " #print (nw)\n", " genes_intersect = go.index.intersection(nw.index)\n", "\n", "\n", " #print (genes_intersect)\n", " go = go.loc[genes_intersect, :]\n", " nw = nw.loc[genes_intersect, genes_intersect]\n", " #print (go)\n", " print (nw.shape)\n", " print (go.shape)\n", " sparsity = 1.0 - np.count_nonzero(go) / go.size\n", " print (sparsity)\n", " sparsity = 1.0 - np.count_nonzero(nw) / nw.size\n", " print (sparsity)\n", " #print(nw\n", " #print(go\n", " nw_mask = nw.isna().sum(axis=1) != nw.shape[1]\n", " nw = nw.loc[nw_mask, nw_mask].astype('float')\n", " np.fill_diagonal(nw.values, 1)\n", " #Make sure there aren't duplicates\n", " duplicates = nw.index.duplicated(keep='first')\n", " nw = nw.loc[~duplicates, ~duplicates]\n", "\n", " go = go.loc[:, (go.sum(axis=0) > min_count) & (go.sum(axis=0) < max_count)]\n", " go = go.loc[~go.index.duplicated(keep='first'), :]\n", " #print(go)\n", "\n", " roc = _new_egad(go.values, nw.values, nFold)\n", "\n", " col_names = ['AUC', 'AVG_NODE_DEGREE', 'DEGREE_NULL_AUC', 'P_Value']\n", " #Put output in dataframe\n", " return pd.DataFrame(dict(zip(col_names, roc)), index=go.columns), go\n", "\n", "def _new_egad(go, nw, nFold):\n", "\n", " #Build Cross validated Positive\n", " x, y = np.where(go)\n", " #print(x, y)\n", " cvgo = {}\n", " for i in np.arange(nFold):\n", " a = x[i::nFold]\n", " #print(a)\n", " b = y[i::nFold]\n", " dat = np.ones_like(a)\n", " mask = sparse.coo_matrix((dat, (a, b)), shape=go.shape)\n", " cvgo[i] = go - mask.toarray()\n", "\n", " CVgo = np.concatenate(list(cvgo.values()), axis=1)\n", " #print(CVgo)\n", "\n", " sumin = np.matmul(nw.T, CVgo)\n", "\n", " degree = np.sum(nw, axis=0)\n", " #print(degree)\n", " #print(degree[:, None])\n", "\n", " predicts = sumin / degree[:, None]\n", " #print(predicts)\n", "\n", " np.place(predicts, CVgo > 0, np.nan)\n", "\n", " #print(predicts)\n", "\n", " #Calculate ranks of positives\n", " rank_abs = lambda x: stats.rankdata(np.abs(x))\n", " predicts2 = np.apply_along_axis(rank_abs, 0, predicts)\n", " #print(predicts2)\n", "\n", " #Masking Nans that were ranked (how tiedrank works in matlab)\n", " predicts2[np.isnan(predicts)] = np.nan\n", " #print(predicts2)\n", "\n", " filtering = np.tile(go, nFold)\n", " #print(filtering)\n", "\n", " #negatives :filtering == 0\n", " #Sets Ranks of negatives to 0\n", " np.place(predicts2, filtering == 0, 0)\n", "\n", " #Sum of ranks for each prediction\n", " p = bottleneck.nansum(predicts2, axis=0)\n", " n_p = np.sum(filtering, axis=0) - np.sum(CVgo, axis=0)\n", "\n", " #Number of negatives\n", " #Number of GO terms - number of postiive\n", " n_n = filtering.shape[0] - np.sum(filtering, axis=0)\n", "\n", " roc = (p / n_p - (n_p + 1) / 2) / n_n\n", " U = roc * n_p * n_n\n", " Z = (np.abs(U - (n_p * n_n / 2))) / np.sqrt(n_p * n_n *\n", " (n_p + n_n + 1) / 12)\n", " roc = roc.reshape(nFold, go.shape[1])\n", " Z = Z.reshape(nFold, go.shape[1])\n", " #Stouffer Z method\n", " Z = bottleneck.nansum(Z, axis=0) / np.sqrt(nFold)\n", " #Calc ROC of Neighbor Voting\n", " roc = bottleneck.nanmean(roc, axis=0)\n", " P = stats.norm.sf(Z)\n", "\n", " #Average degree for nodes in each go term\n", " avg_degree = degree.dot(go) / np.sum(go, axis=0)\n", "\n", " #Calc null auc for degree\n", " ranks = np.tile(stats.rankdata(degree), (go.shape[1], 1)).T\n", "\n", " np.place(ranks, go == 0, 0)\n", "\n", " n_p = bottleneck.nansum(go, axis=0)\n", " nn = go.shape[0] - n_p\n", " p = bottleneck.nansum(ranks, axis=0)\n", "\n", " roc_null = (p / n_p - ((n_p + 1) / 2)) / nn\n", " #print(roc)\n", " return roc, avg_degree, roc_null, P" ] }, { "cell_type": "code", "execution_count": 4, "id": "e5a7db6b", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:numexpr.utils:Note: detected 192 virtual cores but NumExpr set to maximum of 64, check \"NUMEXPR_MAX_THREADS\" environment variable.\n", "INFO:numexpr.utils:Note: NumExpr detected 192 cores but \"NUMEXPR_MAX_THREADS\" not set, so enforcing safe limit of 8.\n", "INFO:numexpr.utils:NumExpr defaulting to 8 threads.\n" ] } ], "source": [ "from hicmatrix import HiCMatrix as hm\n", "from hicmatrix.lib import MatrixFileHandler" ] }, { "cell_type": "code", "execution_count": 5, "id": "afa94711", "metadata": {}, "outputs": [], "source": [ "exp_file_path=f'/grid/gillis/data/lohia/hi_c_data_processing/software/CoCoCoNet/networks/human_prioAggNet.h5'\n", "\n", "jac_exp = hm.hiCMatrix(exp_file_path)\n", "all_genes = [x[3].decode() for x in jac_exp.cut_intervals]\n", "df_exp_corr = pd.DataFrame(jac_exp.matrix.toarray() , index=all_genes, columns = all_genes)" ] }, { "cell_type": "code", "execution_count": 6, "id": "2192613c", "metadata": {}, "outputs": [], "source": [ "resolution_human = 1000\n", "species = \"human\"\n", "SRP_name = \"aggregates\"\n", "resolution = \"1kbp_raw\"\n", "\n", "exp_file_path=f'/grid/gillis/data/lohia/hi_c_data_processing/data_{species}/{SRP_name}/{resolution}/max/spr_cre/hic_gene_corr_inter_excluding_intra_chrom_pairs_hicexp.h5'\n", "\n", "jac_exp = hm.hiCMatrix(exp_file_path)\n", "\n", "all_genes = [x[3].decode() for x in jac_exp.cut_intervals]\n", "\n", "f_m = jac_exp.matrix.toarray()\n", "f_m = f_m + abs(f_m.min())\n", "np.fill_diagonal(f_m, 1)\n", "df_hic_corr = pd.DataFrame(f_m, index=all_genes, columns = all_genes)\n", "\n" ] }, { "cell_type": "code", "execution_count": 112, "id": "f69c4c2e", "metadata": {}, "outputs": [], "source": [ "import pandas as pd, seaborn as sns\n", "import scipy.spatial as sp, scipy.cluster.hierarchy as hc\n", "from sklearn.datasets import load_iris\n", "sns.set(font=\"monospace\")\n", "\n", "\n", "DF_dism = df_hic_corr.max().max() - df_hic_corr # distance matrix\n", "DF_dism = DF_dism.to_numpy()\n", "np.fill_diagonal(DF_dism, 0)\n", "linkage_gene = hc.linkage(sp.distance.squareform(DF_dism), method='average')" ] }, { "cell_type": "code", "execution_count": 14, "id": "bc90acb5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "DF_dism.min()" ] }, { "cell_type": "code", "execution_count": 113, "id": "1c1b8260", "metadata": {}, "outputs": [], "source": [ "from scipy.cluster.hierarchy import fcluster, linkage\n", "cluster_labels = fcluster(linkage_gene, 0.7, criterion='distance')" ] }, { "cell_type": "code", "execution_count": 114, "id": "6c7690cb", "metadata": {}, "outputs": [], "source": [ "from collections import Counter\n", "z = list(cluster_labels)\n", "z = Counter(z)" ] }, { "cell_type": "code", "execution_count": 115, "id": "941ac34b", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/grid/gillis/home/lohia/.conda/envs/hicexplorer/lib/python3.8/site-packages/seaborn/_decorators.py:36: FutureWarning: Pass the following variable as a keyword arg: x. From version 0.12, the only valid positional argument will be `data`, and passing other arguments without an explicit keyword will result in an error or misinterpretation.\n", " warnings.warn(\n" ] }, { "data": { "text/plain": [ "(0.0, 30.0)" ] }, "execution_count": 115, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import seaborn as sns\n", "ax=sns.countplot(list(z.values()))\n", "ax.set_ylim([0,30])" ] }, { "cell_type": "code", "execution_count": 12, "id": "a2fdb9fd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "446 21400\n", "389 3\n", "102 28\n", "150 12\n", "247 5\n", "404 8\n", "285 5\n", "430 7\n", "326 4\n", "426 279\n", "400 251\n", "441 7\n", "206 9\n", "232 22\n", "238 35\n", "313 75\n", "393 10\n", "370 5\n", "51 3\n", "369 7\n", "421 11\n", "28 2\n", "144 4\n", "168 29\n", "129 6\n", "207 4\n", "434 22\n", "333 14\n", "65 4\n", "310 9\n", "147 4\n", "160 3\n", "127 11\n", "284 5\n", "314 296\n", "417 21\n", "414 5\n", "331 2\n", "114 2\n", "427 19\n", "154 3\n", "149 3\n", "385 4\n", "342 29\n", "309 15\n", "397 61\n", "408 4\n", "234 2\n", "362 47\n", "382 10\n", "88 3\n", "304 5\n", "236 2\n", "363 4\n", "334 48\n", "296 3\n", "391 9\n", "108 3\n", "415 10\n", "218 2\n", "336 2\n", "307 12\n", "143 2\n", "356 2\n", "272 3\n", "381 4\n", "311 5\n", "151 9\n", "233 10\n", "195 3\n", "439 7\n", "258 2\n", "86 4\n", "476 3\n", "178 2\n", "75 20\n", "61 2\n", "407 10\n", "100 3\n", "125 3\n", "91 6\n", "354 4\n", "47 4\n", "187 4\n", "478 3\n", "395 24\n", "375 9\n", "371 3\n", "235 2\n", "433 7\n", "152 7\n", "76 3\n", "240 2\n", "120 2\n", "183 5\n", "352 5\n", "229 13\n", "372 2\n", "396 4\n", "239 41\n", "295 4\n", "403 2\n", "167 4\n", "387 19\n", "401 8\n", "444 3\n", "6 2\n", "241 2\n", "208 6\n", "297 3\n", "45 2\n", "380 3\n", "77 4\n", "423 3\n", "228 4\n", "53 3\n", "377 2\n", "361 14\n", "209 8\n", "194 18\n", "90 2\n", "477 13\n", "355 2\n", "263 4\n", "60 4\n", "418 3\n", "373 7\n", "301 2\n", "346 2\n", "237 2\n", "475 4\n", "329 2\n", "443 3\n", "163 3\n", "109 3\n", "200 2\n", "262 31\n", "416 2\n", "292 4\n", "186 2\n", "327 17\n", "213 4\n", "244 5\n", "322 8\n", "141 8\n", "82 3\n", "445 5\n", "148 7\n", "411 7\n", "164 3\n", "74 7\n", "260 4\n", "40 2\n", "315 5\n", "428 8\n", "323 2\n", "72 4\n", "87 2\n", "227 6\n", "34 3\n", "338 8\n", "256 4\n", "278 7\n", "176 2\n", "283 2\n", "2 2\n", "388 2\n", "274 2\n", "299 3\n", "312 5\n", "406 11\n", "308 2\n", "169 2\n", "376 4\n", "412 4\n", "124 2\n", "435 3\n", "345 5\n", "383 3\n", "379 2\n", "291 4\n", "33 3\n", "81 2\n", "349 2\n", "359 6\n", "350 3\n", "303 2\n", "158 2\n", "399 9\n", "115 6\n", "261 3\n", "182 2\n", "360 3\n", "405 9\n", "84 2\n", "212 9\n", "420 7\n", "153 2\n", "351 4\n", "135 2\n", "112 5\n", "211 4\n", "68 2\n", "442 4\n", "215 2\n", "302 4\n", "105 2\n", "96 4\n", "341 4\n", "386 2\n", "137 4\n", "73 3\n", "279 3\n", "293 2\n", "273 2\n", "171 2\n", "92 2\n", "366 2\n", "437 5\n", "19 7\n", "20 15\n", "18 5\n", "330 3\n", "190 3\n", "80 2\n", "374 3\n", "113 5\n", "332 2\n", "166 3\n", "275 2\n", "78 3\n", "10 2\n", "54 2\n", "134 2\n", "265 2\n", "431 4\n", "110 6\n", "440 6\n", "368 2\n", "155 3\n", "324 4\n", "50 2\n", "425 3\n", "394 3\n", "390 2\n", "429 2\n", "432 3\n", "128 2\n", "259 4\n", "225 2\n", "95 4\n", "193 5\n", "203 2\n", "145 3\n", "257 2\n", "202 6\n", "214 2\n", "106 3\n", "438 4\n", "424 2\n", "42 2\n", "320 3\n", "306 3\n", "358 4\n", "305 3\n", "321 3\n", "287 7\n", "353 2\n", "59 2\n", "204 5\n", "94 3\n", "222 3\n", "217 5\n", "319 2\n", "121 2\n", "119 2\n", "286 3\n", "436 4\n", "140 2\n", "367 3\n", "97 2\n", "66 2\n", "344 2\n", "161 4\n", "89 5\n", "282 4\n", "201 3\n", "21 4\n", "339 2\n", "184 3\n", "328 3\n", "384 2\n", "175 2\n", "146 4\n", "231 2\n", "357 3\n", "177 2\n", "422 2\n", "318 2\n", "271 2\n", "290 2\n", "343 3\n", "101 2\n", "300 3\n", "243 2\n", "298 2\n", "27 3\n", "104 2\n", "162 2\n", "107 4\n", "419 2\n", "210 2\n", "22 2\n", "276 2\n", "69 2\n", "192 3\n", "347 2\n", "280 3\n", "317 2\n", "14 2\n", "70 2\n", "270 2\n", "248 4\n", "15 2\n", "246 2\n", "99 4\n", "64 6\n", "365 2\n", "410 3\n", "191 2\n", "392 5\n", "348 2\n", "413 3\n", "71 2\n", "216 2\n", "277 3\n", "398 3\n", "32 2\n", "11 2\n", "173 2\n", "266 2\n", "281 4\n", "409 7\n", "79 2\n", "111 2\n", "63 3\n", "1 2\n", "196 3\n", "52 2\n", "85 2\n" ] } ], "source": [ "df_exp_clust = pd.DataFrame(cluster_labels , index=df_exp_corr.index.tolist())\n", "\n", "df_exp_clust['label'] = df_exp_clust[0]\n", "\n", "for clust, clust_len in zip(z.keys(), z.values()):\n", " if clust_len >= 2:\n", " \n", " print (clust, clust_len)\n", " df_exp_clust[clust] = [1 if x == clust else 0 for x in df_exp_clust['label'].tolist()]" ] }, { "cell_type": "code", "execution_count": 13, "id": "d477b046", "metadata": {}, "outputs": [], "source": [ "df_exp_clust = df_exp_clust.drop(['label', 0], axis=1)" ] }, { "cell_type": "code", "execution_count": 51, "id": "a133b58c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(23465, 23465)\n", "(23465, 254)\n", "0.9995255121130314\n", "0.0\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ ":133: RuntimeWarning: invalid value encountered in true_divide\n", " roc = (p / n_p - (n_p + 1) / 2) / n_n\n", "/grid/gillis/home/lohia/.conda/envs/hicexplorer/lib/python3.8/site-packages/seaborn/_decorators.py:36: FutureWarning: Pass the following variables as keyword args: x, y. From version 0.12, the only valid positional argument will be `data`, and passing other arguments without an explicit keyword will result in an error or misinterpretation.\n", " warnings.warn(\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df_2d_jac, go_chrom = run_egad(df_exp_clust, df_exp_corr)\n", "import matplotlib.pyplot as plt\n", "sns.scatterplot(df_2d_jac['AUC'], df_2d_jac['DEGREE_NULL_AUC'])\n", "plt.plot([0, 1], [0, 1], c='black')\n", "plt.axvline(x=df_2d_jac['AUC'].mean(),c='black',ls='--')\n", "plt.axhline(y=df_2d_jac['DEGREE_NULL_AUC'].mean(), c='black', ls='--')" ] }, { "cell_type": "code", "execution_count": null, "id": "5687a6fd", "metadata": {}, "outputs": [], "source": [ "df_2d_jac, go_chrom = run_egad(df_exp_clust, df_exp_corr)\n", "import matplotlib.pyplot as plt\n", "sns.scatterplot(df_2d_jac['AUC'], df_2d_jac['DEGREE_NULL_AUC'])\n", "plt.plot([0, 1], [0, 1], c='black')\n", "plt.axvline(x=df_2d_jac['AUC'].mean(),c='black',ls='--')\n", "plt.axhline(y=df_2d_jac['DEGREE_NULL_AUC'].mean(), c='black', ls='--')" ] }, { "cell_type": "code", "execution_count": 15, "id": "a8d08a27", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(23465, 23465)\n", "(23465, 350)\n", "0.9971599038081033\n", "3.632359968364085e-09\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ ":133: RuntimeWarning: invalid value encountered in true_divide\n", " roc = (p / n_p - (n_p + 1) / 2) / n_n\n", "/grid/gillis/home/lohia/.conda/envs/hicexplorer/lib/python3.8/site-packages/seaborn/_decorators.py:36: FutureWarning: Pass the following variables as keyword args: x, y. From version 0.12, the only valid positional argument will be `data`, and passing other arguments without an explicit keyword will result in an error or misinterpretation.\n", " warnings.warn(\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df_2d_jac, go_chrom = run_egad(df_exp_clust, df_hic_corr)\n", "import matplotlib.pyplot as plt\n", "sns.scatterplot(df_2d_jac['AUC'], df_2d_jac['DEGREE_NULL_AUC'])\n", "plt.plot([0, 1], [0, 1], c='black')\n", "plt.axvline(x=df_2d_jac['AUC'].mean(),c='black',ls='--')\n", "plt.axhline(y=df_2d_jac['DEGREE_NULL_AUC'].mean(), c='black', ls='--')" ] }, { "cell_type": "code", "execution_count": 17, "id": "c90aeb2f", "metadata": {}, "outputs": [], "source": [ "from hicmatrix import HiCMatrix as hm\n", "from hicmatrix.lib import MatrixFileHandler\n", "import pandas as pd\n", "import numpy as np\n", "import seaborn as sns\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "sns.set(style='white', font_scale=1.25)\n", "plt.rc(\"axes.spines\", top=False, right=False)\n", "plt.rc('xtick', bottom=True)\n", "plt.rc('ytick', left=True)\n", "import joypy\n", "\n" ] }, { "cell_type": "code", "execution_count": 18, "id": "ece5ba96", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from scipy import stats\n", "import statsmodels.api as sm\n", "import pandas as pd\n", "\n", "def fishers_exact(TP, TN, FP, FN):\n", " \"\"\"Fishers exact for enrichment\n", "\t\n", "\tInput are values from a contigency tables\n", "\t\n", "\tArguments:\n", "\t\tTP {int} -- Size of overlap\n", "\t\tTN {int} -- Size of both negative\n", "\t\tFP {int} -- Size of False Positive (Selected but not in query)\n", "\t\tFN {int} -- Size of False Negative (Not selected but in query)\n", "\t\"\"\"\n", " M = TP + TN + FP + FN\n", " n = TP + FN\n", " N = TP + FP\n", " #Have to use 1 - cdf to get correct density\n", " #We want selected P(TP or more)\n", " x = TP - 1\n", " return 1 - stats.hypergeom.cdf(x, M, n, N)\n", "\n", "def enrichment(markerSet, referenceTerm):\n", " \"\"\"Enrichment of a single gene set using Fisher's Exact\n", "\t\n", "\tComputes Fisher's Exact for a given marker set and reference term\n", "\t\n", "\tArguments:\n", "\t\tmarkerSet {[type]} -- binary vector of gene set\n", "\t\treferenceTerm {[type]} -- binary vector of referenceTerm\n", "\t\"\"\"\n", "\n", " assert markerSet.shape[0] == referenceTerm.shape[\n", " 0], 'Must have same list of all genes'\n", " TP = np.dot(markerSet, referenceTerm)\n", " FN = referenceTerm.sum() - TP\n", " FP = markerSet.sum() - TP\n", " TN = markerSet.shape[0] - (TP + FN + FP)\n", " return fishers_exact(TP, TN, FP, FN)\n", "\n", "vector_exact = np.vectorize(\n", " lambda TP, TN, FP, FN: fishers_exact(TP, TN, FP, FN))\n", "\n", "def enrichment_multi_reference(markers, reference):\n", " \"\"\"Compute Enrichment between a list of markers and a list of references\n", "\t\n", "\tComputer enrichment, where markers is a list of cell-type markers and \n", "\tthe reference is all of GO\n", "\t\n", "\tArguments:\n", "\t\tmarkers {np.array} -- Numpy 1-D array of float (0,1) for gene set membership\n", "\t\treference {[type]} -- Numpy 2-D array of genes x terms of float (0,1) for term membership\n", "\t\n", "\tReturns:\n", "\t\tnp.array -- 1-D array of BH adjusted P values\n", "\t\"\"\"\n", " assert markers.shape[0] == reference.shape[\n", " 0], 'Must have same list of all genes'\n", "\n", " TP = markers @ reference\n", " FN = reference.sum(axis=0) - TP\n", " FP = np.sum(markers, axis=0) - TP\n", " TN = markers.shape[0] - (TP + FP + FN)\n", " p_val = vector_exact(TP, TN, FP, FN)\n", " p_adj = sm.stats.multipletests(p_val, method='fdr_bh')[1]\n", " return p_adj\n", "\n", "def enrichment_df(markers_series, referenece_df):\n", " \"\"\"Enrichment of Markers and Reference Network\n", " \n", " Computes enrichment of Markers and Reference Network from DataFrames\n", " \n", " Arguments:\n", " markers_series {pd.Series} -- Series of Marker Membership\n", " referenece_df {pd.DataFrame} -- DataFrame of Reference Gene List Memebership\n", " \n", " Returns:\n", " [type] -- [description]\n", " \"\"\"\n", " shared_index = markers_series.index.intersection(referenece_df.index)\n", " padj = enrichment_multi_reference(\n", " markers_series.loc[shared_index].values.astype(float),\n", " referenece_df.loc[shared_index].values.astype(float))\n", " return pd.Series(padj, index=referenece_df.columns)\n", "\n", "def enrich_multi_markers(markers_df, referenece_df):\n", " \"\"\"Enrihcment of Multiple Markers Lists\n", " \n", " Apply's enrichment test to each marker list in marker df\n", " (Could Make a faster version if I fully vectorize the contingency table calculation)\n", " Arguments:\n", " markers_df {pd.DataFrame} -- genes x markers dataframe of membership\n", " referenece_df {pd.DataFrame} -- genes x terms dataframe of membership\n", " \n", " Returns:\n", " pd.DataFrame -- terms x marker names\n", " \"\"\"\n", " return markers_df.apply(lambda x: enrichment_df(x, referenece_df))" ] }, { "cell_type": "code", "execution_count": 19, "id": "66c0897e", "metadata": {}, "outputs": [], "source": [ " df = pd.read_csv(f'/grid/gillis/data/lohia/hi_c_data_processing/software/CoCoCoNet/gene2go/{species}_gene2go.csv', delim_whitespace=True)\n", "\n", " df['val'] = 1\n", "\n", " go_table = pd.pivot_table(df, index=['NetworkIDs'],columns=['GO_term'])\n", "\n", " go_table = go_table.fillna(0)\n", "\n", " go_table = pd.DataFrame(go_table.values , index=go_table.index , columns = [x[1] for x in go_table.columns])\n", "\n" ] }, { "cell_type": "code", "execution_count": 35, "id": "059d5c01", "metadata": {}, "outputs": [ { "ename": "KeyError", "evalue": "\"['GO:0015979', 'GO:0030555', 'GO:0008565', 'GO:0005578', 'GO:0006461', 'GO:0007067', 'GO:0004871', 'GO:0005618', 'GO:0000988', 'GO:0043234', 'GO:0009579', 'GO:0001071', 'GO:0016023', 'go_id', 'GO:0009536'] not in index\"", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgo_table\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mGO_groups_ben\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'go_id'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtolist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m~/.conda/envs/hicexplorer/lib/python3.8/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3028\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mis_iterator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3029\u001b[0m \u001b[0mkey\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3030\u001b[0;31m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_listlike_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mraise_missing\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3031\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3032\u001b[0m \u001b[0;31m# take() does not accept boolean indexers\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.conda/envs/hicexplorer/lib/python3.8/site-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_get_listlike_indexer\u001b[0;34m(self, key, axis, raise_missing)\u001b[0m\n\u001b[1;32m 1264\u001b[0m \u001b[0mkeyarr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnew_indexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_reindex_non_unique\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkeyarr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1265\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1266\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_validate_read_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkeyarr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mraise_missing\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mraise_missing\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1267\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mkeyarr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindexer\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1268\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.conda/envs/hicexplorer/lib/python3.8/site-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_validate_read_indexer\u001b[0;34m(self, key, indexer, axis, raise_missing)\u001b[0m\n\u001b[1;32m 1314\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mraise_missing\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1315\u001b[0m \u001b[0mnot_found\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1316\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"{not_found} not in index\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1317\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1318\u001b[0m \u001b[0mnot_found\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmissing_mask\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyError\u001b[0m: \"['GO:0015979', 'GO:0030555', 'GO:0008565', 'GO:0005578', 'GO:0006461', 'GO:0007067', 'GO:0004871', 'GO:0005618', 'GO:0000988', 'GO:0043234', 'GO:0009579', 'GO:0001071', 'GO:0016023', 'go_id', 'GO:0009536'] not in index\"" ] } ], "source": [ "go_table[GO_groups_ben['go_id'].tolist()]\n" ] }, { "cell_type": "code", "execution_count": 31, "id": "4f673a55", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
446389102150247404285430326426...266281409791116311965285
ENSG000002782671000000000...0000000000
ENSG000002337501000000000...0000000000
ENSG000002689031000000000...0000000000
ENSG000002699811000000000...0000000000
ENSG000002418601000000000...0000000000
..................................................................
ENSG000001559591000000000...0000000000
ENSG000001559611000000000...0000000000
ENSG000001559621000000000...0000000000
ENSG000002245331000000000...0000000000
ENSG000001859731000000000...0000000000
\n", "

24243 rows × 350 columns

\n", "
" ], "text/plain": [ " 446 389 102 150 247 404 285 430 326 426 ... 266 \\\n", "ENSG00000278267 1 0 0 0 0 0 0 0 0 0 ... 0 \n", "ENSG00000233750 1 0 0 0 0 0 0 0 0 0 ... 0 \n", "ENSG00000268903 1 0 0 0 0 0 0 0 0 0 ... 0 \n", "ENSG00000269981 1 0 0 0 0 0 0 0 0 0 ... 0 \n", "ENSG00000241860 1 0 0 0 0 0 0 0 0 0 ... 0 \n", "... ... ... ... ... ... ... ... ... ... ... ... ... \n", "ENSG00000155959 1 0 0 0 0 0 0 0 0 0 ... 0 \n", "ENSG00000155961 1 0 0 0 0 0 0 0 0 0 ... 0 \n", "ENSG00000155962 1 0 0 0 0 0 0 0 0 0 ... 0 \n", "ENSG00000224533 1 0 0 0 0 0 0 0 0 0 ... 0 \n", "ENSG00000185973 1 0 0 0 0 0 0 0 0 0 ... 0 \n", "\n", " 281 409 79 111 63 1 196 52 85 \n", "ENSG00000278267 0 0 0 0 0 0 0 0 0 \n", "ENSG00000233750 0 0 0 0 0 0 0 0 0 \n", "ENSG00000268903 0 0 0 0 0 0 0 0 0 \n", "ENSG00000269981 0 0 0 0 0 0 0 0 0 \n", "ENSG00000241860 0 0 0 0 0 0 0 0 0 \n", "... ... ... ... ... ... ... ... ... ... \n", "ENSG00000155959 0 0 0 0 0 0 0 0 0 \n", "ENSG00000155961 0 0 0 0 0 0 0 0 0 \n", "ENSG00000155962 0 0 0 0 0 0 0 0 0 \n", "ENSG00000224533 0 0 0 0 0 0 0 0 0 \n", "ENSG00000185973 0 0 0 0 0 0 0 0 0 \n", "\n", "[24243 rows x 350 columns]" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_exp_clust\n", "\n" ] }, { "cell_type": "code", "execution_count": 43, "id": "a32fa53c", "metadata": {}, "outputs": [], "source": [ "go_term_enrich = enrich_multi_markers(df_exp_clust, go_table[list(set(GO_groups_ben['go_id'].tolist()).intersection(set(go_table.columns.tolist())))])\n", "\n" ] }, { "cell_type": "code", "execution_count": 50, "id": "ca909978", "metadata": {}, "outputs": [], "source": [ " GO_groups_des = pd.read_csv('/grid/gillis/home/lohia/notebooks_proj2_marker_v2/goslim_panther_description.txt', sep=\":\", names=[\"del\",\"des\"])\n", " GO_groups_ben = pd.read_csv('/grid/gillis/data/lohia/hi_c_data_processing/genomes_jlee/aug4.GOslim', names=[\"go_id\"])\n", " GO_groups_type = pd.read_csv('/grid/gillis/home/lohia/notebooks_proj2_marker_v2/goslim_panther_process.txt', sep=\" \", names=[\"del\",\"type\"])\n", " GO_groups = pd.read_csv('/grid/gillis/home/lohia/notebooks_proj2_marker_v2/goslim_panther.txt', sep=\" \", names=[\"del\",\"go_id\"])\n", "\n" ] }, { "cell_type": "code", "execution_count": 64, "id": "a95947c3", "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", "
key_0del_xgo_iddel_ydes
00id:GO:0000003namereproduction
11id:GO:0000018nameregulation of DNA recombination
22id:GO:0000027nameribosomal large subunit assembly
33id:GO:0000030namemannosyltransferase activity
44id:GO:0000038namevery long-chain fatty acid metabolic process
..................
33563356id:GO:2001242nameregulation of intrinsic apoptotic signaling p...
33573357id:GO:2001243namenegative regulation of intrinsic apoptotic si...
33583358id:GO:2001251namenegative regulation of chromosome organization
33593359id:GO:2001257nameregulation of cation channel activity
33603360id:GO:2001259namepositive regulation of cation channel activity
\n", "

3361 rows × 5 columns

\n", "
" ], "text/plain": [ " key_0 del_x go_id del_y \\\n", "0 0 id: GO:0000003 name \n", "1 1 id: GO:0000018 name \n", "2 2 id: GO:0000027 name \n", "3 3 id: GO:0000030 name \n", "4 4 id: GO:0000038 name \n", "... ... ... ... ... \n", "3356 3356 id: GO:2001242 name \n", "3357 3357 id: GO:2001243 name \n", "3358 3358 id: GO:2001251 name \n", "3359 3359 id: GO:2001257 name \n", "3360 3360 id: GO:2001259 name \n", "\n", " des \n", "0 reproduction \n", "1 regulation of DNA recombination \n", "2 ribosomal large subunit assembly \n", "3 mannosyltransferase activity \n", "4 very long-chain fatty acid metabolic process \n", "... ... \n", "3356 regulation of intrinsic apoptotic signaling p... \n", "3357 negative regulation of intrinsic apoptotic si... \n", "3358 negative regulation of chromosome organization \n", "3359 regulation of cation channel activity \n", "3360 positive regulation of cation channel activity \n", "\n", "[3361 rows x 5 columns]" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ " GO_groups.merge(GO_groups_des, left_on=GO_groups.index, right_on=GO_groups_des.index)" ] }, { "cell_type": "code", "execution_count": 81, "id": "586083bd", "metadata": {}, "outputs": [], "source": [ "g3 = GO_groups_type.merge(GO_groups_des, left_on=GO_groups_type.index, right_on=GO_groups_des.index)" ] }, { "cell_type": "code", "execution_count": 83, "id": "c3a19218", "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", "
key_0del_xtypedel_ydes
00namespace:biological_processnamereproduction
11namespace:biological_processnameregulation of DNA recombination
22namespace:biological_processnameribosomal large subunit assembly
33namespace:molecular_functionnamemannosyltransferase activity
44namespace:biological_processnamevery long-chain fatty acid metabolic process
..................
33663366namespace:externalnamepart of
33673367namespace:externalnamepositively regulates
33683368namespace:externalnameregulates
33693369namespace:externalnamestarts_during
33703370namespace:externalnameterm tracker item
\n", "

3371 rows × 5 columns

\n", "
" ], "text/plain": [ " key_0 del_x type del_y \\\n", "0 0 namespace: biological_process name \n", "1 1 namespace: biological_process name \n", "2 2 namespace: biological_process name \n", "3 3 namespace: molecular_function name \n", "4 4 namespace: biological_process name \n", "... ... ... ... ... \n", "3366 3366 namespace: external name \n", "3367 3367 namespace: external name \n", "3368 3368 namespace: external name \n", "3369 3369 namespace: external name \n", "3370 3370 namespace: external name \n", "\n", " des \n", "0 reproduction \n", "1 regulation of DNA recombination \n", "2 ribosomal large subunit assembly \n", "3 mannosyltransferase activity \n", "4 very long-chain fatty acid metabolic process \n", "... ... \n", "3366 part of \n", "3367 positively regulates \n", "3368 regulates \n", "3369 starts_during \n", "3370 term tracker item \n", "\n", "[3371 rows x 5 columns]" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g3" ] }, { "cell_type": "code", "execution_count": 109, "id": "7865a299", "metadata": {}, "outputs": [], "source": [ "df_l = []\n", "for each_clust in df_2d_jac[df_2d_jac['AUC'] >0.9].index.tolist():\n", "\n", " g1 = go_term_enrich[go_term_enrich<0.01][each_clust].dropna().reset_index()\n", " g2 = GO_groups.merge(g3[['type', 'des']], left_on=GO_groups.index, right_on=g3.index)\n", " \n", " df_l.append(g1.merge(g2, left_on='index', right_on='go_id')[['go_id', 'type', 'des']])\n", " \n", " " ] }, { "cell_type": "code", "execution_count": 110, "id": "99193162", "metadata": {}, "outputs": [], "source": [ "df2 = pd.concat(df_l)\n" ] }, { "cell_type": "code", "execution_count": 111, "id": "d0d7ad7b", "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", "
go_idtypedes
1GO:0034641biological_processcellular nitrogen compound metabolic process
2GO:0022618biological_processribonucleoprotein complex assembly
3GO:0022607biological_processcellular component assembly
4GO:0006397biological_processmRNA processing
5GO:0065003biological_processprotein-containing complex assembly
6GO:0003723molecular_functionRNA binding
0GO:0022857molecular_functiontransmembrane transporter activity
1GO:0048856biological_processanatomical structure development
2GO:0007155biological_processcell adhesion
3GO:0050877biological_processnervous system process
4GO:0055085biological_processtransmembrane transport
5GO:0000902biological_processcell morphogenesis
7GO:0007267biological_processcell-cell signaling
8GO:0034330biological_processcell junction organization
2GO:0034641biological_processcellular nitrogen compound metabolic process
3GO:0022618biological_processribonucleoprotein complex assembly
1GO:0009790biological_processembryo development
2GO:0003677molecular_functionDNA binding
3GO:0048856biological_processanatomical structure development
0GO:0009790biological_processembryo development
1GO:0003677molecular_functionDNA binding
3GO:0048646biological_processanatomical structure formation involved in mo...
0GO:0009790biological_processembryo development
\n", "
" ], "text/plain": [ " go_id type \\\n", "1 GO:0034641 biological_process \n", "2 GO:0022618 biological_process \n", "3 GO:0022607 biological_process \n", "4 GO:0006397 biological_process \n", "5 GO:0065003 biological_process \n", "6 GO:0003723 molecular_function \n", "0 GO:0022857 molecular_function \n", "1 GO:0048856 biological_process \n", "2 GO:0007155 biological_process \n", "3 GO:0050877 biological_process \n", "4 GO:0055085 biological_process \n", "5 GO:0000902 biological_process \n", "7 GO:0007267 biological_process \n", "8 GO:0034330 biological_process \n", "2 GO:0034641 biological_process \n", "3 GO:0022618 biological_process \n", "1 GO:0009790 biological_process \n", "2 GO:0003677 molecular_function \n", "3 GO:0048856 biological_process \n", "0 GO:0009790 biological_process \n", "1 GO:0003677 molecular_function \n", "3 GO:0048646 biological_process \n", "0 GO:0009790 biological_process \n", "\n", " des \n", "1 cellular nitrogen compound metabolic process \n", "2 ribonucleoprotein complex assembly \n", "3 cellular component assembly \n", "4 mRNA processing \n", "5 protein-containing complex assembly \n", "6 RNA binding \n", "0 transmembrane transporter activity \n", "1 anatomical structure development \n", "2 cell adhesion \n", "3 nervous system process \n", "4 transmembrane transport \n", "5 cell morphogenesis \n", "7 cell-cell signaling \n", "8 cell junction organization \n", "2 cellular nitrogen compound metabolic process \n", "3 ribonucleoprotein complex assembly \n", "1 embryo development \n", "2 DNA binding \n", "3 anatomical structure development \n", "0 embryo development \n", "1 DNA binding \n", "3 anatomical structure formation involved in mo... \n", "0 embryo development " ] }, "execution_count": 111, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df2[df2['type']!='cellular_component']\n", "\n" ] }, { "cell_type": "code", "execution_count": 89, "id": "8a35054f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "GO:0005634 7.975495e-11\n", "GO:0006790 NaN\n", "GO:0016491 NaN\n", "GO:0051604 NaN\n", "GO:0048870 NaN\n", " ... \n", "GO:0006520 NaN\n", "GO:0030198 NaN\n", "GO:0006810 NaN\n", "GO:0034655 3.539360e-04\n", "GO:0003723 1.199755e-10\n", "Name: 446, Length: 135, dtype: float64" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "go_term_enrich[go_term_enrich<0.05].dropna(axis=1, thresh=1)[446]" ] }, { "cell_type": "code", "execution_count": 85, "id": "2d0d9ebe", "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", "
index110key_0delgo_idtypedes
0GO:00097900.0011791095id:GO:0009790biological_processembryo development
1GO:00036770.011153266id:GO:0003677molecular_functionDNA binding
2GO:00056940.003241445id:GO:0005694cellular_componentchromosome
3GO:00002280.00117938id:GO:0000228cellular_componentnuclear chromosome
\n", "
" ], "text/plain": [ " index 110 key_0 del go_id type \\\n", "0 GO:0009790 0.001179 1095 id: GO:0009790 biological_process \n", "1 GO:0003677 0.011153 266 id: GO:0003677 molecular_function \n", "2 GO:0005694 0.003241 445 id: GO:0005694 cellular_component \n", "3 GO:0000228 0.001179 38 id: GO:0000228 cellular_component \n", "\n", " des \n", "0 embryo development \n", "1 DNA binding \n", "2 chromosome \n", "3 nuclear chromosome " ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "05504102", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 66, "id": "72a1ad52", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
AUCAVG_NODE_DEGREEDEGREE_NULL_AUCP_Value
1020.9760901059.6241250.1265432.040739e-16
4300.9401442113.8345590.3786593.208932e-05
2380.9108121003.7382560.1112331.940019e-17
2840.9473952972.1526360.6073667.230124e-04
3140.9237992968.7097670.5900806.405895e-133
3630.9405471403.5685750.2037001.667478e-03
3110.9580562942.1981630.5723272.577171e-04
3540.9983592426.0643990.4738502.408947e-03
3750.941907983.4355910.1085501.610753e-05
3520.9605431654.2840660.2731804.033217e-04
2390.912240856.8612640.0831319.424260e-20
2090.9392601948.4825320.3370522.731601e-05
2620.9408852087.5492890.3676239.353501e-18
2130.9054182270.5220460.3972122.448503e-03
2270.9097432652.6518330.5077871.768575e-03
3380.9260981691.5244770.2605081.806218e-04
2560.9413643335.5641890.6838588.576066e-03
2910.9677661837.2143910.2953314.073539e-03
4050.9206561496.1311830.2270357.847564e-06
4200.951433754.2252190.0580122.026680e-05
3510.9852381844.9846840.2998814.499220e-04
3020.9176723336.9425280.6773261.770678e-03
190.992895447.8142030.0121073.505343e-06
200.987955941.0211240.1128072.959691e-11
180.997656356.2916390.0030956.956094e-05
1130.9740311510.0346840.2266242.681206e-04
1100.9950011506.4309770.2219902.099307e-05
3240.9609141453.5511750.2094331.003903e-03
1930.9626882716.0663660.5561382.169611e-04
2870.9869581065.7103940.1275294.670972e-06
210.997251713.8580640.0522363.446270e-04
2480.9501021097.0762720.1329761.391863e-03
990.9356882675.1999960.4947041.556705e-03
3920.9857351236.7273230.1648429.105764e-05
\n", "
" ], "text/plain": [ " AUC AVG_NODE_DEGREE DEGREE_NULL_AUC P_Value\n", "102 0.976090 1059.624125 0.126543 2.040739e-16\n", "430 0.940144 2113.834559 0.378659 3.208932e-05\n", "238 0.910812 1003.738256 0.111233 1.940019e-17\n", "284 0.947395 2972.152636 0.607366 7.230124e-04\n", "314 0.923799 2968.709767 0.590080 6.405895e-133\n", "363 0.940547 1403.568575 0.203700 1.667478e-03\n", "311 0.958056 2942.198163 0.572327 2.577171e-04\n", "354 0.998359 2426.064399 0.473850 2.408947e-03\n", "375 0.941907 983.435591 0.108550 1.610753e-05\n", "352 0.960543 1654.284066 0.273180 4.033217e-04\n", "239 0.912240 856.861264 0.083131 9.424260e-20\n", "209 0.939260 1948.482532 0.337052 2.731601e-05\n", "262 0.940885 2087.549289 0.367623 9.353501e-18\n", "213 0.905418 2270.522046 0.397212 2.448503e-03\n", "227 0.909743 2652.651833 0.507787 1.768575e-03\n", "338 0.926098 1691.524477 0.260508 1.806218e-04\n", "256 0.941364 3335.564189 0.683858 8.576066e-03\n", "291 0.967766 1837.214391 0.295331 4.073539e-03\n", "405 0.920656 1496.131183 0.227035 7.847564e-06\n", "420 0.951433 754.225219 0.058012 2.026680e-05\n", "351 0.985238 1844.984684 0.299881 4.499220e-04\n", "302 0.917672 3336.942528 0.677326 1.770678e-03\n", "19 0.992895 447.814203 0.012107 3.505343e-06\n", "20 0.987955 941.021124 0.112807 2.959691e-11\n", "18 0.997656 356.291639 0.003095 6.956094e-05\n", "113 0.974031 1510.034684 0.226624 2.681206e-04\n", "110 0.995001 1506.430977 0.221990 2.099307e-05\n", "324 0.960914 1453.551175 0.209433 1.003903e-03\n", "193 0.962688 2716.066366 0.556138 2.169611e-04\n", "287 0.986958 1065.710394 0.127529 4.670972e-06\n", "21 0.997251 713.858064 0.052236 3.446270e-04\n", "248 0.950102 1097.076272 0.132976 1.391863e-03\n", "99 0.935688 2675.199996 0.494704 1.556705e-03\n", "392 0.985735 1236.727323 0.164842 9.105764e-05" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_2d_jac[df_2d_jac['AUC'] >0.9]" ] }, { "cell_type": "code", "execution_count": 21, "id": "d541ea0f", "metadata": {}, "outputs": [], "source": [ "GO_groups_ben = pd.read_csv('/grid/gillis/data/lohia/hi_c_data_processing/genomes_jlee/aug4.GOslim', names=[\"go_id\"])" ] }, { "cell_type": "code", "execution_count": 22, "id": "a88de870", "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", "
go_id
NaNgo_id
0.0GO:0000003
1.0GO:0000228
2.0GO:0000229
3.0GO:0000902
......
144.0GO:0055085
145.0GO:0061024
146.0GO:0065003
147.0GO:0071554
148.0GO:0071941
\n", "

150 rows × 1 columns

\n", "
" ], "text/plain": [ " go_id\n", "NaN go_id\n", "0.0 GO:0000003\n", "1.0 GO:0000228\n", "2.0 GO:0000229\n", "3.0 GO:0000902\n", "... ...\n", "144.0 GO:0055085\n", "145.0 GO:0061024\n", "146.0 GO:0065003\n", "147.0 GO:0071554\n", "148.0 GO:0071941\n", "\n", "[150 rows x 1 columns]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "GO_groups_ben[go_id].tolist()" ] }, { "cell_type": "code", "execution_count": null, "id": "9bec0747", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import statsmodels.api as sm\n", "auc_GO_terms_manw_three_list_hic_exp = []\n", "for resolution in [100]:\n", " if species == 'drosophila':\n", " fpath = f'/grid/gillis/data/lohia/hi_c_data_processing/data_human/aggregates/1kbp_raw/max/inter_only/'\n", " else:\n", " fpath = f'/grid/gillis/data/lohia/hi_c_data_processing/data_human/aggregates/{resolution}kbp_raw/max/'\n", " for fname in ['hic_gene_corr_inter_excluding_intra_nanranked_ind_1_percent_per_chr.csv']:\n", " \n", " df = pd.read_csv(f'/grid/gillis/data/lohia/hi_c_data_processing/software/CoCoCoNet/gene2go/{species}_gene2go.csv', delim_whitespace=True)\n", "\n", " df['val'] = 1\n", "\n", " go_table = pd.pivot_table(df, index=['NetworkIDs'],columns=['GO_term'])\n", "\n", " go_table = go_table.fillna(0)\n", "\n", " go_table = pd.DataFrame(go_table.values , index=go_table.index , columns = [x[1] for x in go_table.columns])\n", "\n", "\n", " #df_hic_auc = pd.read_csv(f'/grid/gillis/data/lohia/hi_c_data_processing/data_{species}/aggregates/10kbp_raw/max/inter_only/hic_gene_KR_inter_10_percent_per_chr_mouse_aggregates.csv', sep='\\t')\n", "\n", " #df_hic_auc = pd.read_csv(f'{fpath}/{fname}', sep='\\t')\n", " \n", " df_hic_auc = df_max_gene_inter_by_bins_cre\n", "\n", "\n", " go_df_scores = go_table.merge(df_hic_auc, left_on=go_table.index, right_on='gene_id_jac_sim')\n", " GO_groups = pd.read_csv('/grid/gillis/home/lohia/notebooks_proj2_marker_v2/goslim_panther.txt', sep=\" \", names=[\"del\",\"go_id\"])\n", " GO_groups_des = pd.read_csv('/grid/gillis/home/lohia/notebooks_proj2_marker_v2/goslim_panther_description.txt', sep=\":\", names=[\"del\",\"des\"])\n", " GO_groups_ben = pd.read_csv('/grid/gillis/data/lohia/hi_c_data_processing/genomes_jlee/aug4.GOslim', names=[\"go_id\"])\n", " GO_groups_type = pd.read_csv('/grid/gillis/home/lohia/notebooks_proj2_marker_v2/goslim_panther_process.txt', sep=\" \", names=[\"del\",\"type\"])\n", "\n", "\n", "\n", "\n", " from scipy.stats import mannwhitneyu\n", " import scipy.stats as stats\n", " z_list = []\n", " z_p_dict = []\n", " des_list = []\n", " for go_id in GO_groups[\"go_id\"].tolist():\n", " \n", " if go_id in GO_groups_ben[\"go_id\"].tolist():\n", "\n", " try:\n", "\n", " t_p_scores = go_df_scores[go_df_scores[go_id] ==1 ]['auc_cre'].tolist()\n", "\n", " t_n_scores = go_df_scores[go_df_scores[go_id] ==0 ]['auc_cre'].tolist()\n", " \n", "\n", "\n", " U1, p_val = mannwhitneyu(t_p_scores, t_n_scores, use_continuity=False, alternative='greater')\n", " #nx, ny = len(t_p_scores), len(t_n_scores)\n", " #N = nx + ny\n", " #z = (U1 - nx*ny/2) / np.sqrt(nx*ny * (N + 1)/ 12)\n", " #p = stats.norm.sf(z)\n", " z_list.append(U1)\n", " z_p_dict.append(p_val)\n", "\n", " #print (p, p_val)\n", " except:\n", " print (go_id)\n", " z_list.append(np.nan)\n", " z_p_dict.append(np.nan)\n", "\n", "\n", " auc_GO_terms_manw = pd.DataFrame(list(zip(GO_groups[\"go_id\"].tolist(), z_p_dict , z_list, GO_groups_des['des'].tolist(), GO_groups_type['type'].tolist())), columns=['id', 'P_val_agg', 'U1_stat', 'des', 'type'])\n", " auc_GO_terms_manw['species'] = species\n", " auc_GO_terms_manw.dropna(subset=['P_val_agg'], inplace=True)\n", " p_val_adjusted = sm.stats.multipletests(auc_GO_terms_manw['P_val_agg'].values, method='fdr_bh')\n", " auc_GO_terms_manw['adjusted_P_val_agg'] = p_val_adjusted[1]\n", " auc_GO_terms_manw.to_csv(f'{fpath}/GO_{fname}', sep='\\t', index=False)\n", " auc_GO_terms_manw_three_list_hic_exp.append(auc_GO_terms_manw)\n" ] }, { "cell_type": "code", "execution_count": null, "id": "c974a604", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "fd2452eb", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 67, "id": "0163d1e2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(23465, 23465)\n", "(23465, 350)\n", "0.9971599038081033\n", "3.632359968364085e-09\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ ":133: RuntimeWarning: invalid value encountered in true_divide\n", " roc = (p / n_p - (n_p + 1) / 2) / n_n\n", "/grid/gillis/home/lohia/.conda/envs/hicexplorer/lib/python3.8/site-packages/seaborn/_decorators.py:36: FutureWarning: Pass the following variables as keyword args: x, y. From version 0.12, the only valid positional argument will be `data`, and passing other arguments without an explicit keyword will result in an error or misinterpretation.\n", " warnings.warn(\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df_2d_jac, go_chrom = run_egad(df_exp_clust, df_hic_corr)\n", "import matplotlib.pyplot as plt\n", "sns.scatterplot(df_2d_jac['AUC'], df_2d_jac['DEGREE_NULL_AUC'])\n", "plt.plot([0, 1], [0, 1], c='black')\n", "plt.axvline(x=df_2d_jac['AUC'].mean(),c='black',ls='--')\n", "plt.axhline(y=df_2d_jac['DEGREE_NULL_AUC'].mean(), c='black', ls='--')" ] }, { "cell_type": "code", "execution_count": null, "id": "54c7f2e9", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import statsmodels.api as sm\n", "auc_GO_terms_manw_three_list_hic_exp = []\n", "for resolution in [100]:\n", " if species == 'drosophila':\n", " fpath = f'/grid/gillis/data/lohia/hi_c_data_processing/data_human/aggregates/1kbp_raw/max/inter_only/'\n", " else:\n", " fpath = f'/grid/gillis/data/lohia/hi_c_data_processing/data_human/aggregates/{resolution}kbp_raw/max/'\n", " for fname in ['hic_gene_corr_inter_excluding_intra_nanranked_ind_1_percent_per_chr.csv']:\n", " \n", " df = pd.read_csv(f'/grid/gillis/data/lohia/hi_c_data_processing/software/CoCoCoNet/gene2go/{species}_gene2go.csv', delim_whitespace=True)\n", "\n", " df['val'] = 1\n", "\n", " go_table = pd.pivot_table(df, index=['NetworkIDs'],columns=['GO_term'])\n", "\n", " go_table = go_table.fillna(0)\n", "\n", " go_table = pd.DataFrame(go_table.values , index=go_table.index , columns = [x[1] for x in go_table.columns])\n", "\n", "\n", " #df_hic_auc = pd.read_csv(f'/grid/gillis/data/lohia/hi_c_data_processing/data_{species}/aggregates/10kbp_raw/max/inter_only/hic_gene_KR_inter_10_percent_per_chr_mouse_aggregates.csv', sep='\\t')\n", "\n", " #df_hic_auc = pd.read_csv(f'{fpath}/{fname}', sep='\\t')\n", " \n", " df_hic_auc = df_max_gene_inter_by_bins_cre\n", "\n", "\n", " go_df_scores = go_table.merge(df_hic_auc, left_on=go_table.index, right_on='gene_id_jac_sim')\n", " GO_groups = pd.read_csv('/grid/gillis/home/lohia/notebooks_proj2_marker_v2/goslim_panther.txt', sep=\" \", names=[\"del\",\"go_id\"])\n", " GO_groups_des = pd.read_csv('/grid/gillis/home/lohia/notebooks_proj2_marker_v2/goslim_panther_description.txt', sep=\":\", names=[\"del\",\"des\"])\n", " GO_groups_ben = pd.read_csv('/grid/gillis/data/lohia/hi_c_data_processing/genomes_jlee/aug4.GOslim', names=[\"go_id\"])\n", " GO_groups_type = pd.read_csv('/grid/gillis/home/lohia/notebooks_proj2_marker_v2/goslim_panther_process.txt', sep=\" \", names=[\"del\",\"type\"])\n", "\n", "\n", "\n", "\n", " from scipy.stats import mannwhitneyu\n", " import scipy.stats as stats\n", " z_list = []\n", " z_p_dict = []\n", " des_list = []\n", " for go_id in GO_groups[\"go_id\"].tolist():\n", " \n", " if go_id in GO_groups_ben[\"go_id\"].tolist():\n", "\n", " try:\n", "\n", " t_p_scores = go_df_scores[go_df_scores[go_id] ==1 ]['auc_cre'].tolist()\n", "\n", " t_n_scores = go_df_scores[go_df_scores[go_id] ==0 ]['auc_cre'].tolist()\n", " \n", "\n", "\n", " U1, p_val = mannwhitneyu(t_p_scores, t_n_scores, use_continuity=False, alternative='greater')\n", " #nx, ny = len(t_p_scores), len(t_n_scores)\n", " #N = nx + ny\n", " #z = (U1 - nx*ny/2) / np.sqrt(nx*ny * (N + 1)/ 12)\n", " #p = stats.norm.sf(z)\n", " z_list.append(U1)\n", " z_p_dict.append(p_val)\n", "\n", " #print (p, p_val)\n", " except:\n", " print (go_id)\n", " z_list.append(np.nan)\n", " z_p_dict.append(np.nan)\n", "\n", "\n", " auc_GO_terms_manw = pd.DataFrame(list(zip(GO_groups[\"go_id\"].tolist(), z_p_dict , z_list, GO_groups_des['des'].tolist(), GO_groups_type['type'].tolist())), columns=['id', 'P_val_agg', 'U1_stat', 'des', 'type'])\n", " auc_GO_terms_manw['species'] = species\n", " auc_GO_terms_manw.dropna(subset=['P_val_agg'], inplace=True)\n", " p_val_adjusted = sm.stats.multipletests(auc_GO_terms_manw['P_val_agg'].values, method='fdr_bh')\n", " auc_GO_terms_manw['adjusted_P_val_agg'] = p_val_adjusted[1]\n", " auc_GO_terms_manw.to_csv(f'{fpath}/GO_{fname}', sep='\\t', index=False)\n", " auc_GO_terms_manw_three_list_hic_exp.append(auc_GO_terms_manw)\n" ] }, { "cell_type": "code", "execution_count": 46, "id": "72bedb93", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(27, 4)" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_2d_jac.shape" ] }, { "cell_type": "code", "execution_count": 13, "id": "a15946e8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(24243, 24243)\n", "(24243, 102)\n", "0.990524452985418\n", "0.0\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ ":133: RuntimeWarning: invalid value encountered in true_divide\n", " roc = (p / n_p - (n_p + 1) / 2) / n_n\n", "/grid/gillis/home/lohia/.conda/envs/hicexplorer/lib/python3.8/site-packages/seaborn/_decorators.py:36: FutureWarning: Pass the following variables as keyword args: x, y. From version 0.12, the only valid positional argument will be `data`, and passing other arguments without an explicit keyword will result in an error or misinterpretation.\n", " warnings.warn(\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df_2d_jac, go_chrom = run_egad(df_exp_clust, df_exp_corr)\n", "import matplotlib.pyplot as plt\n", "sns.scatterplot(df_2d_jac['AUC'], df_2d_jac['DEGREE_NULL_AUC'])\n", "plt.plot([0, 1], [0, 1], c='black')\n", "plt.axvline(x=df_2d_jac['AUC'].mean(),c='black',ls='--')\n", "plt.axhline(y=df_2d_jac['DEGREE_NULL_AUC'].mean(), c='black', ls='--')" ] }, { "cell_type": "code", "execution_count": 52, "id": "1d583484", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(23465, 23465)\n", "(23465, 254)\n", "0.9995255121130314\n", "3.632359968364085e-09\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ ":133: RuntimeWarning: invalid value encountered in true_divide\n", " roc = (p / n_p - (n_p + 1) / 2) / n_n\n", "/grid/gillis/home/lohia/.conda/envs/hicexplorer/lib/python3.8/site-packages/seaborn/_decorators.py:36: FutureWarning: Pass the following variables as keyword args: x, y. From version 0.12, the only valid positional argument will be `data`, and passing other arguments without an explicit keyword will result in an error or misinterpretation.\n", " warnings.warn(\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df_2d_jac, go_chrom = run_egad(df_exp_clust, df_hic_corr)\n", "import matplotlib.pyplot as plt\n", "sns.scatterplot(df_2d_jac['AUC'], df_2d_jac['DEGREE_NULL_AUC'])\n", "plt.plot([0, 1], [0, 1], c='black')\n", "plt.axvline(x=df_2d_jac['AUC'].mean(),c='black',ls='--')\n", "plt.axhline(y=df_2d_jac['DEGREE_NULL_AUC'].mean(), c='black', ls='--')" ] }, { "cell_type": "code", "execution_count": 17, "id": "296935ed", "metadata": {}, "outputs": [], "source": [ "df_t = df_2d_jac.merge(df_exp_clust.sum().reset_index(), left_on=df_2d_jac.index, right_on='index')\n" ] }, { "cell_type": "code", "execution_count": 20, "id": "d12662c8", "metadata": {}, "outputs": [], "source": [ "df_t['quintile'] = pd.qcut(df_t[0] , 5, labels=np.arange(5, 0, -1))" ] }, { "cell_type": "code", "execution_count": 21, "id": "81426fdf", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/grid/gillis/home/lohia/.conda/envs/hicexplorer/lib/python3.8/site-packages/seaborn/_decorators.py:36: FutureWarning: Pass the following variables as keyword args: x, y. From version 0.12, the only valid positional argument will be `data`, and passing other arguments without an explicit keyword will result in an error or misinterpretation.\n", " warnings.warn(\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.boxplot(df_t['quintile'], df_t['AUC'])" ] }, { "cell_type": "code", "execution_count": 30, "id": "af99d98f", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/grid/gillis/home/lohia/.conda/envs/hicexplorer/lib/python3.8/site-packages/seaborn/_decorators.py:36: FutureWarning: Pass the following variables as keyword args: x, y. From version 0.12, the only valid positional argument will be `data`, and passing other arguments without an explicit keyword will result in an error or misinterpretation.\n", " warnings.warn(\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = sns.scatterplot(df_t[0], df_t['AUC'])\n", "#ax.set_xlim([0,100])\n", "#ax.set_ylim([0,1])" ] }, { "cell_type": "code", "execution_count": 1, "id": "40eb41db", "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'l' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0ml\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mNameError\u001b[0m: name 'l' is not defined" ] } ], "source": [ "l" ] }, { "cell_type": "code", "execution_count": null, "id": "d5e3ab5c", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "hicexp", "language": "python", "name": "hicexp" }, "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.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }