diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/diff_expr.py b/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/diff_expr.py
index f6d3c5a16..05234762c 100644
--- a/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/diff_expr.py
+++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/diff_expr.py
@@ -35,9 +35,11 @@
]
+# flake8: noqa: D103
+
+
def compute_memento_estimators_from_precomputed_stats(estimators_df: pl.DataFrame) -> pl.DataFrame:
- """
- Computes the mean and standard error of the mean (SEM) for each feature in the estimators DataFrame.
+ """Computes the mean and standard error of the mean (SEM) for each feature in the estimators DataFrame.
This function takes a DataFrame containing precomputed statistics for each feature, including the number of observations,
sum, sum of squares, and size factor. It calculates the mean and SEM for each feature based on these statistics.
@@ -112,16 +114,20 @@ def compute_all(
n_processes: int,
covariates_str: Optional[str] = None,
) -> Tuple[pd.DataFrame, pstats.Stats]:
- default_covariates = CUBE_LOGICAL_DIMS_OBS
+ default_covariates: List[str] = []
if covariates_str is None:
covariates = default_covariates
else:
covariates = covariates_str.split(",")
+
+ # make treatment variable be in the first column because that is needed for the design matrix
+ # NOTE: if covariates == [] then variables for the design matrix will only contain the treatment column
+ variables = [treatment] + [covariate for covariate in covariates if covariate != treatment]
+
with tiledb.open(os.path.join(cube_path, OBS_GROUPS_ARRAY), "r") as obs_groups_array:
obs_groups_df = obs_groups_array.query(cond=query_filter or None).df[:]
- if covariates != default_covariates:
- obs_groups_df = obs_groups_df[covariates + [treatment, "obs_group_joinid", "n_obs"]]
+ obs_groups_df = obs_groups_df[variables + ["obs_group_joinid", "n_obs"]]
distinct_treatment_values = obs_groups_df[treatment].nunique()
assert distinct_treatment_values == 2, "treatment must have exactly 2 distinct values"
@@ -135,8 +141,6 @@ def compute_all(
f"computing for {len(obs_groups_df)} obs groups ({obs_groups_df.n_obs.sum()} cells) and {len(features)} features using {n_feature_groups} processes, {len(features) // n_feature_groups} features/process"
)
- # make treatment variable be in the first column of the design matrix
- variables = [treatment] + [covariate for covariate in covariates if covariate != treatment]
selected_vars_groups_groupby = obs_groups_df.groupby(variables, observed=True)
agg_dict = {i: "first" for i in variables}
@@ -308,9 +312,7 @@ def de_wls(
n: npt.NDArray[np.float32],
v: npt.NDArray[np.float32],
) -> Tuple[np.float32, np.float32, np.float32]:
- """
- Perform DE for each gene using Weighted Least Squares (i.e., a weighted Linear Regression model)
- """
+ """Perform DE for each gene using Weighted Least Squares (i.e., a weighted Linear Regression model)."""
coef = de_wls_fit(X, y, n)
z, pv = de_wls_stats(X, v, coef)
diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/scientific_validation_notebooks/memento_vanilla_testcases.ipynb b/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/scientific_validation_notebooks/memento_vanilla_testcases.ipynb
new file mode 100644
index 000000000..dd55f5a67
--- /dev/null
+++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/scientific_validation_notebooks/memento_vanilla_testcases.ipynb
@@ -0,0 +1,883 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "9670cc2f-903a-4753-9a12-123c80859f77",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import memento\n",
+ "import pandas as pd\n",
+ "\n",
+ "import cellxgene_census"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "73efecd1-faaa-48f0-b230-d460f5b745a5",
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "ModuleNotFoundError",
+ "evalue": "No module named 'itables'",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)",
+ "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mitables\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m init_notebook_mode\n\u001b[1;32m 2\u001b[0m init_notebook_mode(all_interactive\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n",
+ "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'itables'"
+ ]
+ }
+ ],
+ "source": [
+ "from itables import init_notebook_mode\n",
+ "\n",
+ "init_notebook_mode(all_interactive=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "ef602f2a-7c34-4729-bde9-9588b3bee9d3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "census = cellxgene_census.open_soma(census_version=\"2023-12-15\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "c8506c34-2e45-4f06-b19c-f4f4cbae12c7",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# guo, disease == \"COVID-19\"\n",
+ "dataset_guo = \"ae5341b8-60fb-4fac-86db-86e49ee66287\"\n",
+ "# aruna\n",
+ "dataset_aruna = \"59b69042-47c2-47fd-ad03-d21beb99818f\"\n",
+ "# wilk, slide-seq\n",
+ "dataset_wilk = \"055ca631-6ffb-40de-815e-b931e10718c0\"\n",
+ "\n",
+ "cell_type_monocyte = \"classical monocyte\"\n",
+ "cell_type_t_cell = \"central memory CD4-positive, alpha-beta T cell\"\n",
+ "cell_type_nk = \"natural killer cell\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fffe0e77-112e-419f-b592-4a6c0b825e22",
+ "metadata": {},
+ "source": [
+ "## Perform 5-10 more concordance comparisons with a controlled environment \n",
+ "\n",
+ "Steps:\n",
+ "- Look for example cases\n",
+ " - 1-2 known comparisons, single-dataset single-donor, no batch effects.\n",
+ " - 2-4 known comparisons, simple batch-effects with multi-donors but no multi-assay nor multi-dataset.\n",
+ " - 2-4 known comparisons, complex batch-effects with multi-datasets and multi-assay.\n",
+ "- For each example\n",
+ " - Run vanilla memento\n",
+ " - Run pre-comuputed memento\n",
+ " - Perform comparison of p-values between the two versions as in plot below\n",
+ "- Validation passes if there is linear correlation, with spearman > 0.9\n",
+ "- Brownie points if there is a high overlap between between significant genes at p < 0.001, do hypergeometric test\n",
+ "\n",
+ "### Example cases\n",
+ "\n",
+ "#### 1-2 known comparisons, single-dataset single-donor, no batch effects.\n",
+ "\n",
+ "**a) Single-dataset, single-donor, no batch effects.**\n",
+ "\n",
+ "- Collection: A Web Portal and Workbench for Biological Dissection of Single Cell COVID-19 Host Responses\n",
+ "- Dataset: Individual Single-Cell RNA-seq PBMC Data from Arunachalam et al.\n",
+ " - Assay: 10X\n",
+ "- Comparison:\n",
+ " - classical monocytes vs T-cells in one donor\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "0286a638-9b78-41c6-8e10-b6dba69558d2",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "datasets = [dataset_aruna]\n",
+ "donor_id = \"cov17\"\n",
+ "disease = \"normal\"\n",
+ "cell_types = [cell_type_monocyte, cell_type_t_cell]\n",
+ "\n",
+ "adata = cellxgene_census.get_anndata(\n",
+ " census=census,\n",
+ " organism=\"homo_sapiens\",\n",
+ " obsm_layers=[\"scvi\"],\n",
+ " obs_value_filter=f\"dataset_id in {datasets} and disease == '{disease}' and cell_type in {cell_types} and donor_id == '{donor_id}'\",\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "561ca819-07d9-4b72-8e82-5940f6e27c0c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# adata.obs[\"donor_id\"].value_counts()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "5b0727bf-fb32-403b-b674-9f8398a784fb",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# scanpy.pp.neighbors(adata, use_rep=\"scvi\")\n",
+ "# scanpy.tl.umap(adata)\n",
+ "# scanpy.pl.umap(adata, color=[\"cell_type\"])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5bf9391a-2320-4a89-b0f3-4942ca18b7d0",
+ "metadata": {},
+ "source": [
+ "Running memento vanilla"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "9d61902a-2d06-4c6d-97c9-c541d62d577b",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/memento/main.py:181: FutureWarning: errors='ignore' is deprecated and will raise in a future version. Use to_numeric without passing `errors` and catch exceptions explicitly instead\n",
+ " df[col] = pd.to_numeric(df[col], errors='ignore')\n",
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/tiledb/ctx.py:560: UserWarning: TileDB is a multithreading library and deadlocks are likely if fork() is called after a TileDB context has been created (such as for array access). To safely use TileDB with multiprocessing or concurrent.futures, choose 'spawn' as the start method for child processes. For example: multiprocessing.set_start_method('spawn').\n",
+ " warnings.warn(\n",
+ "[Parallel(n_jobs=12)]: Using backend LokyBackend with 12 concurrent workers.\n",
+ "[Parallel(n_jobs=12)]: Done 26 tasks | elapsed: 3.0s\n",
+ "[Parallel(n_jobs=12)]: Done 176 tasks | elapsed: 4.7s\n",
+ "[Parallel(n_jobs=12)]: Done 576 tasks | elapsed: 8.7s\n",
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/joblib/externals/loky/process_executor.py:752: UserWarning: A worker stopped while some jobs were given to the executor. This can be caused by a too short worker timeout or by a memory leak.\n",
+ " warnings.warn(\n",
+ "[Parallel(n_jobs=12)]: Done 1276 tasks | elapsed: 17.8s\n",
+ "[Parallel(n_jobs=12)]: Done 2176 tasks | elapsed: 29.1s\n",
+ "[Parallel(n_jobs=12)]: Done 3276 tasks | elapsed: 41.6s\n",
+ "[Parallel(n_jobs=12)]: Done 4264 tasks | elapsed: 56.4s\n",
+ "[Parallel(n_jobs=12)]: Done 5312 out of 5335 | elapsed: 1.1min remaining: 0.3s\n",
+ "[Parallel(n_jobs=12)]: Done 5335 out of 5335 | elapsed: 1.2min finished\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Setup\n",
+ "\n",
+ "# Assuming sequenced to 50%, dataset specific number\n",
+ "adata.var.index = adata.var[\"feature_name\"].values\n",
+ "adata.obs[\"q\"] = 0.15\n",
+ "\n",
+ "\n",
+ "# Classical monocyte encoded as 1\n",
+ "adata.obs[\"treatment\"] = (adata.obs[\"cell_type\"] == cell_types[0]).astype(int)\n",
+ "\n",
+ "# Setup memento\n",
+ "memento.setup_memento(adata, q_column=\"q\", trim_percent=0.1) # trim_percent tunes cell size calculation\n",
+ "memento.create_groups(adata, label_columns=[\"treatment\"])\n",
+ "memento.compute_1d_moments(adata, min_perc_group=0.9)\n",
+ "group_metadata = memento.get_groups(adata)\n",
+ "\n",
+ "treatment_df = group_metadata[[\"treatment\"]]\n",
+ "\n",
+ "memento.ht_1d_moments(\n",
+ " adata,\n",
+ " # covariate=covariate_df,\n",
+ " treatment=treatment_df,\n",
+ " num_boot=5000,\n",
+ " verbose=1,\n",
+ " num_cpus=12,\n",
+ " resample_rep=False,\n",
+ " approx=False,\n",
+ ")\n",
+ "\n",
+ "result = memento.get_1d_ht_result(adata)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "bd72f75b-a699-4510-9b9f-9fe0f9706052",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# result"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bf6027c5-e344-43f2-a18c-f22a0e731f85",
+ "metadata": {},
+ "source": [
+ "**b) Single-dataset, single-donor, no batch effects.**\n",
+ "\n",
+ "- Collection: A Web Portal and Workbench for Biological Dissection of Single Cell COVID-19 Host Responses\n",
+ "- Dataset: Individual Single-Cell RNA-seq PBMC Data from Arunachalam et al.\n",
+ " - Assay: 10X\n",
+ "- Comparison:\n",
+ " - classical monocytes vs natural killer cells in one donor\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "7190dd91-f4ea-40eb-ab85-42d974c3eda1",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "datasets = [dataset_aruna]\n",
+ "donor_id = \"cov17\"\n",
+ "disease = \"normal\"\n",
+ "cell_types = [cell_type_monocyte, cell_type_nk]\n",
+ "\n",
+ "adata = cellxgene_census.get_anndata(\n",
+ " census=census,\n",
+ " organism=\"homo_sapiens\",\n",
+ " obsm_layers=[\"scvi\"],\n",
+ " obs_value_filter=f\"dataset_id in {datasets} and disease == '{disease}' and cell_type in {cell_types} and donor_id == '{donor_id}'\",\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "68146cff-495f-4788-b731-ad12c3b024f9",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# adata.obs[\"donor_id\"].value_counts()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "aaf6cd74-79b9-47a3-8bc8-aeab0b40011f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# scanpy.pp.neighbors(adata, use_rep=\"scvi\")\n",
+ "# scanpy.tl.umap(adata)\n",
+ "# scanpy.pl.umap(adata, color=[\"cell_type\"])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "d85e27d8-e85c-4ea7-89c4-4ff6211207f6",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/memento/main.py:181: FutureWarning: errors='ignore' is deprecated and will raise in a future version. Use to_numeric without passing `errors` and catch exceptions explicitly instead\n",
+ " df[col] = pd.to_numeric(df[col], errors='ignore')\n",
+ "[Parallel(n_jobs=12)]: Using backend LokyBackend with 12 concurrent workers.\n",
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/tiledb/ctx.py:560: UserWarning: TileDB is a multithreading library and deadlocks are likely if fork() is called after a TileDB context has been created (such as for array access). To safely use TileDB with multiprocessing or concurrent.futures, choose 'spawn' as the start method for child processes. For example: multiprocessing.set_start_method('spawn').\n",
+ " warnings.warn(\n",
+ "[Parallel(n_jobs=12)]: Done 26 tasks | elapsed: 2.9s\n",
+ "[Parallel(n_jobs=12)]: Done 176 tasks | elapsed: 4.8s\n",
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/joblib/externals/loky/process_executor.py:752: UserWarning: A worker stopped while some jobs were given to the executor. This can be caused by a too short worker timeout or by a memory leak.\n",
+ " warnings.warn(\n",
+ "[Parallel(n_jobs=12)]: Done 426 tasks | elapsed: 8.0s\n",
+ "[Parallel(n_jobs=12)]: Done 1108 tasks | elapsed: 18.2s\n",
+ "[Parallel(n_jobs=12)]: Done 2008 tasks | elapsed: 31.4s\n",
+ "[Parallel(n_jobs=12)]: Done 3108 tasks | elapsed: 46.8s\n",
+ "[Parallel(n_jobs=12)]: Done 4300 tasks | elapsed: 1.1min\n",
+ "[Parallel(n_jobs=12)]: Done 5224 out of 5247 | elapsed: 1.3min remaining: 0.4s\n",
+ "[Parallel(n_jobs=12)]: Done 5247 out of 5247 | elapsed: 1.3min finished\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Setup\n",
+ "\n",
+ "# Assuming sequenced to 50%, dataset specific number\n",
+ "adata.var.index = adata.var[\"feature_name\"].values\n",
+ "adata.obs[\"q\"] = 0.15\n",
+ "\n",
+ "\n",
+ "# Classical monocyte encoded as 1\n",
+ "adata.obs[\"treatment\"] = (adata.obs[\"cell_type\"] == cell_types[0]).astype(int)\n",
+ "\n",
+ "# Setup memento\n",
+ "memento.setup_memento(adata, q_column=\"q\", trim_percent=0.1) # trim_percent tunes cell size calculation\n",
+ "memento.create_groups(adata, label_columns=[\"treatment\"])\n",
+ "memento.compute_1d_moments(adata, min_perc_group=0.9)\n",
+ "group_metadata = memento.get_groups(adata)\n",
+ "\n",
+ "treatment_df = group_metadata[[\"treatment\"]]\n",
+ "\n",
+ "memento.ht_1d_moments(\n",
+ " adata,\n",
+ " # covariate=covariate_df,\n",
+ " treatment=treatment_df,\n",
+ " num_boot=5000,\n",
+ " verbose=1,\n",
+ " num_cpus=12,\n",
+ " resample_rep=False,\n",
+ " approx=False,\n",
+ ")\n",
+ "\n",
+ "result = memento.get_1d_ht_result(adata)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "065daced-0e91-428a-802c-06d2cdcb518b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# result"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f9b27000-b471-4aa1-adb1-9039e770b918",
+ "metadata": {},
+ "source": [
+ "#### 2-4 known comparisons, simple batch-effects with multi-datasets but no multi-assay.\n",
+ "\n",
+ "**a) Single-dataset, two donors, controlling for donors**\n",
+ "\n",
+ "- Collection: A Web Portal and Workbench for Biological Dissection of Single Cell COVID-19 Host Responses\n",
+ "- Dataset: Individual Single-Cell RNA-seq PBMC Data from Arunachalam et al.\n",
+ " - Assay: 10X\n",
+ "- Comparison:\n",
+ " - classical monocytes vs T-cells in two donors, including donors as covariates.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "2b315f72-c8f5-48f7-b906-5d733d10bf92",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "datasets = [dataset_aruna]\n",
+ "donor_id = [\"cov17\", \"cov18\"]\n",
+ "disease = \"normal\"\n",
+ "cell_types = [cell_type_monocyte, cell_type_nk]\n",
+ "\n",
+ "adata = cellxgene_census.get_anndata(\n",
+ " census=census,\n",
+ " organism=\"homo_sapiens\",\n",
+ " obsm_layers=[\"scvi\"],\n",
+ " obs_value_filter=f\"dataset_id in {datasets} and disease == '{disease}' and cell_type in {cell_types} and donor_id in {donor_id}\",\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "10e1eafd-866c-467f-9ebc-b7184875044d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# adata.obs[\"donor_id\"].value_counts()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "471dc42e-6d0e-4659-ba99-ce3b8eb0767e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# scanpy.pp.neighbors(adata, use_rep=\"scvi\")\n",
+ "# scanpy.tl.umap(adata)\n",
+ "# scanpy.pl.umap(adata, color=[\"cell_type\"])\n",
+ "# scanpy.pl.umap(adata, color=[\"donor_id\"])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "54d6c680-4288-418c-8d7c-be4384bdee61",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/pgarcia-nieto/scripts/repos/scrna-parameter-estimation/memento/main.py:181: FutureWarning: errors='ignore' is deprecated and will raise in a future version. Use to_numeric without passing `errors` and catch exceptions explicitly instead\n",
+ " df[col] = pd.to_numeric(df[col], errors='ignore')\n",
+ "[Parallel(n_jobs=12)]: Using backend LokyBackend with 12 concurrent workers.\n",
+ "[Parallel(n_jobs=12)]: Done 29 tasks | elapsed: 0.7s\n",
+ "[Parallel(n_jobs=12)]: Done 328 tasks | elapsed: 5.4s\n",
+ "/Users/pgarcia-nieto/venv_uce/lib/python3.11/site-packages/joblib/externals/loky/process_executor.py:752: UserWarning: A worker stopped while some jobs were given to the executor. This can be caused by a too short worker timeout or by a memory leak.\n",
+ " warnings.warn(\n",
+ "/Users/pgarcia-nieto/venv_uce/lib/python3.11/site-packages/tiledb/ctx.py:560: UserWarning: TileDB is a multithreading library and deadlocks are likely if fork() is called after a TileDB context has been created (such as for array access). To safely use TileDB with multiprocessing or concurrent.futures, choose 'spawn' as the start method for child processes. For example: multiprocessing.set_start_method('spawn').\n",
+ " warnings.warn(\n",
+ "[Parallel(n_jobs=12)]: Done 828 tasks | elapsed: 14.1s\n",
+ "[Parallel(n_jobs=12)]: Done 1528 tasks | elapsed: 26.8s\n",
+ "[Parallel(n_jobs=12)]: Done 2428 tasks | elapsed: 42.1s\n",
+ "[Parallel(n_jobs=12)]: Done 3384 tasks | elapsed: 1.0min\n",
+ "[Parallel(n_jobs=12)]: Done 4034 tasks | elapsed: 1.2min\n",
+ "[Parallel(n_jobs=12)]: Done 4784 tasks | elapsed: 1.4min\n",
+ "[Parallel(n_jobs=12)]: Done 4834 out of 4857 | elapsed: 1.4min remaining: 0.4s\n",
+ "[Parallel(n_jobs=12)]: Done 4857 out of 4857 | elapsed: 1.4min finished\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Setup\n",
+ "\n",
+ "# Assuming sequenced to 50%, dataset specific number\n",
+ "adata.var.index = adata.var[\"feature_name\"].values\n",
+ "adata.obs[\"q\"] = 0.15\n",
+ "\n",
+ "\n",
+ "# Classical monocyte encoded as 1\n",
+ "adata.obs[\"treatment\"] = (adata.obs[\"cell_type\"] == cell_types[0]).astype(int)\n",
+ "\n",
+ "# Setup memento\n",
+ "memento.setup_memento(adata, q_column=\"q\", trim_percent=0.1) # trim_percent tunes cell size calculation\n",
+ "memento.create_groups(adata, label_columns=[\"treatment\", \"donor_id\"])\n",
+ "memento.compute_1d_moments(adata, min_perc_group=0.9)\n",
+ "group_metadata = memento.get_groups(adata)\n",
+ "\n",
+ "treatment_df = group_metadata[[\"treatment\"]]\n",
+ "covariate_df = pd.get_dummies(group_metadata[[\"donor_id\"]], drop_first=True).astype(float)\n",
+ "covariate_df -= covariate_df.mean() # covariates for Lin's estimator\n",
+ "\n",
+ "# Include interactions\n",
+ "covariate_df[\"interaction\"] = treatment_df.iloc[:, 0] * covariate_df.iloc[:, 0]\n",
+ "\n",
+ "memento.ht_1d_moments(\n",
+ " adata,\n",
+ " covariate=covariate_df,\n",
+ " treatment=treatment_df,\n",
+ " num_boot=5000,\n",
+ " verbose=1,\n",
+ " num_cpus=12,\n",
+ " resample_rep=False,\n",
+ " approx=False,\n",
+ ")\n",
+ "\n",
+ "result = memento.get_1d_ht_result(adata)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "952d9f79-a060-46b1-aaad-719b94557696",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ "\n",
+ " \n",
+ " \n",
+ " gene | \n",
+ " tx | \n",
+ " de_coef | \n",
+ " de_se | \n",
+ " de_pval | \n",
+ " dv_coef | \n",
+ " dv_se | \n",
+ " dv_pval | \n",
+ "
\n",
+ " Loading... (need help?) |
\n",
+ "\n",
+ "
\n",
+ "\n",
+ "
\n"
+ ],
+ "text/plain": [
+ " gene tx de_coef de_se de_pval \\\n",
+ "0 PRXL2C treatment 0.264879 0.070668 0.001783 \n",
+ "1 AAK1 treatment -0.725003 0.034958 0.000012 \n",
+ "2 AAMP treatment 0.179137 0.052185 0.001788 \n",
+ "3 AASDH treatment -0.324482 0.089005 0.001152 \n",
+ "4 AASDHPPT treatment 0.103343 0.064730 0.119976 \n",
+ "... ... ... ... ... ... \n",
+ "4852 LL22NC03-2H8.5 treatment -0.372966 0.106936 0.001931 \n",
+ "4853 RNU12_ENSG00000270022 treatment 1.287574 0.068130 0.000183 \n",
+ "4854 CTA-29F11.1 treatment -0.642627 0.066958 0.000023 \n",
+ "4855 ENSG00000273748.1 treatment 0.039858 0.078803 0.624075 \n",
+ "4856 MUC20-OT1 treatment 0.363593 0.052419 0.000168 \n",
+ "\n",
+ " dv_coef dv_se dv_pval \n",
+ "0 0.069764 0.271753 0.750850 \n",
+ "1 0.835903 0.276257 0.013797 \n",
+ "2 -0.174533 0.289675 0.502300 \n",
+ "3 0.041772 0.226266 0.859628 \n",
+ "4 0.001424 0.226486 0.912617 \n",
+ "... ... ... ... \n",
+ "4852 0.087045 0.213671 0.621876 \n",
+ "4853 0.483950 0.195596 0.025595 \n",
+ "4854 -0.144166 0.198106 0.497900 \n",
+ "4855 0.165485 0.185526 0.337532 \n",
+ "4856 -0.144004 0.192051 0.488302 \n",
+ "\n",
+ "[4857 rows x 8 columns]"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "result"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0e5ef97a-a57a-421e-b8a4-9b9b5d49a60e",
+ "metadata": {},
+ "source": [
+ "**b) Single-dataset, four donors, controlling for donors**\n",
+ "\n",
+ "- Collection: A Web Portal and Workbench for Biological Dissection of Single Cell COVID-19 Host Responses\n",
+ "- Dataset: Individual Single-Cell RNA-seq PBMC Data from Arunachalam et al.\n",
+ " - Assay: 10X\n",
+ "- Comparison:\n",
+ " - classical monocytes vs T-cells in four donors, including donors as covariates."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "affdfe9a-0527-4db4-a01a-5ff787ba50fd",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "datasets = [dataset_aruna]\n",
+ "donor_id = [\"cov17\", \"cov18\", \"cov07\", \"cov08\", \"cov09\"]\n",
+ "disease = \"normal\"\n",
+ "cell_types = [cell_type_monocyte, cell_type_nk]\n",
+ "\n",
+ "\n",
+ "adata = cellxgene_census.get_anndata(\n",
+ " census=census,\n",
+ " organism=\"homo_sapiens\",\n",
+ " obsm_layers=[\"scvi\"],\n",
+ " obs_value_filter=f\"dataset_id in {datasets} and disease == '{disease}' and cell_type in {cell_types} and donor_id in {donor_id}\",\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "9599358a-157a-4b97-b872-574b2bb8c28d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# adata.obs[\"donor_id\"].value_counts()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "d828fe6b-ca60-4251-a113-86e993b0d51c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# scanpy.pp.neighbors(adata, use_rep=\"scvi\")\n",
+ "# scanpy.tl.umap(adata)\n",
+ "# scanpy.pl.umap(adata, color=[\"cell_type\"])\n",
+ "# scanpy.pl.umap(adata, color=[\"donor_id\"])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "bd2b1d23-ca6f-48f4-8f0b-313bc718c381",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/pgarcia-nieto/scripts/repos/scrna-parameter-estimation/memento/main.py:181: FutureWarning: errors='ignore' is deprecated and will raise in a future version. Use to_numeric without passing `errors` and catch exceptions explicitly instead\n",
+ " df[col] = pd.to_numeric(df[col], errors='ignore')\n",
+ "[Parallel(n_jobs=12)]: Using backend LokyBackend with 12 concurrent workers.\n",
+ "[Parallel(n_jobs=12)]: Done 28 tasks | elapsed: 0.8s\n",
+ "[Parallel(n_jobs=12)]: Done 328 tasks | elapsed: 7.2s\n",
+ "/Users/pgarcia-nieto/venv_uce/lib/python3.11/site-packages/joblib/externals/loky/process_executor.py:752: UserWarning: A worker stopped while some jobs were given to the executor. This can be caused by a too short worker timeout or by a memory leak.\n",
+ " warnings.warn(\n",
+ "/Users/pgarcia-nieto/venv_uce/lib/python3.11/site-packages/tiledb/ctx.py:560: UserWarning: TileDB is a multithreading library and deadlocks are likely if fork() is called after a TileDB context has been created (such as for array access). To safely use TileDB with multiprocessing or concurrent.futures, choose 'spawn' as the start method for child processes. For example: multiprocessing.set_start_method('spawn').\n",
+ " warnings.warn(\n",
+ "[Parallel(n_jobs=12)]: Done 828 tasks | elapsed: 18.9s\n",
+ "[Parallel(n_jobs=12)]: Done 1528 tasks | elapsed: 35.2s\n",
+ "[Parallel(n_jobs=12)]: Done 2428 tasks | elapsed: 55.7s\n",
+ "[Parallel(n_jobs=12)]: Done 3204 tasks | elapsed: 1.3min\n",
+ "[Parallel(n_jobs=12)]: Done 3854 tasks | elapsed: 1.5min\n",
+ "[Parallel(n_jobs=12)]: Done 4297 out of 4297 | elapsed: 1.7min finished\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Setup\n",
+ "\n",
+ "# Assuming sequenced to 50%, dataset specific number\n",
+ "adata.var.index = adata.var[\"feature_name\"].values\n",
+ "adata.obs[\"q\"] = 0.15\n",
+ "\n",
+ "\n",
+ "# Classical monocyte encoded as 1\n",
+ "adata.obs[\"treatment\"] = (adata.obs[\"cell_type\"] == cell_types[0]).astype(int)\n",
+ "\n",
+ "# Setup memento\n",
+ "memento.setup_memento(adata, q_column=\"q\", trim_percent=0.1) # trim_percent tunes cell size calculation\n",
+ "memento.create_groups(adata, label_columns=[\"treatment\", \"donor_id\"])\n",
+ "memento.compute_1d_moments(adata, min_perc_group=0.9)\n",
+ "group_metadata = memento.get_groups(adata)\n",
+ "\n",
+ "treatment_df = group_metadata[[\"treatment\"]]\n",
+ "covariate_df = pd.get_dummies(group_metadata[[\"donor_id\"]], drop_first=True).astype(float)\n",
+ "covariate_df -= covariate_df.mean() # covariates for Lin's estimator\n",
+ "\n",
+ "# Include interactions\n",
+ "covariate_df[\"interaction\"] = treatment_df.iloc[:, 0] * covariate_df.iloc[:, 0]\n",
+ "\n",
+ "memento.ht_1d_moments(\n",
+ " adata,\n",
+ " covariate=covariate_df,\n",
+ " treatment=treatment_df,\n",
+ " num_boot=5000,\n",
+ " verbose=1,\n",
+ " num_cpus=12,\n",
+ " resample_rep=False,\n",
+ " approx=False,\n",
+ ")\n",
+ "\n",
+ "result = memento.get_1d_ht_result(adata)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "b81f5245-470c-4943-b4dd-5c717677225a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# result"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f3cc4cc6-1e82-406d-91f0-c046e1600888",
+ "metadata": {},
+ "source": [
+ "**c) Single-dataset COVID, two donors, controlling for donors**\n",
+ "\n",
+ "- Collection: A Web Portal and Workbench for Biological Dissection of Single Cell COVID-19 Host Responses\n",
+ "- Dataset: Individual Single-Cell RNA-seq PBMC Data from Guo et al.\n",
+ " - Assay: 10X\n",
+ "- Comparison:\n",
+ " - classical monocytes vs T-cells in two donors, including donors as covariates."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "9192bafd-35a1-498c-8b7c-e2462319bcb5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "datasets = [dataset_guo]\n",
+ "donor_id = [\"P1\", \"P2\"]\n",
+ "disease = \"COVID-19\"\n",
+ "cell_types = [cell_type_monocyte, cell_type_nk]\n",
+ "\n",
+ "adata = cellxgene_census.get_anndata(\n",
+ " census=census,\n",
+ " organism=\"homo_sapiens\",\n",
+ " obsm_layers=[\"scvi\"],\n",
+ " obs_value_filter=f\"dataset_id in {datasets} and disease == '{disease}' and cell_type in {cell_types} and donor_id in {donor_id}\",\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "656aa3b9-b1fd-4e14-8085-c5e831190dbb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# adata.obs[\"donor_id\"].value_counts()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "id": "caf5e17b-343c-4d23-beeb-bd248295635c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# scanpy.pp.neighbors(adata, use_rep=\"scvi\")\n",
+ "# scanpy.tl.umap(adata)\n",
+ "# scanpy.pl.umap(adata, color=[\"cell_type\"])\n",
+ "# scanpy.pl.umap(adata, color=[\"donor_id\"])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "id": "8afde602-7cf2-4c0f-9f20-334991105993",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/pgarcia-nieto/scripts/repos/scrna-parameter-estimation/memento/main.py:181: FutureWarning: errors='ignore' is deprecated and will raise in a future version. Use to_numeric without passing `errors` and catch exceptions explicitly instead\n",
+ " df[col] = pd.to_numeric(df[col], errors='ignore')\n",
+ "[Parallel(n_jobs=12)]: Using backend LokyBackend with 12 concurrent workers.\n",
+ "[Parallel(n_jobs=12)]: Done 29 tasks | elapsed: 0.5s\n",
+ "[Parallel(n_jobs=12)]: Done 328 tasks | elapsed: 4.2s\n",
+ "[Parallel(n_jobs=12)]: Done 828 tasks | elapsed: 10.3s\n",
+ "/Users/pgarcia-nieto/venv_uce/lib/python3.11/site-packages/joblib/externals/loky/process_executor.py:752: UserWarning: A worker stopped while some jobs were given to the executor. This can be caused by a too short worker timeout or by a memory leak.\n",
+ " warnings.warn(\n",
+ "/Users/pgarcia-nieto/venv_uce/lib/python3.11/site-packages/tiledb/ctx.py:560: UserWarning: TileDB is a multithreading library and deadlocks are likely if fork() is called after a TileDB context has been created (such as for array access). To safely use TileDB with multiprocessing or concurrent.futures, choose 'spawn' as the start method for child processes. For example: multiprocessing.set_start_method('spawn').\n",
+ " warnings.warn(\n",
+ "[Parallel(n_jobs=12)]: Done 1528 tasks | elapsed: 19.8s\n",
+ "[Parallel(n_jobs=12)]: Done 2428 tasks | elapsed: 32.1s\n",
+ "[Parallel(n_jobs=12)]: Done 2887 out of 2910 | elapsed: 38.3s remaining: 0.3s\n",
+ "[Parallel(n_jobs=12)]: Done 2910 out of 2910 | elapsed: 38.5s finished\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Setup\n",
+ "\n",
+ "# Assuming sequenced to 50%, dataset specific number\n",
+ "adata.var.index = adata.var[\"feature_name\"].values\n",
+ "adata.obs[\"q\"] = 0.15\n",
+ "\n",
+ "\n",
+ "# Classical monocyte encoded as 1\n",
+ "adata.obs[\"treatment\"] = (adata.obs[\"cell_type\"] == cell_types[0]).astype(int)\n",
+ "\n",
+ "# Setup memento\n",
+ "memento.setup_memento(adata, q_column=\"q\", trim_percent=0.1) # trim_percent tunes cell size calculation\n",
+ "memento.create_groups(adata, label_columns=[\"treatment\", \"donor_id\"])\n",
+ "memento.compute_1d_moments(adata, min_perc_group=0.9)\n",
+ "group_metadata = memento.get_groups(adata)\n",
+ "\n",
+ "treatment_df = group_metadata[[\"treatment\"]]\n",
+ "covariate_df = pd.get_dummies(group_metadata[[\"donor_id\"]], drop_first=True).astype(float)\n",
+ "covariate_df -= covariate_df.mean() # covariates for Lin's estimator\n",
+ "\n",
+ "# Include interactions\n",
+ "covariate_df[\"interaction\"] = treatment_df.iloc[:, 0] * covariate_df.iloc[:, 0]\n",
+ "\n",
+ "memento.ht_1d_moments(\n",
+ " adata,\n",
+ " covariate=covariate_df,\n",
+ " treatment=treatment_df,\n",
+ " num_boot=5000,\n",
+ " verbose=1,\n",
+ " num_cpus=12,\n",
+ " resample_rep=False,\n",
+ " approx=False,\n",
+ ")\n",
+ "\n",
+ "result = memento.get_1d_ht_result(adata)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "id": "32028404-d65b-4e3c-a791-897c2187b34d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# result"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.10.13"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/scientific_validation_notebooks/precomputed_memento_validation_testcase1.ipynb b/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/scientific_validation_notebooks/precomputed_memento_validation_testcase1.ipynb
new file mode 100644
index 000000000..692706020
--- /dev/null
+++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/scientific_validation_notebooks/precomputed_memento_validation_testcase1.ipynb
@@ -0,0 +1,920 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "6caacabf-1002-47fb-b38d-96fcb4f10133",
+ "metadata": {},
+ "source": [
+ "## Scientific validation of memento implementations\n",
+ "\n",
+ "This notebook runs through test cases for differential expression where the p-value outputs\n",
+ "of vanilla memento implementation are compared to the p-value outputs of precomputed memento\n",
+ "implementation\n",
+ "\n",
+ "**NOTE**:\n",
+ "- Run this notebook from the `cellxgene-census` repo in the `psridharan/memento-sci-val-1` branch\n",
+ "- Download estimator cube from `s3://psridharan-tmp/memento/memento-cube-census-data-2023-12-15/`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "ae923ea5-7c72-4743-aea1-c854593fc1ec",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "import memento\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "\n",
+ "import cellxgene_census\n",
+ "import cellxgene_census.experimental.diffexp.memento.diff_expr as precomputed_memento\n",
+ "\n",
+ "census = cellxgene_census.open_soma(census_version=\"2023-12-15\")\n",
+ "precomputed_memento_estimator_cube_path = (\n",
+ " \"/Users/psridharan/code/cellxgene-census/memento-cubes/memento-cube-census-data-2023-12-15\"\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dea834b2-0db9-49c2-a206-2251863dc891",
+ "metadata": {},
+ "source": [
+ "## TEST CASE 1: Single Dataset, Donor Batch Effects\n",
+ "- treatment variable: `cell_type_ontology_term_id`\n",
+ "- covariates: `donor_id`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "59ccd78c-0161-4f5b-a3ad-485943465cda",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'census_obs_query': \"is_primary_data == True and dataset_id in ['59b69042-47c2-47fd-ad03-d21beb99818f'] and disease in ['normal'] and cell_type in ['classical monocyte', 'central memory CD4-positive, alpha-beta T cell']\",\n",
+ " 'precomputed_memento_query': \"dataset_id in ['59b69042-47c2-47fd-ad03-d21beb99818f'] and disease_ontology_term_id in ['PATO:0000461'] and cell_type_ontology_term_id in ['CL:0000860', 'CL:0000904']\"}"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# data\n",
+ "dataset_aruna = \"59b69042-47c2-47fd-ad03-d21beb99818f\"\n",
+ "disease_info_map = {\"normal\": \"PATO:0000461\"}\n",
+ "\n",
+ "cell_type_monocyte = \"classical monocyte\"\n",
+ "cell_type_t_cell = \"central memory CD4-positive, alpha-beta T cell\"\n",
+ "cell_type_info_map = {cell_type_monocyte: \"CL:0000860\", cell_type_t_cell: \"CL:0000904\"}\n",
+ "\n",
+ "\n",
+ "# query params\n",
+ "datasets = [dataset_aruna]\n",
+ "\n",
+ "diseases = list(disease_info_map.keys())\n",
+ "disease_ontology_ids = list(disease_info_map.values())\n",
+ "\n",
+ "cell_types = list(cell_type_info_map.keys())\n",
+ "cell_type_ontology_ids = list(cell_type_info_map.values())\n",
+ "\n",
+ "# a test case is encapsulated as a census query and as a query to precomputed memento cube.\n",
+ "# The precomputed memento cube is the same as the census query except that the precomputed memento cube\n",
+ "# stores ontology term IDs and such the query should be formulated with ontology term IDs\n",
+ "test_case = {\n",
+ " \"census_obs_query\": f\"is_primary_data == True and dataset_id in {datasets} and disease in {diseases} and cell_type in {cell_types}\",\n",
+ " \"precomputed_memento_query\": f\"dataset_id in {datasets} and disease_ontology_term_id in {disease_ontology_ids} and cell_type_ontology_term_id in {cell_type_ontology_ids}\",\n",
+ "}\n",
+ "\n",
+ "test_case"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3bd2c1f8-52eb-49f6-b5fd-937323618db8",
+ "metadata": {},
+ "source": [
+ "#### Get anndata object for test case"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "3fdd1931-32e4-4874-9f6c-c496099cc38d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "cell_type dataset_id \n",
+ "classical monocyte 59b69042-47c2-47fd-ad03-d21beb99818f 4564\n",
+ "central memory CD4-positive, alpha-beta T cell 59b69042-47c2-47fd-ad03-d21beb99818f 2812\n",
+ "Name: count, dtype: int64"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "adata = cellxgene_census.get_anndata(\n",
+ " census=census,\n",
+ " organism=\"homo_sapiens\",\n",
+ " obsm_layers=[\"scvi\"],\n",
+ " obs_value_filter=test_case[\"census_obs_query\"],\n",
+ ")\n",
+ "\n",
+ "adata.obs[[\"cell_type\", \"dataset_id\"]].value_counts()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7dbdfafa-2b6d-438d-baf5-f485e162a8ab",
+ "metadata": {},
+ "source": [
+ "#### Run vanilla memento on test case"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "3bd6853a-1896-4b57-bd2b-f313add62be0",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/memento/main.py:181: FutureWarning: errors='ignore' is deprecated and will raise in a future version. Use to_numeric without passing `errors` and catch exceptions explicitly instead\n",
+ " df[col] = pd.to_numeric(df[col], errors='ignore')\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Assuming sequenced to 50%, dataset specific number\n",
+ "adata.var.index = adata.var[\"feature_id\"].values # use feature_id to refer to the gene\n",
+ "adata.obs[\"q\"] = 0.15\n",
+ "\n",
+ "\n",
+ "# Set treatment variable. Classical monocyte encoded as 1\n",
+ "adata.obs[\"treatment\"] = (adata.obs[\"cell_type\"] == \"classical monocyte\").astype(int)\n",
+ "\n",
+ "# Setup memento\n",
+ "memento.setup_memento(adata, q_column=\"q\", trim_percent=0.1) # trim_percent tunes cell size calculation\n",
+ "\n",
+ "memento.create_groups(adata, label_columns=[\"treatment\", \"donor_id\"])\n",
+ "\n",
+ "memento.compute_1d_moments(adata, min_perc_group=0.9)\n",
+ "\n",
+ "group_metadata = memento.get_groups(adata)\n",
+ "\n",
+ "treatment_df = group_metadata[[\"treatment\"]]\n",
+ "covariate_df = pd.get_dummies(group_metadata[[\"donor_id\"]], drop_first=True).astype(float)\n",
+ "covariate_df -= covariate_df.mean() # covariates for Lin's estimator\n",
+ "\n",
+ "# Include interactions\n",
+ "covariate_df[\"interaction\"] = treatment_df.iloc[:, 0] * covariate_df.iloc[:, 0]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "5f441f7d-7f38-4644-b4ad-e7e2c0cb2383",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " treatment | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " sg^0^cov07 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " sg^1^cov07 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " sg^0^cov08 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " sg^1^cov08 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " sg^0^cov09 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " sg^1^cov09 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " sg^1^cov17 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " sg^0^cov17 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " sg^0^cov18 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " sg^1^cov18 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " treatment\n",
+ "sg^0^cov07 0\n",
+ "sg^1^cov07 1\n",
+ "sg^0^cov08 0\n",
+ "sg^1^cov08 1\n",
+ "sg^0^cov09 0\n",
+ "sg^1^cov09 1\n",
+ "sg^1^cov17 1\n",
+ "sg^0^cov17 0\n",
+ "sg^0^cov18 0\n",
+ "sg^1^cov18 1"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "treatment_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "8b044c0a-2104-4ab6-833b-d197ceac4762",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " donor_id_cov08 | \n",
+ " donor_id_cov09 | \n",
+ " donor_id_cov17 | \n",
+ " donor_id_cov18 | \n",
+ " interaction | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " sg^0^cov07 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " -0.0 | \n",
+ "
\n",
+ " \n",
+ " sg^1^cov07 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ "
\n",
+ " \n",
+ " sg^0^cov08 | \n",
+ " 0.8 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " sg^1^cov08 | \n",
+ " 0.8 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " 0.8 | \n",
+ "
\n",
+ " \n",
+ " sg^0^cov09 | \n",
+ " -0.2 | \n",
+ " 0.8 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " -0.0 | \n",
+ "
\n",
+ " \n",
+ " sg^1^cov09 | \n",
+ " -0.2 | \n",
+ " 0.8 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ "
\n",
+ " \n",
+ " sg^1^cov17 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " 0.8 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ "
\n",
+ " \n",
+ " sg^0^cov17 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " 0.8 | \n",
+ " -0.2 | \n",
+ " -0.0 | \n",
+ "
\n",
+ " \n",
+ " sg^0^cov18 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " 0.8 | \n",
+ " -0.0 | \n",
+ "
\n",
+ " \n",
+ " sg^1^cov18 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " -0.2 | \n",
+ " 0.8 | \n",
+ " -0.2 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " donor_id_cov08 donor_id_cov09 donor_id_cov17 donor_id_cov18 \\\n",
+ "sg^0^cov07 -0.2 -0.2 -0.2 -0.2 \n",
+ "sg^1^cov07 -0.2 -0.2 -0.2 -0.2 \n",
+ "sg^0^cov08 0.8 -0.2 -0.2 -0.2 \n",
+ "sg^1^cov08 0.8 -0.2 -0.2 -0.2 \n",
+ "sg^0^cov09 -0.2 0.8 -0.2 -0.2 \n",
+ "sg^1^cov09 -0.2 0.8 -0.2 -0.2 \n",
+ "sg^1^cov17 -0.2 -0.2 0.8 -0.2 \n",
+ "sg^0^cov17 -0.2 -0.2 0.8 -0.2 \n",
+ "sg^0^cov18 -0.2 -0.2 -0.2 0.8 \n",
+ "sg^1^cov18 -0.2 -0.2 -0.2 0.8 \n",
+ "\n",
+ " interaction \n",
+ "sg^0^cov07 -0.0 \n",
+ "sg^1^cov07 -0.2 \n",
+ "sg^0^cov08 0.0 \n",
+ "sg^1^cov08 0.8 \n",
+ "sg^0^cov09 -0.0 \n",
+ "sg^1^cov09 -0.2 \n",
+ "sg^1^cov17 -0.2 \n",
+ "sg^0^cov17 -0.0 \n",
+ "sg^0^cov18 -0.0 \n",
+ "sg^1^cov18 -0.2 "
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "covariate_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "140b85b0-54c6-4106-a331-d0daf51fa931",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "[Parallel(n_jobs=12)]: Using backend LokyBackend with 12 concurrent workers.\n",
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/tiledb/ctx.py:560: UserWarning: TileDB is a multithreading library and deadlocks are likely if fork() is called after a TileDB context has been created (such as for array access). To safely use TileDB with multiprocessing or concurrent.futures, choose 'spawn' as the start method for child processes. For example: multiprocessing.set_start_method('spawn').\n",
+ " warnings.warn(\n",
+ "[Parallel(n_jobs=12)]: Done 26 tasks | elapsed: 3.6s\n",
+ "[Parallel(n_jobs=12)]: Done 176 tasks | elapsed: 8.0s\n",
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/joblib/externals/loky/process_executor.py:752: UserWarning: A worker stopped while some jobs were given to the executor. This can be caused by a too short worker timeout or by a memory leak.\n",
+ " warnings.warn(\n",
+ "[Parallel(n_jobs=12)]: Done 426 tasks | elapsed: 15.8s\n",
+ "[Parallel(n_jobs=12)]: Done 776 tasks | elapsed: 26.5s\n",
+ "[Parallel(n_jobs=12)]: Done 1226 tasks | elapsed: 41.0s\n",
+ "[Parallel(n_jobs=12)]: Done 1776 tasks | elapsed: 58.9s\n",
+ "[Parallel(n_jobs=12)]: Done 2426 tasks | elapsed: 1.3min\n",
+ "[Parallel(n_jobs=12)]: Done 3176 tasks | elapsed: 1.8min\n",
+ "[Parallel(n_jobs=12)]: Done 4026 tasks | elapsed: 2.2min\n",
+ "[Parallel(n_jobs=12)]: Done 4292 out of 4292 | elapsed: 2.4min finished\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " gene | \n",
+ " tx | \n",
+ " de_coef | \n",
+ " de_se | \n",
+ " de_pval | \n",
+ " dv_coef | \n",
+ " dv_se | \n",
+ " dv_pval | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 937 | \n",
+ " ENSG00000000419 | \n",
+ " treatment | \n",
+ " 0.364687 | \n",
+ " 0.072641 | \n",
+ " 0.000086 | \n",
+ " -0.078413 | \n",
+ " 0.299268 | \n",
+ " 0.792242 | \n",
+ "
\n",
+ " \n",
+ " 1668 | \n",
+ " ENSG00000001497 | \n",
+ " treatment | \n",
+ " 0.039923 | \n",
+ " 0.077712 | \n",
+ " 0.607279 | \n",
+ " 0.199968 | \n",
+ " 0.302095 | \n",
+ " 0.498100 | \n",
+ "
\n",
+ " \n",
+ " 104 | \n",
+ " ENSG00000001629 | \n",
+ " treatment | \n",
+ " 0.566675 | \n",
+ " 0.073385 | \n",
+ " 0.000075 | \n",
+ " -0.052604 | \n",
+ " 0.231213 | \n",
+ " 0.819436 | \n",
+ "
\n",
+ " \n",
+ " 1650 | \n",
+ " ENSG00000001631 | \n",
+ " treatment | \n",
+ " 0.174073 | \n",
+ " 0.070125 | \n",
+ " 0.013597 | \n",
+ " -0.138273 | \n",
+ " 0.276711 | \n",
+ " 0.593681 | \n",
+ "
\n",
+ " \n",
+ " 1662 | \n",
+ " ENSG00000002549 | \n",
+ " treatment | \n",
+ " 2.020447 | \n",
+ " 0.051671 | \n",
+ " 0.000064 | \n",
+ " 1.234160 | \n",
+ " 0.233148 | \n",
+ " 0.001589 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " gene tx de_coef de_se de_pval dv_coef \\\n",
+ "937 ENSG00000000419 treatment 0.364687 0.072641 0.000086 -0.078413 \n",
+ "1668 ENSG00000001497 treatment 0.039923 0.077712 0.607279 0.199968 \n",
+ "104 ENSG00000001629 treatment 0.566675 0.073385 0.000075 -0.052604 \n",
+ "1650 ENSG00000001631 treatment 0.174073 0.070125 0.013597 -0.138273 \n",
+ "1662 ENSG00000002549 treatment 2.020447 0.051671 0.000064 1.234160 \n",
+ "\n",
+ " dv_se dv_pval \n",
+ "937 0.299268 0.792242 \n",
+ "1668 0.302095 0.498100 \n",
+ "104 0.231213 0.819436 \n",
+ "1650 0.276711 0.593681 \n",
+ "1662 0.233148 0.001589 "
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Run vanilla memento\n",
+ "\n",
+ "memento.ht_1d_moments(\n",
+ " adata,\n",
+ " covariate=covariate_df,\n",
+ " treatment=treatment_df,\n",
+ " num_boot=5000,\n",
+ " verbose=1,\n",
+ " num_cpus=12,\n",
+ " resample_rep=False,\n",
+ " approx=False,\n",
+ ")\n",
+ "\n",
+ "vanilla_memento_result_df = memento.get_1d_ht_result(adata)\n",
+ "\n",
+ "# Sort the result dataframe by gene ensemble name\n",
+ "vanilla_memento_result_df = vanilla_memento_result_df.sort_values(\"gene\")\n",
+ "vanilla_memento_result_df.head(5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dea1b869-2340-4db2-a3e4-873b2ac0829a",
+ "metadata": {},
+ "source": [
+ "#### Run precomputed memento on test case"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "id": "ea16fffc-a84a-4ca6-9c10-fc7dfc2c870a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " coef | \n",
+ " z | \n",
+ " pval | \n",
+ "
\n",
+ " \n",
+ " feature_id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " (ENSG00000000003,) | \n",
+ " 1.891206 | \n",
+ " 15.524457 | \n",
+ " 2.370035e-54 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000000419,) | \n",
+ " -0.550701 | \n",
+ " -9.138716 | \n",
+ " 6.319813e-20 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000000457,) | \n",
+ " -0.029194 | \n",
+ " -0.281349 | \n",
+ " 7.784424e-01 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000000460,) | \n",
+ " -0.235270 | \n",
+ " -1.346930 | \n",
+ " 1.780027e-01 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000000938,) | \n",
+ " -4.475637 | \n",
+ " -40.313418 | \n",
+ " 0.000000e+00 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " coef z pval\n",
+ "feature_id \n",
+ "(ENSG00000000003,) 1.891206 15.524457 2.370035e-54\n",
+ "(ENSG00000000419,) -0.550701 -9.138716 6.319813e-20\n",
+ "(ENSG00000000457,) -0.029194 -0.281349 7.784424e-01\n",
+ "(ENSG00000000460,) -0.235270 -1.346930 1.780027e-01\n",
+ "(ENSG00000000938,) -4.475637 -40.313418 0.000000e+00"
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Setup\n",
+ "treatment_dim = \"cell_type_ontology_term_id\"\n",
+ "covariate_dims = \"donor_id\" # supply these as comma separated strings or set to None for no covariates\n",
+ "\n",
+ "# Run precomputed memento\n",
+ "precomputed_memento_result_df, _ = precomputed_memento.compute_all(\n",
+ " cube_path=precomputed_memento_estimator_cube_path,\n",
+ " query_filter=test_case[\"precomputed_memento_query\"],\n",
+ " treatment=treatment_dim,\n",
+ " covariates_str=covariate_dims,\n",
+ " n_processes=8,\n",
+ ")\n",
+ "\n",
+ "# Sort the result dataframe by gene ensemble name\n",
+ "precomputed_memento_result_df = precomputed_memento_result_df.sort_values(\"feature_id\")\n",
+ "precomputed_memento_result_df.head(5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "756e7ded-b081-44fb-ae7b-60c37f957220",
+ "metadata": {},
+ "source": [
+ "#### Compare vanilla memento result to precomputed memento result"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "id": "5252dc58-4132-48fc-b402-bbc822de4d33",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "vanilla memento result dataframe length: 4292\n",
+ "precomputed memento result dataframe length: 20693\n",
+ "filtered precomputed memento result dataframe length: 4292\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " coef | \n",
+ " z | \n",
+ " pval | \n",
+ "
\n",
+ " \n",
+ " feature_id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " (ENSG00000000419,) | \n",
+ " -0.550701 | \n",
+ " -9.138716 | \n",
+ " 6.319813e-20 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000001497,) | \n",
+ " -0.266663 | \n",
+ " -4.249166 | \n",
+ " 2.145684e-05 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000001629,) | \n",
+ " -0.769980 | \n",
+ " -12.426287 | \n",
+ " 1.881732e-35 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000001631,) | \n",
+ " -0.377861 | \n",
+ " -6.240487 | \n",
+ " 4.362094e-10 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000002549,) | \n",
+ " -2.272766 | \n",
+ " -50.409757 | \n",
+ " 0.000000e+00 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " coef z pval\n",
+ "feature_id \n",
+ "(ENSG00000000419,) -0.550701 -9.138716 6.319813e-20\n",
+ "(ENSG00000001497,) -0.266663 -4.249166 2.145684e-05\n",
+ "(ENSG00000001629,) -0.769980 -12.426287 1.881732e-35\n",
+ "(ENSG00000001631,) -0.377861 -6.240487 4.362094e-10\n",
+ "(ENSG00000002549,) -2.272766 -50.409757 0.000000e+00"
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# construct a set of all the genes in the vanilla memento result dataframe to serve as a structure to\n",
+ "# filter the precomputed memento result dataframe\n",
+ "vanilla_memento_gene_set = set(vanilla_memento_result_df.gene)\n",
+ "\n",
+ "# transform vanilla_memento_gene_set into a set of single tuples to match\n",
+ "# the data type of precomputed memento result dataframe index\n",
+ "filter_feature_ids = {(v,) for v in vanilla_memento_gene_set}\n",
+ "\n",
+ "# filter the precomputed memento result df to only include genes in the vanilla memento result dataframe\n",
+ "filtered_precomputed_memento_result_df = precomputed_memento_result_df[\n",
+ " precomputed_memento_result_df.index.isin(filter_feature_ids)\n",
+ "]\n",
+ "\n",
+ "print(f\"vanilla memento result dataframe length: {len(vanilla_memento_result_df)}\")\n",
+ "print(f\"precomputed memento result dataframe length: {len(precomputed_memento_result_df)}\")\n",
+ "print(f\"filtered precomputed memento result dataframe length: {len(filtered_precomputed_memento_result_df)}\")\n",
+ "\n",
+ "filtered_precomputed_memento_result_df.head(5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0be58973-7a8e-4848-a879-81c90ac5329f",
+ "metadata": {},
+ "source": [
+ "##### Plot the p-values for vanilla memento and precomputed memento"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "id": "a6830a0f-6339-4939-a903-4e043d34ad6a",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/pandas/core/arraylike.py:399: RuntimeWarning: divide by zero encountered in log10\n",
+ " result = getattr(ufunc, method)(*inputs, **kwargs)\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "x = -1 * np.log10(vanilla_memento_result_df[\"de_pval\"])\n",
+ "y = -1 * np.log10(filtered_precomputed_memento_result_df[\"pval\"])\n",
+ "\n",
+ "plt.scatter(x, y, label=\"p values\")\n",
+ "\n",
+ "plt.plot(x, x, color=\"black\", label=\"Line with Slope 1\")\n",
+ "\n",
+ "plt.xlabel(\"vanilla\")\n",
+ "plt.ylabel(\"precomputed\")\n",
+ "\n",
+ "plt.title(\"Scatter Plot of p values\")\n",
+ "plt.legend()\n",
+ "\n",
+ "plt.grid(True)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "937e5d6c-4c88-4e47-a247-5037792ecf56",
+ "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.10.13"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/scientific_validation_notebooks/precomputed_memento_validation_testcase2.ipynb b/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/scientific_validation_notebooks/precomputed_memento_validation_testcase2.ipynb
new file mode 100644
index 000000000..09e549169
--- /dev/null
+++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/scientific_validation_notebooks/precomputed_memento_validation_testcase2.ipynb
@@ -0,0 +1,714 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "6caacabf-1002-47fb-b38d-96fcb4f10133",
+ "metadata": {},
+ "source": [
+ "## Scientific validation of memento implementations\n",
+ "\n",
+ "This notebook runs through test cases for differential expression where the p-value outputs\n",
+ "of vanilla memento implementation are compared to the p-value outputs of precomputed memento\n",
+ "implementation\n",
+ "\n",
+ "**NOTE**:\n",
+ "- Run this notebook from the `cellxgene-census` repo in the `psridharan/memento-sci-val-1` branch\n",
+ "- Download estimator cube from `s3://psridharan-tmp/memento/memento-cube-census-data-2023-12-15/`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "id": "ae923ea5-7c72-4743-aea1-c854593fc1ec",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "import memento\n",
+ "import numpy as np\n",
+ "\n",
+ "import cellxgene_census\n",
+ "import cellxgene_census.experimental.diffexp.memento.diff_expr as precomputed_memento\n",
+ "\n",
+ "census = cellxgene_census.open_soma(census_version=\"2023-12-15\")\n",
+ "precomputed_memento_estimator_cube_path = (\n",
+ " \"/Users/psridharan/code/cellxgene-census/memento-cubes/memento-cube-census-data-2023-12-15\"\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dea834b2-0db9-49c2-a206-2251863dc891",
+ "metadata": {},
+ "source": [
+ "## TEST CASE 2: Single Dataset, Single Donor, No Batch Effects\n",
+ "- Collection: A Web Portal and Workbench for Biological Dissection of Single Cell COVID-19 Host Responses\n",
+ "- Dataset: Individual Single-Cell RNA-seq PBMC Data from Arunachalam et al.\n",
+ " - Assay: 10X\n",
+ "- Comparison:\n",
+ " - classical monocytes vs T-cells in one donor"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "id": "59ccd78c-0161-4f5b-a3ad-485943465cda",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'census_obs_query': \"is_primary_data == True and dataset_id in ['59b69042-47c2-47fd-ad03-d21beb99818f'] and disease in ['normal'] and cell_type in ['classical monocyte', 'central memory CD4-positive, alpha-beta T cell'] and donor_id == 'cov17'\",\n",
+ " 'precomputed_memento_query': \"dataset_id in ['59b69042-47c2-47fd-ad03-d21beb99818f'] and disease_ontology_term_id in ['PATO:0000461'] and cell_type_ontology_term_id in ['CL:0000860', 'CL:0000904'] and donor_id == 'cov17'\"}"
+ ]
+ },
+ "execution_count": 32,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# data\n",
+ "dataset_aruna = \"59b69042-47c2-47fd-ad03-d21beb99818f\"\n",
+ "disease_info_map = {\"normal\": \"PATO:0000461\"}\n",
+ "\n",
+ "cell_type_monocyte = \"classical monocyte\"\n",
+ "cell_type_t_cell = \"central memory CD4-positive, alpha-beta T cell\"\n",
+ "cell_type_info_map = {cell_type_monocyte: \"CL:0000860\", cell_type_t_cell: \"CL:0000904\"}\n",
+ "\n",
+ "\n",
+ "# query params\n",
+ "datasets = [dataset_aruna]\n",
+ "\n",
+ "diseases = list(disease_info_map.keys())\n",
+ "disease_ontology_ids = list(disease_info_map.values())\n",
+ "\n",
+ "donor_id = \"cov17\"\n",
+ "\n",
+ "cell_types = list(cell_type_info_map.keys())\n",
+ "cell_type_ontology_ids = list(cell_type_info_map.values())\n",
+ "\n",
+ "# a test case is encapsulated as a census query and as a query to precomputed memento cube.\n",
+ "# The precomputed memento cube is the same as the census query except that the precomputed memento cube\n",
+ "# stores ontology term IDs and such the query should be formulated with ontology term IDs\n",
+ "test_case = {\n",
+ " \"census_obs_query\": f\"is_primary_data == True and dataset_id in {datasets} and disease in {diseases} and cell_type in {cell_types} and donor_id == '{donor_id}'\",\n",
+ " \"precomputed_memento_query\": f\"dataset_id in {datasets} and disease_ontology_term_id in {disease_ontology_ids} and cell_type_ontology_term_id in {cell_type_ontology_ids} and donor_id == '{donor_id}'\",\n",
+ "}\n",
+ "\n",
+ "test_case"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3bd2c1f8-52eb-49f6-b5fd-937323618db8",
+ "metadata": {},
+ "source": [
+ "#### Get anndata object for test case"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "id": "3fdd1931-32e4-4874-9f6c-c496099cc38d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "cell_type dataset_id donor_id\n",
+ "classical monocyte 59b69042-47c2-47fd-ad03-d21beb99818f cov17 2050\n",
+ "central memory CD4-positive, alpha-beta T cell 59b69042-47c2-47fd-ad03-d21beb99818f cov17 498\n",
+ "Name: count, dtype: int64"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "adata = cellxgene_census.get_anndata(\n",
+ " census=census,\n",
+ " organism=\"homo_sapiens\",\n",
+ " obsm_layers=[\"scvi\"],\n",
+ " obs_value_filter=test_case[\"census_obs_query\"],\n",
+ ")\n",
+ "\n",
+ "adata.obs[[\"cell_type\", \"dataset_id\", \"donor_id\"]].value_counts()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7dbdfafa-2b6d-438d-baf5-f485e162a8ab",
+ "metadata": {},
+ "source": [
+ "#### Run vanilla memento on test case"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "id": "3bd6853a-1896-4b57-bd2b-f313add62be0",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/memento/main.py:181: FutureWarning: errors='ignore' is deprecated and will raise in a future version. Use to_numeric without passing `errors` and catch exceptions explicitly instead\n",
+ " df[col] = pd.to_numeric(df[col], errors='ignore')\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Assuming sequenced to 50%, dataset specific number\n",
+ "adata.var.index = adata.var[\"feature_id\"].values # use feature_id to refer to the gene\n",
+ "adata.obs[\"q\"] = 0.15\n",
+ "\n",
+ "\n",
+ "# Classical monocyte encoded as 1\n",
+ "adata.obs[\"treatment\"] = (adata.obs[\"cell_type\"] == \"classical monocyte\").astype(int)\n",
+ "\n",
+ "# Setup memento\n",
+ "memento.setup_memento(adata, q_column=\"q\", trim_percent=0.1) # trim_percent tunes cell size calculation\n",
+ "memento.create_groups(adata, label_columns=[\"treatment\"])\n",
+ "memento.compute_1d_moments(adata, min_perc_group=0.9)\n",
+ "group_metadata = memento.get_groups(adata)\n",
+ "\n",
+ "treatment_df = group_metadata[[\"treatment\"]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "id": "5f441f7d-7f38-4644-b4ad-e7e2c0cb2383",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " treatment | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " sg^1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " sg^0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " treatment\n",
+ "sg^1 1\n",
+ "sg^0 0"
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "treatment_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "id": "140b85b0-54c6-4106-a331-d0daf51fa931",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "[Parallel(n_jobs=12)]: Using backend LokyBackend with 12 concurrent workers.\n",
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/tiledb/ctx.py:560: UserWarning: TileDB is a multithreading library and deadlocks are likely if fork() is called after a TileDB context has been created (such as for array access). To safely use TileDB with multiprocessing or concurrent.futures, choose 'spawn' as the start method for child processes. For example: multiprocessing.set_start_method('spawn').\n",
+ " warnings.warn(\n",
+ "[Parallel(n_jobs=12)]: Done 26 tasks | elapsed: 3.4s\n",
+ "[Parallel(n_jobs=12)]: Done 176 tasks | elapsed: 4.9s\n",
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/joblib/externals/loky/process_executor.py:752: UserWarning: A worker stopped while some jobs were given to the executor. This can be caused by a too short worker timeout or by a memory leak.\n",
+ " warnings.warn(\n",
+ "[Parallel(n_jobs=12)]: Done 576 tasks | elapsed: 9.2s\n",
+ "[Parallel(n_jobs=12)]: Done 1276 tasks | elapsed: 18.8s\n",
+ "[Parallel(n_jobs=12)]: Done 2176 tasks | elapsed: 29.1s\n",
+ "[Parallel(n_jobs=12)]: Done 3276 tasks | elapsed: 41.9s\n",
+ "[Parallel(n_jobs=12)]: Done 4336 tasks | elapsed: 57.8s\n",
+ "[Parallel(n_jobs=12)]: Done 5312 out of 5335 | elapsed: 1.2min remaining: 0.3s\n",
+ "[Parallel(n_jobs=12)]: Done 5335 out of 5335 | elapsed: 1.2min finished\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " gene | \n",
+ " tx | \n",
+ " de_coef | \n",
+ " de_se | \n",
+ " de_pval | \n",
+ " dv_coef | \n",
+ " dv_se | \n",
+ " dv_pval | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 1122 | \n",
+ " ENSG00000000419 | \n",
+ " treatment | \n",
+ " 0.567164 | \n",
+ " 0.140124 | \n",
+ " 0.001202 | \n",
+ " -0.251849 | \n",
+ " 0.562401 | \n",
+ " 0.629074 | \n",
+ "
\n",
+ " \n",
+ " 2045 | \n",
+ " ENSG00000001497 | \n",
+ " treatment | \n",
+ " 0.178305 | \n",
+ " 0.181198 | \n",
+ " 0.312737 | \n",
+ " -0.397483 | \n",
+ " 0.568722 | \n",
+ " 0.471106 | \n",
+ "
\n",
+ " \n",
+ " 136 | \n",
+ " ENSG00000001629 | \n",
+ " treatment | \n",
+ " 0.573830 | \n",
+ " 0.147534 | \n",
+ " 0.001664 | \n",
+ " 0.150754 | \n",
+ " 0.466089 | \n",
+ " 0.741252 | \n",
+ "
\n",
+ " \n",
+ " 2020 | \n",
+ " ENSG00000001631 | \n",
+ " treatment | \n",
+ " 0.356685 | \n",
+ " 0.137996 | \n",
+ " 0.010998 | \n",
+ " -0.062119 | \n",
+ " 0.595587 | \n",
+ " 0.898020 | \n",
+ "
\n",
+ " \n",
+ " 369 | \n",
+ " ENSG00000002330 | \n",
+ " treatment | \n",
+ " 0.293128 | \n",
+ " 0.131607 | \n",
+ " 0.027994 | \n",
+ " -0.000774 | \n",
+ " 0.581164 | \n",
+ " 0.998200 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " gene tx de_coef de_se de_pval dv_coef \\\n",
+ "1122 ENSG00000000419 treatment 0.567164 0.140124 0.001202 -0.251849 \n",
+ "2045 ENSG00000001497 treatment 0.178305 0.181198 0.312737 -0.397483 \n",
+ "136 ENSG00000001629 treatment 0.573830 0.147534 0.001664 0.150754 \n",
+ "2020 ENSG00000001631 treatment 0.356685 0.137996 0.010998 -0.062119 \n",
+ "369 ENSG00000002330 treatment 0.293128 0.131607 0.027994 -0.000774 \n",
+ "\n",
+ " dv_se dv_pval \n",
+ "1122 0.562401 0.629074 \n",
+ "2045 0.568722 0.471106 \n",
+ "136 0.466089 0.741252 \n",
+ "2020 0.595587 0.898020 \n",
+ "369 0.581164 0.998200 "
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Run vanilla memento\n",
+ "# NOTE: No covariates specified!\n",
+ "memento.ht_1d_moments(\n",
+ " adata, treatment=treatment_df, num_boot=5000, verbose=1, num_cpus=12, resample_rep=False, approx=False\n",
+ ")\n",
+ "\n",
+ "vanilla_memento_result_df = memento.get_1d_ht_result(adata)\n",
+ "\n",
+ "# Sort the result dataframe by gene ensemble name\n",
+ "vanilla_memento_result_df = vanilla_memento_result_df.sort_values(\"gene\")\n",
+ "vanilla_memento_result_df.head(5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dea1b869-2340-4db2-a3e4-873b2ac0829a",
+ "metadata": {},
+ "source": [
+ "#### Run precomputed memento on test case"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "id": "ea16fffc-a84a-4ca6-9c10-fc7dfc2c870a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " coef | \n",
+ " z | \n",
+ " pval | \n",
+ "
\n",
+ " \n",
+ " feature_id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " (ENSG00000000003,) | \n",
+ " 2.141824 | \n",
+ " 4.180162 | \n",
+ " 2.913019e-05 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000000419,) | \n",
+ " -0.782643 | \n",
+ " -6.067012 | \n",
+ " 1.303122e-09 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000000457,) | \n",
+ " -0.087643 | \n",
+ " -0.472080 | \n",
+ " 6.368700e-01 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000000460,) | \n",
+ " -0.330125 | \n",
+ " -0.906739 | \n",
+ " 3.645451e-01 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000000938,) | \n",
+ " -4.277515 | \n",
+ " -15.819741 | \n",
+ " 2.274272e-56 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " coef z pval\n",
+ "feature_id \n",
+ "(ENSG00000000003,) 2.141824 4.180162 2.913019e-05\n",
+ "(ENSG00000000419,) -0.782643 -6.067012 1.303122e-09\n",
+ "(ENSG00000000457,) -0.087643 -0.472080 6.368700e-01\n",
+ "(ENSG00000000460,) -0.330125 -0.906739 3.645451e-01\n",
+ "(ENSG00000000938,) -4.277515 -15.819741 2.274272e-56"
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Setup\n",
+ "treatment_dim = \"cell_type_ontology_term_id\"\n",
+ "covariate_dims = None # no covariates specified by use of None\n",
+ "\n",
+ "# Run precomputed memento\n",
+ "precomputed_memento_result_df, _ = precomputed_memento.compute_all(\n",
+ " cube_path=precomputed_memento_estimator_cube_path,\n",
+ " query_filter=test_case[\"precomputed_memento_query\"],\n",
+ " treatment=treatment_dim,\n",
+ " covariates_str=covariate_dims,\n",
+ " n_processes=8,\n",
+ ")\n",
+ "\n",
+ "# Sort the result dataframe by gene ensemble name\n",
+ "precomputed_memento_result_df = precomputed_memento_result_df.sort_values(\"feature_id\")\n",
+ "precomputed_memento_result_df.head(5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "756e7ded-b081-44fb-ae7b-60c37f957220",
+ "metadata": {},
+ "source": [
+ "#### Compare vanilla memento result to precomputed memento result"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "id": "5252dc58-4132-48fc-b402-bbc822de4d33",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "vanilla memento result dataframe length: 5335\n",
+ "precomputed memento result dataframe length: 18561\n",
+ "filtered precomputed memento result dataframe length: 5335\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " coef | \n",
+ " z | \n",
+ " pval | \n",
+ "
\n",
+ " \n",
+ " feature_id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " (ENSG00000000419,) | \n",
+ " -0.782643 | \n",
+ " -6.067012 | \n",
+ " 1.303122e-09 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000001497,) | \n",
+ " -0.425436 | \n",
+ " -2.739698 | \n",
+ " 6.149557e-03 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000001629,) | \n",
+ " -0.833652 | \n",
+ " -6.176022 | \n",
+ " 6.573672e-10 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000001631,) | \n",
+ " -0.596159 | \n",
+ " -4.674299 | \n",
+ " 2.949596e-06 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000002330,) | \n",
+ " -0.509686 | \n",
+ " -4.300392 | \n",
+ " 1.704964e-05 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " coef z pval\n",
+ "feature_id \n",
+ "(ENSG00000000419,) -0.782643 -6.067012 1.303122e-09\n",
+ "(ENSG00000001497,) -0.425436 -2.739698 6.149557e-03\n",
+ "(ENSG00000001629,) -0.833652 -6.176022 6.573672e-10\n",
+ "(ENSG00000001631,) -0.596159 -4.674299 2.949596e-06\n",
+ "(ENSG00000002330,) -0.509686 -4.300392 1.704964e-05"
+ ]
+ },
+ "execution_count": 38,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# construct a set of all the genes in the vanilla memento result dataframe to serve as a structure to\n",
+ "# filter the precomputed memento result dataframe\n",
+ "vanilla_memento_gene_set = set(vanilla_memento_result_df.gene)\n",
+ "\n",
+ "# transform vanilla_memento_gene_set into a set of single tuples to match\n",
+ "# the data type of precomputed memento result dataframe index\n",
+ "filter_feature_ids = {(v,) for v in vanilla_memento_gene_set}\n",
+ "\n",
+ "# filter the precomputed memento result df to only include genes in the vanilla memento result dataframe\n",
+ "filtered_precomputed_memento_result_df = precomputed_memento_result_df[\n",
+ " precomputed_memento_result_df.index.isin(filter_feature_ids)\n",
+ "]\n",
+ "\n",
+ "print(f\"vanilla memento result dataframe length: {len(vanilla_memento_result_df)}\")\n",
+ "print(f\"precomputed memento result dataframe length: {len(precomputed_memento_result_df)}\")\n",
+ "print(f\"filtered precomputed memento result dataframe length: {len(filtered_precomputed_memento_result_df)}\")\n",
+ "\n",
+ "filtered_precomputed_memento_result_df.head(5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0be58973-7a8e-4848-a879-81c90ac5329f",
+ "metadata": {},
+ "source": [
+ "##### Plot the p-values for vanilla memento and precomputed memento"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "id": "a6830a0f-6339-4939-a903-4e043d34ad6a",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/pandas/core/arraylike.py:399: RuntimeWarning: divide by zero encountered in log10\n",
+ " result = getattr(ufunc, method)(*inputs, **kwargs)\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "x = -1 * np.log10(vanilla_memento_result_df[\"de_pval\"])\n",
+ "y = -1 * np.log10(filtered_precomputed_memento_result_df[\"pval\"])\n",
+ "\n",
+ "plt.scatter(x, y, label=\"p values\")\n",
+ "\n",
+ "plt.plot(x, x, color=\"black\", label=\"Line with Slope 1\")\n",
+ "\n",
+ "plt.xlabel(\"vanilla\")\n",
+ "plt.ylabel(\"precomputed\")\n",
+ "\n",
+ "plt.title(\"Scatter Plot of p values\")\n",
+ "plt.legend()\n",
+ "\n",
+ "plt.grid(True)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "937e5d6c-4c88-4e47-a247-5037792ecf56",
+ "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.10.13"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/scientific_validation_notebooks/precomputed_memento_validation_testcase3.ipynb b/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/scientific_validation_notebooks/precomputed_memento_validation_testcase3.ipynb
new file mode 100644
index 000000000..200a0c95b
--- /dev/null
+++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/diffexp/memento/scientific_validation_notebooks/precomputed_memento_validation_testcase3.ipynb
@@ -0,0 +1,718 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "6caacabf-1002-47fb-b38d-96fcb4f10133",
+ "metadata": {},
+ "source": [
+ "## Scientific validation of memento implementations\n",
+ "\n",
+ "This notebook runs through test cases for differential expression where the p-value outputs\n",
+ "of vanilla memento implementation are compared to the p-value outputs of precomputed memento\n",
+ "implementation\n",
+ "\n",
+ "**NOTE**:\n",
+ "- Run this notebook from the `cellxgene-census` repo in the `psridharan/memento-sci-val-1` branch\n",
+ "- Download estimator cube from `s3://psridharan-tmp/memento/memento-cube-census-data-2023-12-15/`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "ae923ea5-7c72-4743-aea1-c854593fc1ec",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "import memento\n",
+ "import numpy as np\n",
+ "\n",
+ "import cellxgene_census\n",
+ "import cellxgene_census.experimental.diffexp.memento.diff_expr as precomputed_memento\n",
+ "\n",
+ "census = cellxgene_census.open_soma(census_version=\"2023-12-15\")\n",
+ "precomputed_memento_estimator_cube_path = (\n",
+ " \"/Users/psridharan/code/cellxgene-census/memento-cubes/memento-cube-census-data-2023-12-15\"\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dea834b2-0db9-49c2-a206-2251863dc891",
+ "metadata": {},
+ "source": [
+ "## TEST CASE 3: Single Dataset, Single Donor, No Batch Effects\n",
+ "- Collection: A Web Portal and Workbench for Biological Dissection of Single Cell COVID-19 Host Responses\n",
+ "- Dataset: Individual Single-Cell RNA-seq PBMC Data from Arunachalam et al.\n",
+ " - Assay: 10X\n",
+ "- Comparison:\n",
+ " - classical monocytes vs natural killer cells in one donor"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "59ccd78c-0161-4f5b-a3ad-485943465cda",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'census_obs_query': \"is_primary_data == True and dataset_id in ['59b69042-47c2-47fd-ad03-d21beb99818f'] and disease in ['normal'] and cell_type in ['classical monocyte', 'natural killer cell'] and donor_id == 'cov17'\",\n",
+ " 'precomputed_memento_query': \"dataset_id in ['59b69042-47c2-47fd-ad03-d21beb99818f'] and disease_ontology_term_id in ['PATO:0000461'] and cell_type_ontology_term_id in ['CL:0000860', 'CL:0000623'] and donor_id == 'cov17'\"}"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# data\n",
+ "dataset_aruna = \"59b69042-47c2-47fd-ad03-d21beb99818f\"\n",
+ "disease_info_map = {\"normal\": \"PATO:0000461\"}\n",
+ "\n",
+ "cell_type_monocyte = \"classical monocyte\"\n",
+ "cell_type_nk = \"natural killer cell\"\n",
+ "cell_type_info_map = {\n",
+ " cell_type_monocyte: \"CL:0000860\",\n",
+ " cell_type_nk: \"CL:0000623\",\n",
+ "}\n",
+ "\n",
+ "\n",
+ "# query params\n",
+ "datasets = [dataset_aruna]\n",
+ "\n",
+ "diseases = list(disease_info_map.keys())\n",
+ "disease_ontology_ids = list(disease_info_map.values())\n",
+ "\n",
+ "donor_id = \"cov17\"\n",
+ "\n",
+ "cell_types = list(cell_type_info_map.keys())\n",
+ "cell_type_ontology_ids = list(cell_type_info_map.values())\n",
+ "\n",
+ "# a test case is encapsulated as a census query and as a query to precomputed memento cube.\n",
+ "# The precomputed memento cube is the same as the census query except that the precomputed memento cube\n",
+ "# stores ontology term IDs and such the query should be formulated with ontology term IDs\n",
+ "test_case = {\n",
+ " \"census_obs_query\": f\"is_primary_data == True and dataset_id in {datasets} and disease in {diseases} and cell_type in {cell_types} and donor_id == '{donor_id}'\",\n",
+ " \"precomputed_memento_query\": f\"dataset_id in {datasets} and disease_ontology_term_id in {disease_ontology_ids} and cell_type_ontology_term_id in {cell_type_ontology_ids} and donor_id == '{donor_id}'\",\n",
+ "}\n",
+ "\n",
+ "test_case"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3bd2c1f8-52eb-49f6-b5fd-937323618db8",
+ "metadata": {},
+ "source": [
+ "#### Get anndata object for test case"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "3fdd1931-32e4-4874-9f6c-c496099cc38d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "cell_type dataset_id donor_id\n",
+ "natural killer cell 59b69042-47c2-47fd-ad03-d21beb99818f cov17 2312\n",
+ "classical monocyte 59b69042-47c2-47fd-ad03-d21beb99818f cov17 2050\n",
+ "Name: count, dtype: int64"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "adata = cellxgene_census.get_anndata(\n",
+ " census=census,\n",
+ " organism=\"homo_sapiens\",\n",
+ " obsm_layers=[\"scvi\"],\n",
+ " obs_value_filter=test_case[\"census_obs_query\"],\n",
+ ")\n",
+ "\n",
+ "adata.obs[[\"cell_type\", \"dataset_id\", \"donor_id\"]].value_counts()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7dbdfafa-2b6d-438d-baf5-f485e162a8ab",
+ "metadata": {},
+ "source": [
+ "#### Run vanilla memento on test case"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "3bd6853a-1896-4b57-bd2b-f313add62be0",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/memento/main.py:181: FutureWarning: errors='ignore' is deprecated and will raise in a future version. Use to_numeric without passing `errors` and catch exceptions explicitly instead\n",
+ " df[col] = pd.to_numeric(df[col], errors='ignore')\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Assuming sequenced to 50%, dataset specific number\n",
+ "adata.var.index = adata.var[\"feature_id\"].values # use feature_id to refer to the gene\n",
+ "adata.obs[\"q\"] = 0.15\n",
+ "\n",
+ "\n",
+ "# Classical monocyte encoded as 1\n",
+ "adata.obs[\"treatment\"] = (adata.obs[\"cell_type\"] == \"classical monocyte\").astype(int)\n",
+ "\n",
+ "# Setup memento\n",
+ "memento.setup_memento(adata, q_column=\"q\", trim_percent=0.1) # trim_percent tunes cell size calculation\n",
+ "memento.create_groups(adata, label_columns=[\"treatment\"])\n",
+ "memento.compute_1d_moments(adata, min_perc_group=0.9)\n",
+ "group_metadata = memento.get_groups(adata)\n",
+ "\n",
+ "treatment_df = group_metadata[[\"treatment\"]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "5f441f7d-7f38-4644-b4ad-e7e2c0cb2383",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " treatment | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " sg^1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " sg^0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " treatment\n",
+ "sg^1 1\n",
+ "sg^0 0"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "treatment_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "140b85b0-54c6-4106-a331-d0daf51fa931",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "[Parallel(n_jobs=12)]: Using backend LokyBackend with 12 concurrent workers.\n",
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/tiledb/ctx.py:560: UserWarning: TileDB is a multithreading library and deadlocks are likely if fork() is called after a TileDB context has been created (such as for array access). To safely use TileDB with multiprocessing or concurrent.futures, choose 'spawn' as the start method for child processes. For example: multiprocessing.set_start_method('spawn').\n",
+ " warnings.warn(\n",
+ "[Parallel(n_jobs=12)]: Done 26 tasks | elapsed: 3.1s\n",
+ "[Parallel(n_jobs=12)]: Done 176 tasks | elapsed: 5.0s\n",
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/joblib/externals/loky/process_executor.py:752: UserWarning: A worker stopped while some jobs were given to the executor. This can be caused by a too short worker timeout or by a memory leak.\n",
+ " warnings.warn(\n",
+ "[Parallel(n_jobs=12)]: Done 516 tasks | elapsed: 9.2s\n",
+ "[Parallel(n_jobs=12)]: Done 1216 tasks | elapsed: 19.9s\n",
+ "[Parallel(n_jobs=12)]: Done 2116 tasks | elapsed: 32.9s\n",
+ "[Parallel(n_jobs=12)]: Done 3216 tasks | elapsed: 47.7s\n",
+ "[Parallel(n_jobs=12)]: Done 4010 tasks | elapsed: 1.0min\n",
+ "[Parallel(n_jobs=12)]: Done 5128 tasks | elapsed: 1.3min\n",
+ "[Parallel(n_jobs=12)]: Done 5224 out of 5247 | elapsed: 1.3min remaining: 0.4s\n",
+ "[Parallel(n_jobs=12)]: Done 5247 out of 5247 | elapsed: 1.3min finished\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " gene | \n",
+ " tx | \n",
+ " de_coef | \n",
+ " de_se | \n",
+ " de_pval | \n",
+ " dv_coef | \n",
+ " dv_se | \n",
+ " dv_pval | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 1121 | \n",
+ " ENSG00000000419 | \n",
+ " treatment | \n",
+ " 0.338290 | \n",
+ " 0.076319 | \n",
+ " 0.000742 | \n",
+ " -0.098810 | \n",
+ " 0.275596 | \n",
+ " 0.720456 | \n",
+ "
\n",
+ " \n",
+ " 1429 | \n",
+ " ENSG00000000938 | \n",
+ " treatment | \n",
+ " 0.729090 | \n",
+ " 0.034047 | \n",
+ " 0.000004 | \n",
+ " 0.025821 | \n",
+ " 0.227044 | \n",
+ " 0.913817 | \n",
+ "
\n",
+ " \n",
+ " 1526 | \n",
+ " ENSG00000001084 | \n",
+ " treatment | \n",
+ " -0.014172 | \n",
+ " 0.095271 | \n",
+ " 0.883423 | \n",
+ " 0.113890 | \n",
+ " 0.282276 | \n",
+ " 0.674865 | \n",
+ "
\n",
+ " \n",
+ " 2039 | \n",
+ " ENSG00000001497 | \n",
+ " treatment | \n",
+ " -0.116158 | \n",
+ " 0.097860 | \n",
+ " 0.236753 | \n",
+ " -0.202672 | \n",
+ " 0.321127 | \n",
+ " 0.525895 | \n",
+ "
\n",
+ " \n",
+ " 132 | \n",
+ " ENSG00000001629 | \n",
+ " treatment | \n",
+ " 0.087122 | \n",
+ " 0.075774 | \n",
+ " 0.245351 | \n",
+ " -0.279639 | \n",
+ " 0.217676 | \n",
+ " 0.193561 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " gene tx de_coef de_se de_pval dv_coef \\\n",
+ "1121 ENSG00000000419 treatment 0.338290 0.076319 0.000742 -0.098810 \n",
+ "1429 ENSG00000000938 treatment 0.729090 0.034047 0.000004 0.025821 \n",
+ "1526 ENSG00000001084 treatment -0.014172 0.095271 0.883423 0.113890 \n",
+ "2039 ENSG00000001497 treatment -0.116158 0.097860 0.236753 -0.202672 \n",
+ "132 ENSG00000001629 treatment 0.087122 0.075774 0.245351 -0.279639 \n",
+ "\n",
+ " dv_se dv_pval \n",
+ "1121 0.275596 0.720456 \n",
+ "1429 0.227044 0.913817 \n",
+ "1526 0.282276 0.674865 \n",
+ "2039 0.321127 0.525895 \n",
+ "132 0.217676 0.193561 "
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Run vanilla memento\n",
+ "# NOTE: No covariates specified!\n",
+ "memento.ht_1d_moments(\n",
+ " adata, treatment=treatment_df, num_boot=5000, verbose=1, num_cpus=12, resample_rep=False, approx=False\n",
+ ")\n",
+ "\n",
+ "vanilla_memento_result_df = memento.get_1d_ht_result(adata)\n",
+ "\n",
+ "# Sort the result dataframe by gene ensemble name\n",
+ "vanilla_memento_result_df = vanilla_memento_result_df.sort_values(\"gene\")\n",
+ "vanilla_memento_result_df.head(5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dea1b869-2340-4db2-a3e4-873b2ac0829a",
+ "metadata": {},
+ "source": [
+ "#### Run precomputed memento on test case"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "ea16fffc-a84a-4ca6-9c10-fc7dfc2c870a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " coef | \n",
+ " z | \n",
+ " pval | \n",
+ "
\n",
+ " \n",
+ " feature_id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " (ENSG00000000419,) | \n",
+ " 0.865093 | \n",
+ " 20.125887 | \n",
+ " 4.378676e-90 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000000457,) | \n",
+ " 0.391230 | \n",
+ " 4.385940 | \n",
+ " 1.154858e-05 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000000460,) | \n",
+ " 0.343338 | \n",
+ " 1.998222 | \n",
+ " 4.569254e-02 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000000938,) | \n",
+ " 1.246206 | \n",
+ " 67.162439 | \n",
+ " 0.000000e+00 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000000971,) | \n",
+ " -1.589614 | \n",
+ " -15.843008 | \n",
+ " 1.571209e-56 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " coef z pval\n",
+ "feature_id \n",
+ "(ENSG00000000419,) 0.865093 20.125887 4.378676e-90\n",
+ "(ENSG00000000457,) 0.391230 4.385940 1.154858e-05\n",
+ "(ENSG00000000460,) 0.343338 1.998222 4.569254e-02\n",
+ "(ENSG00000000938,) 1.246206 67.162439 0.000000e+00\n",
+ "(ENSG00000000971,) -1.589614 -15.843008 1.571209e-56"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Setup\n",
+ "treatment_dim = \"cell_type_ontology_term_id\"\n",
+ "covariate_dims = None # no covariates specified by use of None\n",
+ "\n",
+ "# Run precomputed memento\n",
+ "precomputed_memento_result_df, _ = precomputed_memento.compute_all(\n",
+ " cube_path=precomputed_memento_estimator_cube_path,\n",
+ " query_filter=test_case[\"precomputed_memento_query\"],\n",
+ " treatment=treatment_dim,\n",
+ " covariates_str=covariate_dims,\n",
+ " n_processes=8,\n",
+ ")\n",
+ "\n",
+ "# Sort the result dataframe by gene ensemble name\n",
+ "precomputed_memento_result_df = precomputed_memento_result_df.sort_values(\"feature_id\")\n",
+ "precomputed_memento_result_df.head(5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "756e7ded-b081-44fb-ae7b-60c37f957220",
+ "metadata": {},
+ "source": [
+ "#### Compare vanilla memento result to precomputed memento result"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "5252dc58-4132-48fc-b402-bbc822de4d33",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "vanilla memento result dataframe length: 5247\n",
+ "precomputed memento result dataframe length: 19249\n",
+ "filtered precomputed memento result dataframe length: 5247\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " coef | \n",
+ " z | \n",
+ " pval | \n",
+ "
\n",
+ " \n",
+ " feature_id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " (ENSG00000000419,) | \n",
+ " 0.865093 | \n",
+ " 20.125887 | \n",
+ " 4.378676e-90 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000000938,) | \n",
+ " 1.246206 | \n",
+ " 67.162439 | \n",
+ " 0.000000e+00 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000001084,) | \n",
+ " 0.531871 | \n",
+ " 8.897293 | \n",
+ " 5.722510e-19 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000001497,) | \n",
+ " 0.392839 | \n",
+ " 6.355219 | \n",
+ " 2.081294e-10 | \n",
+ "
\n",
+ " \n",
+ " (ENSG00000001629,) | \n",
+ " 0.602583 | \n",
+ " 12.930142 | \n",
+ " 3.042548e-38 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " coef z pval\n",
+ "feature_id \n",
+ "(ENSG00000000419,) 0.865093 20.125887 4.378676e-90\n",
+ "(ENSG00000000938,) 1.246206 67.162439 0.000000e+00\n",
+ "(ENSG00000001084,) 0.531871 8.897293 5.722510e-19\n",
+ "(ENSG00000001497,) 0.392839 6.355219 2.081294e-10\n",
+ "(ENSG00000001629,) 0.602583 12.930142 3.042548e-38"
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# construct a set of all the genes in the vanilla memento result dataframe to serve as a structure to\n",
+ "# filter the precomputed memento result dataframe\n",
+ "vanilla_memento_gene_set = set(vanilla_memento_result_df.gene)\n",
+ "\n",
+ "# transform vanilla_memento_gene_set into a set of single tuples to match\n",
+ "# the data type of precomputed memento result dataframe index\n",
+ "filter_feature_ids = {(v,) for v in vanilla_memento_gene_set}\n",
+ "\n",
+ "# filter the precomputed memento result df to only include genes in the vanilla memento result dataframe\n",
+ "filtered_precomputed_memento_result_df = precomputed_memento_result_df[\n",
+ " precomputed_memento_result_df.index.isin(filter_feature_ids)\n",
+ "]\n",
+ "\n",
+ "print(f\"vanilla memento result dataframe length: {len(vanilla_memento_result_df)}\")\n",
+ "print(f\"precomputed memento result dataframe length: {len(precomputed_memento_result_df)}\")\n",
+ "print(f\"filtered precomputed memento result dataframe length: {len(filtered_precomputed_memento_result_df)}\")\n",
+ "\n",
+ "filtered_precomputed_memento_result_df.head(5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0be58973-7a8e-4848-a879-81c90ac5329f",
+ "metadata": {},
+ "source": [
+ "##### Plot the p-values for vanilla memento and precomputed memento"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "a6830a0f-6339-4939-a903-4e043d34ad6a",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/psridharan/miniconda3/envs/vanilla-memento/lib/python3.10/site-packages/pandas/core/arraylike.py:399: RuntimeWarning: divide by zero encountered in log10\n",
+ " result = getattr(ufunc, method)(*inputs, **kwargs)\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "