DeltaTopic Basics

[1]:
!python3 -m pip install DeltaTopic
Requirement already satisfied: DeltaTopic in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (0.0.2)
Requirement already satisfied: scanpy==1.9.3 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from DeltaTopic) (1.9.3)
Requirement already satisfied: scipy==1.8.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from DeltaTopic) (1.8.0)
Requirement already satisfied: anndata==0.7.8 in /home/BCCRC.CA/yzhang/.local/share/r-miniconda/envs/DeltaTopic/lib/python3.8/site-packages (from DeltaTopic) (0.7.8)
Requirement already satisfied: pandas==1.4.1 in /home/BCCRC.CA/yzhang/.local/share/r-miniconda/envs/DeltaTopic/lib/python3.8/site-packages (from DeltaTopic) (1.4.1)
Requirement already satisfied: numpy==1.21.5 in /home/BCCRC.CA/yzhang/.local/share/r-miniconda/envs/DeltaTopic/lib/python3.8/site-packages (from DeltaTopic) (1.21.5)
Requirement already satisfied: pytorch-lightning==1.9.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from DeltaTopic) (1.9.0)
Requirement already satisfied: h5py==3.6.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from DeltaTopic) (3.6.0)
Requirement already satisfied: torch==2.0.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from DeltaTopic) (2.0.0)
Requirement already satisfied: xlrd<2.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from anndata==0.7.8->DeltaTopic) (1.2.0)
Requirement already satisfied: natsort in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from anndata==0.7.8->DeltaTopic) (8.3.1)
Requirement already satisfied: packaging>=20 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from anndata==0.7.8->DeltaTopic) (21.3)
Requirement already satisfied: python-dateutil>=2.8.1 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from pandas==1.4.1->DeltaTopic) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from pandas==1.4.1->DeltaTopic) (2022.1)
Requirement already satisfied: typing-extensions>=4.0.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from pytorch-lightning==1.9.0->DeltaTopic) (4.1.1)
Requirement already satisfied: PyYAML>=5.4 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from pytorch-lightning==1.9.0->DeltaTopic) (6.0)
Requirement already satisfied: lightning-utilities>=0.4.2 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from pytorch-lightning==1.9.0->DeltaTopic) (0.8.0)
Requirement already satisfied: tqdm>=4.57.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from pytorch-lightning==1.9.0->DeltaTopic) (4.65.0)
Requirement already satisfied: fsspec[http]>2021.06.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from pytorch-lightning==1.9.0->DeltaTopic) (2023.4.0)
Requirement already satisfied: torchmetrics>=0.7.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from pytorch-lightning==1.9.0->DeltaTopic) (0.11.4)
Requirement already satisfied: scikit-learn>=0.22 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from scanpy==1.9.3->DeltaTopic) (1.2.2)
Requirement already satisfied: networkx>=2.3 in /home/BCCRC.CA/yzhang/.local/share/r-miniconda/envs/DeltaTopic/lib/python3.8/site-packages (from scanpy==1.9.3->DeltaTopic) (3.1)
Requirement already satisfied: numba>=0.41.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from scanpy==1.9.3->DeltaTopic) (0.56.4)
Requirement already satisfied: matplotlib>=3.4 in /home/BCCRC.CA/yzhang/.local/share/r-miniconda/envs/DeltaTopic/lib/python3.8/site-packages (from scanpy==1.9.3->DeltaTopic) (3.7.1)
Requirement already satisfied: session-info in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from scanpy==1.9.3->DeltaTopic) (1.0.0)
Requirement already satisfied: statsmodels>=0.10.0rc2 in /home/BCCRC.CA/yzhang/.local/share/r-miniconda/envs/DeltaTopic/lib/python3.8/site-packages (from scanpy==1.9.3->DeltaTopic) (0.14.0)
Requirement already satisfied: joblib in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from scanpy==1.9.3->DeltaTopic) (1.2.0)
Requirement already satisfied: seaborn in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from scanpy==1.9.3->DeltaTopic) (0.12.2)
Requirement already satisfied: patsy in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from scanpy==1.9.3->DeltaTopic) (0.5.2)
Requirement already satisfied: umap-learn>=0.3.10 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from scanpy==1.9.3->DeltaTopic) (0.5.3)
Requirement already satisfied: jinja2 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from torch==2.0.0->DeltaTopic) (3.0.3)
Requirement already satisfied: sympy in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from torch==2.0.0->DeltaTopic) (1.11.1)
Requirement already satisfied: nvidia-cusolver-cu11==11.4.0.1 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from torch==2.0.0->DeltaTopic) (11.4.0.1)
Requirement already satisfied: nvidia-nccl-cu11==2.14.3 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from torch==2.0.0->DeltaTopic) (2.14.3)
Requirement already satisfied: nvidia-nvtx-cu11==11.7.91 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from torch==2.0.0->DeltaTopic) (11.7.91)
Requirement already satisfied: triton==2.0.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from torch==2.0.0->DeltaTopic) (2.0.0)
Requirement already satisfied: nvidia-curand-cu11==10.2.10.91 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from torch==2.0.0->DeltaTopic) (10.2.10.91)
Requirement already satisfied: nvidia-cudnn-cu11==8.5.0.96 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from torch==2.0.0->DeltaTopic) (8.5.0.96)
Requirement already satisfied: filelock in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from torch==2.0.0->DeltaTopic) (3.6.0)
Requirement already satisfied: nvidia-cuda-runtime-cu11==11.7.99 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from torch==2.0.0->DeltaTopic) (11.7.99)
Requirement already satisfied: nvidia-cufft-cu11==10.9.0.58 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from torch==2.0.0->DeltaTopic) (10.9.0.58)
Requirement already satisfied: nvidia-cusparse-cu11==11.7.4.91 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from torch==2.0.0->DeltaTopic) (11.7.4.91)
Requirement already satisfied: nvidia-cublas-cu11==11.10.3.66 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from torch==2.0.0->DeltaTopic) (11.10.3.66)
Requirement already satisfied: nvidia-cuda-cupti-cu11==11.7.101 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from torch==2.0.0->DeltaTopic) (11.7.101)
Requirement already satisfied: nvidia-cuda-nvrtc-cu11==11.7.99 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from torch==2.0.0->DeltaTopic) (11.7.99)
Requirement already satisfied: wheel in /home/BCCRC.CA/yzhang/.local/share/r-miniconda/envs/DeltaTopic/lib/python3.8/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch==2.0.0->DeltaTopic) (0.38.4)
Requirement already satisfied: setuptools in /home/BCCRC.CA/yzhang/.local/share/r-miniconda/envs/DeltaTopic/lib/python3.8/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch==2.0.0->DeltaTopic) (66.0.0)
Requirement already satisfied: cmake in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from triton==2.0.0->torch==2.0.0->DeltaTopic) (3.26.3)
Requirement already satisfied: lit in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from triton==2.0.0->torch==2.0.0->DeltaTopic) (16.0.2)
Requirement already satisfied: aiohttp!=4.0.0a0,!=4.0.0a1 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from fsspec[http]>2021.06.0->pytorch-lightning==1.9.0->DeltaTopic) (3.8.4)
Requirement already satisfied: requests in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from fsspec[http]>2021.06.0->pytorch-lightning==1.9.0->DeltaTopic) (2.28.2)
Requirement already satisfied: fonttools>=4.22.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from matplotlib>=3.4->scanpy==1.9.3->DeltaTopic) (4.31.2)
Requirement already satisfied: importlib-resources>=3.2.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from matplotlib>=3.4->scanpy==1.9.3->DeltaTopic) (5.4.0)
Requirement already satisfied: pyparsing>=2.3.1 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from matplotlib>=3.4->scanpy==1.9.3->DeltaTopic) (3.0.7)
Requirement already satisfied: cycler>=0.10 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from matplotlib>=3.4->scanpy==1.9.3->DeltaTopic) (0.11.0)
Requirement already satisfied: kiwisolver>=1.0.1 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from matplotlib>=3.4->scanpy==1.9.3->DeltaTopic) (1.4.0)
Requirement already satisfied: contourpy>=1.0.1 in /home/BCCRC.CA/yzhang/.local/share/r-miniconda/envs/DeltaTopic/lib/python3.8/site-packages (from matplotlib>=3.4->scanpy==1.9.3->DeltaTopic) (1.0.7)
Requirement already satisfied: pillow>=6.2.0 in /home/BCCRC.CA/yzhang/.local/share/r-miniconda/envs/DeltaTopic/lib/python3.8/site-packages (from matplotlib>=3.4->scanpy==1.9.3->DeltaTopic) (9.5.0)
Requirement already satisfied: llvmlite<0.40,>=0.39.0dev0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from numba>=0.41.0->scanpy==1.9.3->DeltaTopic) (0.39.1)
Requirement already satisfied: importlib-metadata in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from numba>=0.41.0->scanpy==1.9.3->DeltaTopic) (6.3.0)
Requirement already satisfied: six>=1.5 in /home/BCCRC.CA/yzhang/.local/share/r-miniconda/envs/DeltaTopic/lib/python3.8/site-packages (from python-dateutil>=2.8.1->pandas==1.4.1->DeltaTopic) (1.16.0)
Requirement already satisfied: threadpoolctl>=2.0.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from scikit-learn>=0.22->scanpy==1.9.3->DeltaTopic) (3.1.0)
Requirement already satisfied: pynndescent>=0.5 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from umap-learn>=0.3.10->scanpy==1.9.3->DeltaTopic) (0.5.10)
Requirement already satisfied: MarkupSafe>=2.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from jinja2->torch==2.0.0->DeltaTopic) (2.1.0)
Requirement already satisfied: stdlib-list in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from session-info->scanpy==1.9.3->DeltaTopic) (0.8.0)
Requirement already satisfied: mpmath>=0.19 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from sympy->torch==2.0.0->DeltaTopic) (1.3.0)
Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning==1.9.0->DeltaTopic) (4.0.2)
Requirement already satisfied: attrs>=17.3.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning==1.9.0->DeltaTopic) (21.4.0)
Requirement already satisfied: aiosignal>=1.1.2 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning==1.9.0->DeltaTopic) (1.3.1)
Requirement already satisfied: frozenlist>=1.1.1 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning==1.9.0->DeltaTopic) (1.3.3)
Requirement already satisfied: charset-normalizer<4.0,>=2.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning==1.9.0->DeltaTopic) (3.1.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning==1.9.0->DeltaTopic) (6.0.4)
Requirement already satisfied: yarl<2.0,>=1.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning==1.9.0->DeltaTopic) (1.9.2)
Requirement already satisfied: zipp>=3.1.0 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from importlib-resources>=3.2.0->matplotlib>=3.4->scanpy==1.9.3->DeltaTopic) (3.7.0)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages (from requests->fsspec[http]>2021.06.0->pytorch-lightning==1.9.0->DeltaTopic) (1.26.15)
Requirement already satisfied: certifi>=2017.4.17 in /home/BCCRC.CA/yzhang/.local/share/r-miniconda/envs/DeltaTopic/lib/python3.8/site-packages (from requests->fsspec[http]>2021.06.0->pytorch-lightning==1.9.0->DeltaTopic) (2022.12.7)
Requirement already satisfied: idna<4,>=2.5 in /home/BCCRC.CA/yzhang/.local/share/r-miniconda/envs/DeltaTopic/lib/python3.8/site-packages (from requests->fsspec[http]>2021.06.0->pytorch-lightning==1.9.0->DeltaTopic) (3.4)
[2]:
import os
import pandas as pd
import numpy as np
import DeltaTopic.datasets as dt
from DeltaTopic.nn.util import setup_anndata
from DeltaTopic.nn.modelhub import DeltaTopic

Data Prepraration

[3]:
adata = dt.toy_data()
setup_anndata(adata, layer="counts", unspliced_obsm_key = "unspliced_expression")

Model Training

[4]:
model = DeltaTopic(adata, n_latent = 8)
model.train(10)

SavePATH = "./my_model_DIR/"
model_id = "my_model"
model.save(os.path.join(SavePATH, model_id), overwrite=True, save_anndata=False)
print(f"Model saved at:", os.path.join(SavePATH, model_id))
/home/BCCRC.CA/yzhang/.local/lib/python3.8/site-packages/pytorch_lightning/trainer/connectors/accelerator_connector.py:467: LightningDeprecationWarning: Setting `Trainer(gpus=[0])` is deprecated in v1.7 and will be removed in v2.0. Please use `Trainer(accelerator='gpu', devices=[0])` instead.
  rank_zero_deprecation(
GPU available: True (cuda), used: True
TPU available: False, using: 0 TPU cores
IPU available: False, using: 0 IPUs
HPU available: False, using: 0 HPUs
You are using a CUDA device ('NVIDIA GeForce RTX 3080') that has Tensor Cores. To properly utilize them, you should set `torch.set_float32_matmul_precision('medium' | 'high')` which will trade-off precision for performance. For more details, read https://pytorch.org/docs/stable/generated/torch.set_float32_matmul_precision.html#torch.set_float32_matmul_precision
LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0,1]

  | Name   | Type              | Params
