专栏名称: 生信菜鸟团
生信菜鸟团荣誉归来,让所有想分析生物信息学数据的小伙伴找到归属,你值得拥有!
目录
相关文章推荐
51好读  ›  专栏  ›  生信菜鸟团

空转细胞通讯分析之COMMOT

生信菜鸟团  · 公众号  · 生物  · 2025-03-22 13:43

主要观点总结

本文介绍了使用COMMOT工具分析空间转录组技术数据的过程,该工具旨在推断细胞间的通信关系。文章首先概述了COMMOT的主要功能和特点,然后详细描述了其使用方法,包括环境部署、数据预处理、空间通信推断、信号传导方向确定、下游分析等步骤。文章还提供了Visium数据示例分析,包括数据预处理、基本聚类、空间通信推断、信号传导差异表达基因识别、信号传导影响量化等。最后,文章指出如何进一步应用COMMOT工具进行深入研究,并强调了阅读相关文献的重要性。

关键观点总结

关键观点1: COMMOT是一种创新的分析空间转录组数据的工具,旨在推断细胞间的通信关系。

介绍COMMOT的主要功能和特点。

关键观点2: 使用COMMOT进行空间转录组数据分析的步骤包括环境部署、数据预处理、空间通信推断等。

详细解释使用COMMOT进行数据分析的流程。

关键观点3: 通过Visium数据示例分析,展示了如何使用COMMOT进行空间转录组数据分析,包括识别信号传导差异表达基因和量化信号传导影响等。

使用实际数据演示了COMMOT的应用。

关键观点4: 进一步应用COMMOT工具进行深入研究需要阅读更多相关文献。

强调阅读相关文献的重要性,以更好地应用和理解COMMOT工具。


正文

空间转录组以及单细胞转录组 技术,为解析细胞-细胞通讯(Cell–Cell Communication, CCC)提供了前所未有的机会。然而,如何在重建细胞通讯网络的过程中充分整合细胞间的空间位置信息和复杂的生化过程,仍然是一个重大挑战。

COMMOT COMMunication analysis by Optimal Transport )是一种创新的分析方法,旨在在空间转录组数据中推断细胞通讯关系。它基于 集体最优传输理论(collective optimal transport) ,能够同时考虑多个配体-受体对之间的相互竞争关系以及细胞之间的空间距离,实现更为精确和生物学上合理的通讯建模。该算法发表于2023年的Nature Methods,题为《Screening cell–cell communication in spatial transcriptomics via collective optimal transport》。

COMMOT 的主要功能包括:

  • 支持多种类型空间数据(如原始空间转录组或配对成像数据推断的空间单细胞转录组);
  • 模拟多个配体–受体对在空间中的传递与分布;
  • 推断信号传导的 空间方向性
  • 借助集成树模型识别下游受信号调控的关键基因;
  • 提供全面的可视化工具,包括通讯热图、信号流向图和基因调控网络图等。

