{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import scanpy as sc\n", "import os\n", "from sklearn.cluster import KMeans\n", "from sklearn.cluster import AgglomerativeClustering\n", "from sklearn.metrics.cluster import adjusted_rand_score\n", "from sklearn.metrics.cluster import adjusted_mutual_info_score\n", "from sklearn.metrics.cluster import homogeneity_score\n", "import rpy2.robjects as robjects\n", "from rpy2.robjects import pandas2ri" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "df_metrics = pd.DataFrame(columns=['ARI_Louvain','ARI_kmeans','ARI_HC',\n", " 'AMI_Louvain','AMI_kmeans','AMI_HC',\n", " 'Homogeneity_Louvain','Homogeneity_kmeans','Homogeneity_HC'])" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "workdir = './output/'\n", "path_fm = os.path.join(workdir,'feature_matrices/')\n", "path_clusters = os.path.join(workdir,'clusters/')\n", "path_metrics = os.path.join(workdir,'metrics/')\n", "os.system('mkdir -p '+path_clusters)\n", "os.system('mkdir -p '+path_metrics)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "metadata = pd.read_csv('./input/metadata.tsv',sep='\\t',index_col=0)\n", "num_clusters = len(np.unique(metadata['label']))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "17" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "files = [x for x in os.listdir(path_fm) if x.startswith('FM')]\n", "len(files)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['FM_Control_BMnoisyp2.rds',\n", " 'FM_BROCKMAN_BMnoisyp2.rds',\n", " 'FM_Cusanovich2018_BMnoisyp2.rds',\n", " 'FM_cisTopic_BMnoisyp2.rds',\n", " 'FM_chromVAR_BMnoisyp2_kmers.rds',\n", " 'FM_chromVAR_BMnoisyp2_motifs.rds',\n", " 'FM_chromVAR_BMnoisyp2_kmers_pca.rds',\n", " 'FM_chromVAR_BMnoisyp2_motifs_pca.rds',\n", " 'FM_GeneScoring_BMnoisyp2.rds',\n", " 'FM_GeneScoring_BMnoisyp2_pca.rds',\n", " 'FM_Cicero_BMnoisyp2.rds',\n", " 'FM_Cicero_BMnoisyp2_pca.rds',\n", " 'FM_SnapATAC_BMnoisyp2.rds',\n", " 'FM_Scasat_BMnoisyp2.rds',\n", " 'FM_scABC_BMnoisyp2.rds',\n", " 'FM_SCRAT_BMnoisyp2.rds',\n", " 'FM_SCRAT_BMnoisyp2_pca.rds']" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "files" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def getNClusters(adata,n_cluster,range_min=0,range_max=3,max_steps=20):\n", " this_step = 0\n", " this_min = float(range_min)\n", " this_max = float(range_max)\n", " while this_step < max_steps:\n", " print('step ' + str(this_step))\n", " this_resolution = this_min + ((this_max-this_min)/2)\n", " sc.tl.louvain(adata,resolution=this_resolution)\n", " this_clusters = adata.obs['louvain'].nunique()\n", " \n", " print('got ' + str(this_clusters) + ' at resolution ' + str(this_resolution))\n", " \n", " if this_clusters > n_cluster:\n", " this_max = this_resolution\n", " elif this_clusters < n_cluster:\n", " this_min = this_resolution\n", " else:\n", " return(this_resolution, adata)\n", " this_step += 1\n", " \n", " print('Cannot find the number of clusters')\n", " print('Clustering solution from last iteration is used:' + str(this_clusters) + ' at resolution ' + str(this_resolution))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Control\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 6 at resolution 1.5\n", "BROCKMAN\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 10 at resolution 1.5\n", "step 1\n", "got 6 at resolution 0.75\n", "Cusanovich2018\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 6 at resolution 1.5\n", "cisTopic\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 6 at resolution 1.5\n", "chromVAR_kmers\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 5 at resolution 1.5\n", "step 1\n", "got 10 at resolution 2.25\n", "step 2\n", "got 6 at resolution 1.875\n", "chromVAR_motifs\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 6 at resolution 1.5\n", "chromVAR_kmers_pca\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 6 at resolution 1.5\n", "chromVAR_motifs_pca\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 6 at resolution 1.5\n", "GeneScoring\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 31 at resolution 1.5\n", "step 1\n", "got 3 at resolution 0.75\n", "step 2\n", "got 12 at resolution 1.125\n", "step 3\n", "got 7 at resolution 0.9375\n", "step 4\n", "got 5 at resolution 0.84375\n", "step 5\n", "got 5 at resolution 0.890625\n", "step 6\n", "got 5 at resolution 0.9140625\n", "step 7\n", "got 7 at resolution 0.92578125\n", "step 8\n", "got 5 at resolution 0.919921875\n", "step 9\n", "got 7 at resolution 0.9228515625\n", "step 10\n", "got 7 at resolution 0.92138671875\n", "step 11\n", "got 7 at resolution 0.920654296875\n", "step 12\n", "got 5 at resolution 0.9202880859375\n", "step 13\n", "got 7 at resolution 0.92047119140625\n", "step 14\n", "got 5 at resolution 0.920379638671875\n", "step 15\n", "got 5 at resolution 0.9204254150390625\n", "step 16\n", "got 7 at resolution 0.9204483032226562\n", "step 17\n", "got 5 at resolution 0.9204368591308594\n", "step 18\n", "got 5 at resolution 0.9204425811767578\n", "step 19\n", "got 7 at resolution 0.920445442199707\n", "Cannot find the number of clusters\n", "Clustering solution from last iteration is used:7 at resolution 0.920445442199707\n", "GeneScoring_pca\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 14 at resolution 1.5\n", "step 1\n", "got 9 at resolution 0.75\n", "step 2\n", "got 7 at resolution 0.375\n", "step 3\n", "got 4 at resolution 0.1875\n", "step 4\n", "got 5 at resolution 0.28125\n", "step 5\n", "got 6 at resolution 0.328125\n", "Cicero\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 34 at resolution 1.5\n", "step 1\n", "got 2 at resolution 0.75\n", "step 2\n", "got 17 at resolution 1.125\n", "step 3\n", "got 5 at resolution 0.9375\n", "step 4\n", "got 11 at resolution 1.03125\n", "step 5\n", "got 8 at resolution 0.984375\n", "step 6\n", "got 4 at resolution 0.9609375\n", "step 7\n", "got 5 at resolution 0.97265625\n", "step 8\n", "got 7 at resolution 0.978515625\n", "step 9\n", "got 6 at resolution 0.9755859375\n", "Cicero_pca\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 10 at resolution 1.5\n", "step 1\n", "got 4 at resolution 0.75\n", "step 2\n", "got 6 at resolution 1.125\n", "SnapATAC\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 6 at resolution 1.5\n", "Scasat\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 6 at resolution 1.5\n", "scABC\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 14 at resolution 1.5\n", "step 1\n", "got 3 at resolution 0.75\n", "step 2\n", "got 4 at resolution 1.125\n", "step 3\n", "got 9 at resolution 1.3125\n", "step 4\n", "got 7 at resolution 1.21875\n", "step 5\n", "got 5 at resolution 1.171875\n", "step 6\n", "got 7 at resolution 1.1953125\n", "step 7\n", "got 5 at resolution 1.18359375\n", "step 8\n", "got 6 at resolution 1.189453125\n", "SCRAT\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 8 at resolution 1.5\n", "step 1\n", "got 6 at resolution 0.75\n", "SCRAT_pca\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/data/pinello/SHARED_SOFTWARE/anaconda3/envs/ATACseq_clustering/lib/python3.7/site-packages/rpy2/robjects/pandas2ri.py:191: FutureWarning: from_items is deprecated. Please use DataFrame.from_dict(dict(items), ...) instead. DataFrame.from_dict(OrderedDict(items)) may be used to preserve the key order.\n", " res = PandasDataFrame.from_items(items)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "step 0\n", "got 11 at resolution 1.5\n", "step 1\n", "got 6 at resolution 0.75\n" ] } ], "source": [ "for file in files:\n", " file_split = file.split('_')\n", " method = file_split[1]\n", " dataset = file_split[2].split('.')[0]\n", " if(len(file_split)>3):\n", " method = method + '_' + '_'.join(file_split[3:]).split('.')[0]\n", " print(method)\n", "\n", " pandas2ri.activate()\n", " readRDS = robjects.r['readRDS']\n", " df_rds = readRDS(os.path.join(path_fm,file))\n", " fm_mat = pandas2ri.ri2py(robjects.r['data.frame'](robjects.r['as.matrix'](df_rds)))\n", " fm_mat.columns = metadata.index\n", " \n", " adata = sc.AnnData(fm_mat.T)\n", " adata.var_names_make_unique()\n", " adata.obs = metadata.loc[adata.obs.index,]\n", " df_metrics.loc[method,] = \"\"\n", " #Louvain\n", " sc.pp.neighbors(adata, n_neighbors=15,use_rep='X')\n", "# sc.tl.louvain(adata)\n", " getNClusters(adata,n_cluster=num_clusters)\n", " #kmeans\n", " kmeans = KMeans(n_clusters=num_clusters, random_state=2019).fit(adata.X)\n", " adata.obs['kmeans'] = pd.Series(kmeans.labels_,index=adata.obs.index).astype('category')\n", " #hierachical clustering\n", " hc = AgglomerativeClustering(n_clusters=num_clusters).fit(adata.X)\n", " adata.obs['hc'] = pd.Series(hc.labels_,index=adata.obs.index).astype('category')\n", " #clustering metrics\n", " \n", " #adjusted rank index\n", " ari_louvain = adjusted_rand_score(adata.obs['label'], adata.obs['louvain'])\n", " ari_kmeans = adjusted_rand_score(adata.obs['label'], adata.obs['kmeans'])\n", " ari_hc = adjusted_rand_score(adata.obs['label'], adata.obs['hc'])\n", " #adjusted mutual information\n", " ami_louvain = adjusted_mutual_info_score(adata.obs['label'], adata.obs['louvain'],average_method='arithmetic')\n", " ami_kmeans = adjusted_mutual_info_score(adata.obs['label'], adata.obs['kmeans'],average_method='arithmetic') \n", " ami_hc = adjusted_mutual_info_score(adata.obs['label'], adata.obs['hc'],average_method='arithmetic')\n", " #homogeneity\n", " homo_louvain = homogeneity_score(adata.obs['label'], adata.obs['louvain'])\n", " homo_kmeans = homogeneity_score(adata.obs['label'], adata.obs['kmeans'])\n", " homo_hc = homogeneity_score(adata.obs['label'], adata.obs['hc'])\n", "\n", " df_metrics.loc[method,['ARI_Louvain','ARI_kmeans','ARI_HC']] = [ari_louvain,ari_kmeans,ari_hc]\n", " df_metrics.loc[method,['AMI_Louvain','AMI_kmeans','AMI_HC']] = [ami_louvain,ami_kmeans,ami_hc]\n", " df_metrics.loc[method,['Homogeneity_Louvain','Homogeneity_kmeans','Homogeneity_HC']] = [homo_louvain,homo_kmeans,homo_hc] \n", " adata.obs[['louvain','kmeans','hc']].to_csv(os.path.join(path_clusters ,method + '_clusters.tsv'),sep='\\t')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "df_metrics.to_csv(path_metrics+'clustering_scores.csv')" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | ARI_Louvain | \n", "ARI_kmeans | \n", "ARI_HC | \n", "AMI_Louvain | \n", "AMI_kmeans | \n", "AMI_HC | \n", "Homogeneity_Louvain | \n", "Homogeneity_kmeans | \n", "Homogeneity_HC | \n", "
---|---|---|---|---|---|---|---|---|---|
Control | \n", "0.965315 | \n", "0.798218 | \n", "0.797901 | \n", "0.965279 | \n", "0.868754 | \n", "0.865926 | \n", "0.96539 | \n", "0.868205 | \n", "0.866151 | \n", "
BROCKMAN | \n", "0.94724 | \n", "0.657768 | \n", "0.725251 | \n", "0.949048 | \n", "0.75279 | \n", "0.804234 | \n", "0.949222 | \n", "0.752645 | \n", "0.800707 | \n", "
Cusanovich2018 | \n", "1 | \n", "0.773251 | \n", "0.997997 | \n", "1 | \n", "0.900015 | \n", "0.997053 | \n", "1 | \n", "0.871049 | \n", "0.99707 | \n", "
cisTopic | \n", "1 | \n", "0.997997 | \n", "0.997997 | \n", "1 | \n", "0.997053 | \n", "0.997053 | \n", "1 | \n", "0.99707 | \n", "0.99707 | \n", "
chromVAR_kmers | \n", "0.76863 | \n", "0.71703 | \n", "0.649466 | \n", "0.82417 | \n", "0.78671 | \n", "0.730611 | \n", "0.82211 | \n", "0.787383 | \n", "0.726742 | \n", "
chromVAR_motifs | \n", "0.464693 | \n", "0.459593 | \n", "0.421048 | \n", "0.612146 | \n", "0.614561 | \n", "0.579887 | \n", "0.610832 | \n", "0.6164 | \n", "0.579137 | \n", "
chromVAR_kmers_pca | \n", "0.741652 | \n", "0.750573 | \n", "0.702112 | \n", "0.803962 | \n", "0.809526 | \n", "0.768438 | \n", "0.804208 | \n", "0.810403 | \n", "0.765538 | \n", "
chromVAR_motifs_pca | \n", "0.483201 | \n", "0.451405 | \n", "0.432268 | \n", "0.624937 | \n", "0.606774 | \n", "0.601031 | \n", "0.621348 | \n", "0.608964 | \n", "0.588254 | \n", "
GeneScoring | \n", "0.0214239 | \n", "0.448314 | \n", "0.362124 | \n", "0.0263894 | \n", "0.601596 | \n", "0.447831 | \n", "0.0340632 | \n", "0.521397 | \n", "0.409118 | \n", "
GeneScoring_pca | \n", "0.401574 | \n", "0.403772 | \n", "0.400471 | \n", "0.499477 | \n", "0.492295 | \n", "0.498276 | \n", "0.490116 | \n", "0.481476 | \n", "0.484532 | \n", "
Cicero | \n", "0.119878 | \n", "0.445514 | \n", "0.459346 | \n", "0.143604 | \n", "0.677157 | \n", "0.611332 | \n", "0.143922 | \n", "0.565338 | \n", "0.600784 | \n", "
Cicero_pca | \n", "0.591284 | \n", "0.582276 | \n", "0.501441 | \n", "0.704068 | \n", "0.705255 | \n", "0.664097 | \n", "0.681298 | \n", "0.688295 | \n", "0.634709 | \n", "
SnapATAC | \n", "0.997997 | \n", "0.997997 | \n", "0.997997 | \n", "0.997053 | \n", "0.997053 | \n", "0.997053 | \n", "0.99707 | \n", "0.99707 | \n", "0.99707 | \n", "
Scasat | \n", "0.980329 | \n", "0.899849 | \n", "0.807384 | \n", "0.977148 | \n", "0.9206 | \n", "0.873924 | \n", "0.977271 | \n", "0.921012 | \n", "0.872492 | \n", "
scABC | \n", "0.541554 | \n", "0.523454 | \n", "0.696364 | \n", "0.62756 | \n", "0.681182 | \n", "0.780981 | \n", "0.577548 | \n", "0.618257 | \n", "0.76102 | \n", "
SCRAT | \n", "0.574104 | \n", "0.55288 | \n", "0.538371 | \n", "0.706265 | \n", "0.686961 | \n", "0.684487 | \n", "0.702628 | \n", "0.686609 | \n", "0.681563 | \n", "
SCRAT_pca | \n", "0.620999 | \n", "0.547343 | \n", "0.561441 | \n", "0.717525 | \n", "0.684513 | \n", "0.676401 | \n", "0.719068 | \n", "0.683929 | \n", "0.673369 | \n", "