---------------------------------------------
0 | module | DeltaTopic_module | 1.6 M
---------------------------------------------
1.6 M     Trainable params
4         Non-trainable params
1.6 M     Total params
6.380     Total estimated model params size (MB)
Epoch 9: 100%|██████████| 71/71 [00:01<00:00, 62.20it/s, loss=5.32e+04, v_num=1]
`Trainer.fit` stopped: `max_epochs=10` reached.
Epoch 9: 100%|██████████| 71/71 [00:01<00:00, 62.04it/s, loss=5.32e+04, v_num=1]
Model saved at: ./my_model_DIR/my_model

Analysis

Estimate topic proportions

[5]:
topics_np = model.get_latent_representation() # save latent topic proportions
pd.DataFrame(topics_np).to_csv(os.path.join('topics.csv'))
topics_np.shape
Deterministic: True, output_softmax_z: True
[5]:
(10000, 8)

Compute the expected weight from spike and slab parameters

[6]:
# save spike and slab parameters from the model
model.get_parameters(save_dir = os.path.join(SavePATH, model_id))

spike_logit_rho = np.loadtxt(os.path.join(SavePATH, model_id, "model_parameters", "spike_logit_rho.txt"))
slab_mean_rho = np.loadtxt(os.path.join(SavePATH, model_id, "model_parameters", "spike_logit_rho.txt"))
pip_rho = 1/np.exp(-spike_logit_rho)
weight_rho = slab_mean_rho * pip_rho

spike_logit_delta = np.loadtxt(os.path.join(SavePATH, model_id, "model_parameters", "spike_logit_delta.txt"))
slab_mean_delta = np.loadtxt(os.path.join(SavePATH, model_id, "model_parameters", "spike_logit_delta.txt"))
pip_delta = 1/np.exp(-spike_logit_delta)
weight_delta = slab_mean_delta * pip_delta

print(weight_rho.shape)
print(weight_delta.shape)
(8, 5000)
(8, 5000)