④单细胞学习-cellchat细胞间通讯

news2025/1/16 6:55:19

目录

1,原理基础

流程

受体配体概念

方法比较

计算原理

2,数据

3,代码运行

1,原理基础

原文学习Inference and analysis of cell-cell communication using CellChat - PMC (nih.gov)

GitHub - sqjin/CellChat: R toolkit for inference, visualization and analysis of cell-cell communication from single-cell data

流程

a 配体-受体相互作用数据库概述。CellChatDB考虑了配体-受体复合物的已知组成,包括具有多聚体配体和受体的复合物,以及几种辅因子类型:可溶性激动剂,拮抗剂,共刺激和共抑制膜结合受体。CellChatDB 包含 2021 个经过验证的交互,包括 60% 的分泌交互。此外,48%的相互作用涉及异聚分子复合物。b CellChat 要么要求用户分配单元格标签作为输入,要么根据作为输入提供的低维数据表示自动对单元格进行分组。c CellChat对通信概率进行建模,并识别重要的通信。d CellChat为不同的分析任务提供了多种可视化输出。层次图和圆图中的不同颜色表示不同的像元组。气泡图中的颜色与通信概率成正比,其中深色和黄色对应于最小和最大值。e CellChat通过图论、模式识别和流形学习等方法定量测量网络,以更好地促进细胞间通信网络的解释和设计原则的识别。除了分析单个数据集外,CellChat还描绘了不同背景下的信号变化,例如不同的发育阶段和生物条件。

受体配体概念
方法比较
  • iTALK和NicheNet用于在scRNA-seq数据中推断细胞间的通讯关系,但这些方法只使用一个配体/受体基因对,常常忽略了许多受体中的多亚基复合物的作用。(例如,来自TGFβ途径的可溶性配体通过I型和II型受体的异聚复合物发出信号。),
  • CellPhoneDB v2.0 可以预测两个细胞群之间的信号相互作用,解决了上述问题。但是,并未考虑其他重要的信号辅助因子,包括可溶性激动剂,拮抗剂以及刺激性和抑制性的膜结合型共受体。

CellChat细胞通讯分析(上)--文献解读 - 知乎 (zhihu.com)

文献阅读:使用 CellChat 推理和分析细胞-细胞通信 (qq.com)

计算原理

a) 鉴定差异表达的信号转导基因。为了推断细胞状态特异性通讯,我们首先使用显著性水平为 0.05 的 Wilcoxon 秩和检验,在给定的 scRNA-seq 数据集中鉴定了所有细胞群中差异表达的信号转导基因。

b) 集合平均表达式的计算。为了解释噪声效应,我们使用统计稳健的平均方法计算了给定细胞组中信号转导基因的集合平均表达。

c) 细胞间通讯概率的计算。

d) 鉴定具有统计学意义的细胞间通讯。通过随机排列细胞的组标签,然后重新计算通信概率P,使用排列检验来识别两个细胞组之间的显着相互作用。

cellchat的原理、cellchat能做哪些分析_哔哩哔哩_bilibili


2,数据

scRNA-seq data of human skin from patients with atopic dermatitis (figshare.com)

官方学习:focuslyj/CellChat - 码云 - 开源中国 (gitee.com)

tutorial · focuslyj/CellChat - 码云 - 开源中国 (gitee.com)

这个教程概述了使用 CellChat 对单个数据集进行细胞间通信网络的推理、分析和可视化的步骤。我们通过将 CellChat 应用于来自患者的病变(LS,患病)人类皮肤细胞的 scRNA-seq 数据来展示 CellChat 的多种功能。

3,代码运行
rm(list=ls())
library(CellChat)
library(patchwork)
library(ggplot2)
library(Seurat)
library(ggalluvial)#绘制桑基图
library(expm)
library(sna)
library(NMF)
options(stringsAsFactors = FALSE)##输入数据不自动转换成因子(防止数据格式错误)

#数据:基因为行名,细胞为列名的基因表达矩阵(注意相关网络原因)
load(url("https://ndownloader.figshare.com/files/25950872")) #示例数据(正常+疾病)
#save(data_humanSkin,file = c("data_humanSkin.Rdata"))
rm(list=ls())
load("data_humanSkin.Rdata")
#数据查看
data.input = data_humanSkin$data # 提取标准化矩阵
meta = data_humanSkin$meta # a dataframe with rownames containing cell mata data
cell.use = rownames(meta)[meta$condition == "LS"] ##疾病组
#数据准备
data.input = data.input[, cell.use]
meta = meta[cell.use, ]
unique(meta$labels) # 检查细胞标签
#创建CellChat 对象
cellchat <- createCellChat(object = data.input, meta = meta, group.by = "labels")
cellchat <- addMeta(cellchat, meta = meta)#添加细胞信息
cellchat <- setIdent(cellchat, ident.use = "labels") # set "labels" as default cell identity
levels(cellchat@idents) # show factor levels of the cell labels
groupSize <- as.numeric(table(cellchat@idents)) # number of cells in each cell group

#配体受体交互数据库查看
CellChatDB <- CellChatDB.human # use CellChatDB.mouse if running on mouse data
showDatabaseCategory(CellChatDB)
dplyr::glimpse(CellChatDB$interaction)
CellChatDB.use <- subsetDB(CellChatDB, search = "Secreted Signaling") # 分泌信号
cellchat@DB <- CellChatDB.use #在对象中设置使用的数据库
#预处理用于细胞通信分析的表达数据
cellchat <- subsetData(cellchat)
#future::plan("multiprocess", workers = 4) #可以不运行
cellchat <- identifyOverExpressedGenes(cellchat)#分析差异基因
cellchat <- identifyOverExpressedInteractions(cellchat)#
cellchat <- projectData(cellchat, PPI.human)

#进行细胞通信网络的推断
cellchat <- computeCommunProb(cellchat, raw.use = TRUE)#计算通信概率并推断cellchat网络
cellchat <- filterCommunication(cellchat, min.cells = 10)#过滤
#信号通路级别推断细胞-细胞通信
cellchat <- computeCommunProbPathway(cellchat)
#计算整合的细胞通信网络
cellchat <- aggregateNet(cellchat)

#进行可视化
groupSize <- as.numeric(table(cellchat@idents))
par(mfrow = c(1,2), xpd=TRUE)
netVisual_circle(cellchat@net$count,vertex.weight = groupSize, 
                 weight.scale = T, label.edge= F, title.name = "Number of interactions")
netVisual_circle(cellchat@net$weight, vertex.weight = groupSize,
                 weight.scale = T, label.edge= F, title.name = "Interaction weights/strength")

mat <- cellchat@net$weight
par(mfrow = c(3,4), xpd=TRUE)##如果可视化出现问题可以把前面的图片保存清空后再作图
for (i in 1:nrow(mat)) {
  mat2 <- matrix(0, nrow = nrow(mat), ncol = ncol(mat), dimnames = dimnames(mat))
  mat2[i, ] <- mat[i, ]
  netVisual_circle(mat2, vertex.weight = groupSize, weight.scale = T, edge.weight.max = max(mat), title.name = rownames(mat)[i])
}
dev.off()

#细胞通信网络的可视化######################################
pathways.show <- c("CXCL") 
vertex.receiver = seq(1,4) # a numeric vector. 
netVisual_aggregate(cellchat, signaling = pathways.show,
                    vertex.receiver = vertex.receiver)

# Circle plot
par(mfrow=c(1,1))
netVisual_aggregate(cellchat, signaling = pathways.show, 
                    layout = "circle")

# 弦图
par(mfrow=c(1,1))
netVisual_aggregate(cellchat, signaling = pathways.show, layout = "chord")

#热图
par(mfrow=c(1,1))
netVisual_heatmap(cellchat, signaling = pathways.show, color.heatmap = "Reds")

# Chord diagram
group.cellType <- c(rep("FIB", 4), rep("DC", 4), rep("TC", 4)) # grouping cell clusters into fibroblast, DC and TC cells
names(group.cellType) <- levels(cellchat@idents)
netVisual_chord_cell(cellchat, signaling = pathways.show,group = group.cellType, 
                     title.name = paste0(pathways.show, " signaling network"))

#计算每个配体受体对整体信号通路的贡献,并可视化由单个配体受体对调节的细胞通信
netAnalysis_contribution(cellchat, signaling = pathways.show)

#视化由单个配体受体对调节的细胞-细胞通信
pairLR.CXCL <- extractEnrichedLR(cellchat, signaling = pathways.show, geneLR.return = FALSE)
LR.show <- pairLR.CXCL[1,] # show one ligand-receptor pair
vertex.receiver = seq(1,4) # # Hierarchy plot a numeric vector
netVisual_individual(cellchat, signaling = pathways.show,  
                     pairLR.use = LR.show, vertex.receiver = vertex.receiver)

# Circle plot
netVisual_individual(cellchat, signaling = pathways.show, 
                     pairLR.use = LR.show, layout = "circle")

#相关保存
pathways.show.all <- cellchat@netP$pathways
# check the order of cell identity to set suitable vertex.receiver
levels(cellchat@idents)
vertex.receiver = seq(1,4)
for (i in 1:length(pathways.show.all)) {
  # Visualize communication network associated with both signaling pathway and individual L-R pairs
  netVisual(cellchat, signaling = pathways.show.all[i], vertex.receiver = vertex.receiver, layout = "hierarchy")
  # Compute and visualize the contribution of each ligand-receptor pair to the overall signaling pathway
  gg <- netAnalysis_contribution(cellchat, signaling = pathways.show.all[i])
  ggsave(filename=paste0(pathways.show.all[i], "_L-R_contribution.pdf"), plot=gg, width = 3, height = 2, units = 'in', dpi = 300)
}

#可视化由多个配体受体或信号通路调节的细胞通信
netVisual_bubble(cellchat, sources.use = 4, targets.use = c(5:11), 
                 remove.isolate = FALSE)
netVisual_bubble(cellchat, sources.use = 4, targets.use = c(5:11), 
                 signaling = c("CCL","CXCL"), remove.isolate = FALSE)

netVisual_chord_gene(cellchat, sources.use = 4, targets.use = c(5:11), 
                     lab.cex = 0.5,legend.pos.y = 30)
# show all the interactions received by Inflam.DC
netVisual_chord_gene(cellchat, sources.use = c(1,2,3,4), 
                     targets.use = 8, legend.pos.x = 15)

#使用小提琴/点图绘制信号基因表达分布
plotGeneExpression(cellchat, signaling = "CXCL")
plotGeneExpression(cellchat, signaling = "CXCL", 
                   enriched.only = FALSE)#提取与推断的L-R对或信号通路相关的信号基因

#细胞通信网络系统分析############################
cellchat <- netAnalysis_computeCentrality(cellchat, slot.name = "netP") # the slot 'netP' means the inferred intercellular communication network of signaling pathways
netAnalysis_signalingRole_network(cellchat, signaling = pathways.show, 
                                  width = 8, height = 2.5, font.size = 10)
#使用散点图在 2D 空间中可视化占主导地位的发射器(源)和接收器(目标)
gg1 <- netAnalysis_signalingRole_scatter(cellchat)
gg2 <- netAnalysis_signalingRole_scatter(cellchat, signaling = c("CXCL", "CCL"))
gg1 + gg2

#哪些信号对某些细胞组的传出或传入信号贡献最大
ht1 <- netAnalysis_signalingRole_heatmap(cellchat, pattern = "outgoing")
ht2 <- netAnalysis_signalingRole_heatmap(cellchat, pattern = "incoming")
ht1 + ht2

ht <- netAnalysis_signalingRole_heatmap(cellchat, signaling = c("CXCL", "CCL"))

#识别和可视化分泌细胞的传出通信模式##############################
selectK(cellchat, pattern = "outgoing")#selectK推断模式的数量。
#当传出模式数为 3 时,Cophenetic 和Silhouette值都开始突然下降。
nPatterns = 3
cellchat <- identifyCommunicationPatterns(cellchat, 
                                          pattern = "outgoing", k = nPatterns)

netAnalysis_dot(cellchat, pattern = "outgoing")#绘制点图
selectK(cellchat, pattern = "incoming")#识别和可视化目标细胞的传入通信模式
nPatterns = 4
cellchat <- identifyCommunicationPatterns(cellchat, pattern = "incoming", k = nPatterns)

# river plot桑基图
library(ggalluvial)
netAnalysis_river(cellchat, pattern = "incoming")
# dot plot
netAnalysis_dot(cellchat, pattern = "outgoing")

#信号网络的流形和分类学习分析
cellchat <- computeNetSimilarity(cellchat, type = "functional")
cellchat <- netEmbedding(cellchat, type = "functional")
#> Manifold learning of the signaling networks for a single dataset
cellchat <- netClustering(cellchat, type = "functional")
#> Classification learning of the signaling networks for a single dataset
# Visualization in 2D-space
netVisual_embedding(cellchat, type = "functional", label.size = 3.5)

#最后保存
saveRDS(cellchat, file = "cellchat_humanSkin_LS.rds")
4,流程导图

 

4程序员 - CellChat v2 教程 1:使用 CellChat 推理和分析细胞间通信 - 个人文章 - SegmentFault 思否

参考:

1:Inference and analysis of cell-cell communication using CellChat

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1790996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql高级刷题-01-求中位数

题目&#xff1a; 解题代码 select sum(num) / count(num) as median from (select num,row_number() over (order by num desc,id desc ) as desc_math,row_number() over (order by num ,id ) as asc_mathfrom number) as t1 where asc_math in (desc_math, desc…

期末考试后,老师如何发布期末成绩给学生家长查看

当期末的脚步悄然临近&#xff0c;作为班主任&#xff0c;深知期末成绩的发布不仅关系到学生和家长的期待&#xff0c;更是教学成果的重要体现。那么&#xff0c;有没有一种方法&#xff0c;既能保护学生隐私&#xff0c;又能方便家长和学生查询成绩呢&#xff1f; 答案是肯定有…

Python 全栈系列249 IO并发:异步、线程与协程

说明 很久没有关注这方面的问题了&#xff0c;平时大部分时候还是做批量操作 。在这种情况下(CPU密集),异步、协程这些意义就不大了&#xff0c;甚至可能进一步拖慢处理时间。 但是在IO这一块的零碎处理是比较重要的&#xff0c;可以更快&#xff0c;且更省资源。很早的时候&…

css动画案例练习之会展开的魔方和交错的小块

这里写目录标题 一级目录二级目录三级目录 下面开始案例的练习&#xff0c;建议第一个动手操作好了再进行下一个一、交错的小块效果展示1.大致思路1.基本结构2.实现动态移动 2.最终版代码 二、会展开的魔方1.大致思路1.基本结构;2.静态魔方的构建3.让静态的魔方动起来 2.最终版…

使用python绘制华夫饼图

使用python绘制华夫饼图 华夫饼图效果代码 华夫饼图 华夫饼图&#xff08;Waffle Chart&#xff09;是一种数据可视化图表&#xff0c;用于显示数据在一个网格中的分布情况。它类似于饼图&#xff0c;通过将数据划分为等大小的方块来表示不同类别的比例。华夫饼图的优势在于它…

图解Mysql索引原理

概述 是什么 索引像是一本书的目录列表&#xff0c;能根据目录快速的找到具体的书本内容&#xff0c;也就是加快了数据库的查询速度索引本质是一个数据结构索引是在存储引擎层&#xff0c;而不是服务器层实现的&#xff0c;所以&#xff0c;并没有统一的索引标准&#xff0c;…

bootstrap5-学习笔记2-模态框+弹窗+tooltip+popover+信息提示框

参考&#xff1a; Bootstrap5 教程 | 菜鸟教程 https://www.runoob.com/bootstrap5/bootstrap5-tutorial.html Bootstrap 入门 Bootstrap v5 中文文档 v5.3 | Bootstrap 中文网 https://v5.bootcss.com/docs/getting-started/introduction/ 之前用bootstrap2和3比较多&#x…

音频信号分析与实践

音频信号分析与实践课程,方便理解音频信号原理和过程 1.音频信号采集与播放 两种采样模式和标准的采样流程 人说话的声音一般在2kHz一下&#xff1a; 采样频率的影响&#xff1a;采样率要大于等于信号特征频率的2倍&#xff1b;一般保证信号完整&#xff0c;需要使用10倍以上的…

Git权限管理

Git权限管理 简介&#xff1a;大家好&#xff0c;我是程序员枫哥&#xff0c;&#x1f31f;一线互联网的IT民工、&#x1f4dd;资深面试官、&#x1f339;Java跳槽网创始人。拥有多年一线研发经验&#xff0c;曾就职过科大讯飞、美团网、平安等公司。在上海有自己小伙伴组建的副…

纯血鸿蒙APP开发实战:如何添加TabBar

1.tabbar组件 tabbar组件是移动端开发经常使用的一个组件&#xff0c;底部固定工具栏&#xff0c;顶部tab工具栏等。 2.示例 EntryComponentstruct MainPage {State private selectedIndex: number 0;private controller: TabsController new TabsController()build() {Col…

PHP序列化、反序列化

目录 一、PHP序列化&#xff1a;serialize() 1.对象序列化 2.pop链序列化 3.数组序列化 二、反序列化&#xff1a;unserialize() 三、魔术方法 ​四、NSSCTF相关简单题目 1.[SWPUCTF 2021 新生赛]ez_unserialize 2.[SWPUCTF 2021 新生赛]no_wakeup 学习参考&#xff1…

Python学习从0开始——Kaggle机器学习004总结2

Python学习从0开始——Kaggle机器学习004总结2 一、缺失值二、分类变量2.1介绍2.2实现1.获取训练数据中所有分类变量的列表。2.比较每种方法方法1(删除分类变量)方法2(序数编码)方法3独热编码 三、管道3.1介绍3.2实现步骤1:定义预处理步骤步骤2:定义模型步骤3:创建和评估管道 四…

数据仓库核心:维度表设计的艺术与实践

文章目录 1. 引言1.1基本概念1.2 维度表定义 2. 设计方法2.1 选择或新建维度2.2 确定维度主维表2.3 确定相关维表2.14 确定维度属性 3. 维度的层次结构3.1 举个例子3.2 什么是数据钻取&#xff1f;3.3 常见的维度层次结构 4. 高级维度策略4.1 维度整合维度整合&#xff1a;构建…

HCIP的学习(28)

第九章&#xff0c;链路聚合和VRRP 链路聚合 ​ 目的&#xff1a;备份链路以及提高链路带宽。 ​ 链路聚合技术&#xff08;Eth-Trunk&#xff09;&#xff1a;将多个物理接口捆绑成一个逻辑接口&#xff0c;将N条物理链路逻辑上聚合为一条逻辑链路。 正常情况下&#xff0c;…

Android开机动画的结束过程BootAnimation(基于Android10.0.0-r41)

文章目录 Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41) Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41) 路径frameworks/base/cmds/bootanimation/bootanimation_main.cpp init进程把我们的BootAnimation的二进制文件拉起来了&#xf…

STM32作业实现(五)温湿度传感器dht11

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

6. MySQL 查询、去重、别名

文章目录 【 1. 数据表查询 SELECT 】1.1 查询表中所有字段使用 * 查询表的所有字段列出表的所有字段 1.2 查询表中指定的字段 【 2. 去重 DISTINCT 】【 3. 设置别名 AS 】3.1 为表指定别名3.2 为字段指定别名 【 5. 限制查询结果的条数 LIMIT 】5.1 指定初始位置5.2 不指定初…

利用短视频平台,轻松引流获客:自动私信评论策略全解析

在数字化时代&#xff0c;短视频已成为互联网流量的新蓝海&#xff0c;其独特的视觉吸引力和高度的用户粘性为各行各业提供了前所未有的营销机遇。无论是初创企业还是成熟品牌&#xff0c;都能通过短视频平台有效触达目标客户&#xff0c;实现高效引流与获客。本文将深入探讨如…

Three.js加入到可视化大屏,看看能否惊艳到你?

three.js 在可视化大屏上可以实现各种三维场景和动画效果&#xff0c;可以根据具体需求进行定制化开发&#xff0c;并结合其他技术&#xff0c;如数据可视化、交互设计等&#xff0c;实现更加丰富的可视化效果。 three.js 是一个基于 WebGL 的 JavaScript 3D 库&#xff0c;可…

LLM的基础模型5:Embedding模型

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…