下面我们学习一下官网的参考文档(https://github.com/zcang/COMMOT):

首先是环境的部署:

#构建分析环境commot
mamba create -n commot python=3.8 -y
conda activate commot
pip install commot
#mamba install -c conda-forge pygraphviz
#pip install get-version==2.0.4

mamba install -y nb_conda_kernels ipykernel
python -m ipykernel install --user --name commot --display-name commot

可选:

#安装官网教程,在下游分析DE genes时会用到tradeseq
mamba install rpy2
mamba install r-base==3.6.3
pip install commot[tradeSeq]
#安装完成后,进入R程序,在里面安装tradeSeq
if (!require("BiocManager", quietly = TRUE))
   install.packages("BiocManager")
BiocManager::install("tradeSeq")

参考文档总共分为两大部分:

  • Basic usage
  • 以及Visium data example (mouse brain)

一. Basic usage

import commot as ct
import scanpy as sc
import pandas as pd
import numpy as np

import matplotlib.pyplot as plt

Step1. 加载示例数据

adata = sc.datasets.visium_sge(sample_id='V1_Mouse_Brain_Sagittal_Posterior')
adata.var_names_make_unique()

Step2. 数据预处理

该方法假定使用的数值为非负数,并反映信号分子的丰度。

sc.pp.normalize_total(adata, inplace=True)
sc.pp.log1p(adata)

Step3. 指定配体-受体对

这里,我们以仅包含三个 LR 对为例。

可以用同样的方式指定用户自定义的 LR 数据库,或者也可以通过函数 commot.pp.ligand_receptor_database() 获取内置的 LR 数据库。

例如, df_ligrec = ct.pp.ligand_receptor_database(database='CellChat', species='mouse')

LR=np.array([['Tgfb1''Tgfbr1_Tgfbr2''Tgfb_pathway'],
    ['Tgfb2''Tgfbr1_Tgfbr2''Tgfb_pathway'],
    ['Tgfb3''Tgfbr1_Tgfbr2''Tgfb_pathway'],
    ['Fgf1''Fgfr1''FGF_pathway'],
    ['Fgf1''Fgfr2''FGF_pathway']],dtype=str)
df_ligrec = pd.DataFrame(data=LR)

Step4. 构建 CCC 网络

使用最优传输方法为满足 500 微米空间距离约束的配体-受体对构建 CCC 网络(距离超过 500 米的细胞之间禁止耦合)。 例如,Tgfb1(配体)与 Tgfbr1_Tgfbr2(受体)的点对点矩阵存储在 adata.obsp['commot-user_database-Tgfb1-Tgfbr1_Tgfbr2'] 中。每个配体-受体对的总发送或接收信号分别存储在 adata.obsm['commot-user_database-sum-sender'] 和 adata.obsm['commot-user_database-sum-receiver'] 中。

ct.tl.spatial_communication(adata,
    database_name='user_database', df_ligrec=df_ligrec, dis_thr=500, heteromeric=True, pathway_sum=True)

Step5. 可视化

pts = adata.obsm['spatial']
s = adata.obsm['commot-user_database-sum-sender']['s-Fgf1-Fgfr1']
r = adata.obsm['commot-user_database-sum-receiver']['r-Fgf1-Fgfr1']
fig, ax = plt.subplots(1,2, figsize=(10,4))
ax[0].scatter(pts[:,0], pts[:, 1], c=s, s=5, cmap='Blues')
ax[0].set_title('Sender')
ax[1].scatter(pts[:,0], pts[:,1], c=r, s=5, cmap='Reds')
ax[1].set_title('Receiver')
image-20250321214846249
image-20250321214846249

可视化信号传导方向 将信号传导方向插值为向量场。

ct.tl.communication_direction(adata, database_name='user_database', lr_pair=('Fgf1','Fgfr1'), k=5)
ct.pl.plot_cell_communication(adata, database_name='user_database', lr_pair=('Fgf1','Fgfr1'), plot_method='grid', background_legend=True,
    scale=0.00003, ndsize=8, grid_density=0.4, summary='sender', background='image', clustering='leiden', cmap='Alphabet',
    normalize_v = True, normalize_v_quantile=0.995)
image-20250321214906136
image-20250321214906136

或者,根据接收信号的水平绘制方向。

ct.pl.plot_cell_communication(adata, database_name='user_database', lr_pair=('Fgf1','Fgfr1'), plot_method='grid', background_legend=True,
    scale=0.00003, ndsize=8, grid_density=0.4, summary='receiver', background='summary', clustering='leiden', cmap='Reds',
    normalize_v = True, normalize_v_quantile=0.995)
image-20250321214921482
image-20250321214921482

COMMOT 分析的结果附加在 anndata 对象中:

  • **adata.uns['commot-user_database-info']**:所使用的配体-受体数据库
  • **adata.obsm['commot-user_database-sum-sender']**:每个配体-受体对的发送信号量以及各信号通路的总和
  • **adata.obsm['commot-user_database-sum-receiver']**:每个配体-受体对的接收信号量以及各信号通路的总和
  • **adata.obsm['commot_sender_vf-user_database-Fgf1-Fgfr1']**:每个点上与发送信号相关的插值信号传导方向
  • **adata.obsm['commot_receiver_vf-user_database-Fgf1-Fgfr1']**:每个点上与接收信号相关的插值信号传导方向
  • **adata.obsp['commot-user_database-Fgf1-Fgfr1']**:一个稀疏矩阵,其中的元素表示通过 Fgf1-Fgfr1 从一个点到另一个点的 CCC 分数
adata
 AnnData object with n_obs × n_vars = 3355 × 32285
    obs: 'in_tissue', 'array_row', 'array_col'
    var: 'gene_ids', 'feature_types', 'genome'
    uns: 'spatial', 'log1p', 'commot-user_database-info'
    obsm: 'spatial', 'commot-user_database-sum-sender', 'commot-user_database-sum-receiver', 'commot_sender_vf-user_database-Fgf1-Fgfr1', 'commot_receiver_vf-user_database-Fgf1-Fgfr1'
    obsp: 'commot-user_database-Fgf1-Fgfr2', 'commot-user_database-Fgf1-Fgfr1', 'commot-user_database-Tgfb2-Tgfbr1_Tgfbr2', 'commot-user_database-Tgfb3-Tgfbr1_Tgfbr2', 'commot-user_database-Tgfb1-Tgfbr1_Tgfbr2', 'commot-user_database-FGF_pathway', 'commot-user_database-Tgfb_pathway', 'commot-user_database-total-total'

二. Visium data example (mouse brain)

import os
import gc
import ot
import pickle
import anndata
import scanpy as sc
import pandas as pd
import numpy as np
from scipy import sparse
from scipy.stats import spearmanr, pearsonr
from scipy.spatial import distance_matrix
import matplotlib.pyplot as plt

import commot as ct

adata = sc.datasets.visium_sge(sample_id='V1_Mouse_Brain_Sagittal_Posterior')

Step1. 数据预处理

这里需要合理反映分子丰度的非负数值。 我们这里只进行最基础的数据预处理,包括归一化总计数和 log1p 变换。 也可以进行更详细的预处理,例如回归细胞周期基因的影响。

adata.var_names_make_unique()
adata.raw = adata
sc.pp.normalize_total(adata, inplace=True)
sc.pp.log1p(adata)
adata_dis500 = adata.copy()

Step2. 基本聚类

使用常见的 scRNA-seq 数据聚类方法对数据进行基本聚类。 或者,可以使用专门用于空间转录组数据的工具,例如 SpaceFlow

sc.pp.highly_variable_genes(adata, min_mean=






请到「今天看啥」查看全文