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

目录

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 pairsnetVisual(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 pathwaygg <- 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 + ht2ht <- 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")

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

参考:

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

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

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

相关文章

在 JavaScript 中实现数据加密与解密:Web Cryptography API 与 CryptoJS详解

在 JavaScript 中&#xff0c;可以使用 Web Cryptography API 或第三方库如 crypto-js 来实现加密和解密。本文将介绍如何使用这两种方法在客户端进行数据的加密和解密。 使用 Web Cryptography API Web Cryptography API 是现代浏览器提供的一个强大、原生的加密 API。它允许…

关于留痕的使用常见的问题

1. 登录微信 登录要导出数据的微信&#xff08;不支持微信多开&#xff0c;不支持部分老版本微信&#xff09; 相关信息 想把手机端的微信聊天记录转移到电脑上可以使用微信自带的聊天记录迁移功能 操作步骤&#xff1a; 安卓&#xff1a; 手机微信->我->设置->聊…

[深度学习]使用python部署yolov10的onnx模型

测试环境&#xff1a; onnxruntime1.15.1 opencv-python4.8.0.76 部分实现代码&#xff1a; parser argparse.ArgumentParser()parser.add_argument("--model", typestr, default"yolov10n.onnx", help"Input your ONNX model.")parser.add_arg…

电子电器架构 --- 什么是域控制器?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

美颜相机与美图秀秀的非会员图片保存技巧畅享专业级图像处理探索

美颜相机与美图秀秀的非会员图片保存技巧畅享专业级图像处理探索 今日对美颜相机和美图秀秀的深入使用中&#xff0c;我遇到了一些功能限制&#xff0c;特别是在尝试保存特定处理后的图片时&#xff0c;发现通常需要开通VIP会员才能享受完整服务。作为一名热衷于技术探索的爱好…

【数据结构】二叉树的层序遍历~动画超详解

目录 1 什么是层序遍历2 二叉树层序遍历的基本思路3 二叉树层序遍历的实现 1 什么是层序遍历 我们从字面意思就明白,所谓层序,就是一层一层按顺序去遍历一个二叉树,这和我们之前了解的按前中后序遍历方式完全不同 比方说这颗二叉树: 前序遍历: 层序遍历: 2 二叉树层序遍历的…

Android 使用kotlin Retrofit2 + Dagger2完成网络请求跟依赖注入组合使用

文章目录 &#xff08;一&#xff09;引入依赖&#xff08;二&#xff09;基本概念Dagger中的基本概念&#xff1a;Retrofit介绍 &#xff08;三&#xff09;Dagger2 Module 和 Provides 和 Component Inject&#xff08;四&#xff09;Retrofit2 创建数据类Bean跟Service服务&…

3. MySQL 数据表的基本操作

文章目录 【 1. MySQL 创建数据表 】【 2. MySQL 查看表 】2.1 查看表的属性DESCRIBE/DESC 以表格的形式展示表属性SHOW CREATE TABLE 以SQL语句的形式展示表属性 2.2 查看表的内容 【 3. MySQL 修改数据表结构 】3.1 修改表名3.2 修改表字符集3.3 添加字段在末尾添加字段在开头…

LLMs Can’t Plan, But Can Help Planning in LLM-Modulo Frameworks

更多精彩内容&#xff0c;请关注微信公众号&#xff1a;NLP分享汇 原文链接&#xff1a;LLMs Can’t Plan, But Can Help Planning in LLM-Modulo Frameworks 你是怎么理解LLM的规划和推理能力呢&#xff0c;来自亚利桑那州立大学最近的一篇论文&#xff0c;对LLM的规划、推理…

ios 新安装app收不到fcm推送

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

拼图游戏完整思路(全代码演示)

主界面 小练习1&#xff1a; 一、三个界面的设置1&#xff1a;创建窗体 1、将三个主界面分开为三个类&#xff0c;每个类都去继承JFrame这个类&#xff0c;使得每个类都可以使用创建页面功能 2、对每个类进行空参构造&#xff0c;在空参构造里面进行窗体属性的赋值 3、创建一个…

苍穹外卖--sky-take-out(二)3-5

sky-take-out&#xff08;一&#xff09;1-2https://blog.csdn.net/kussm_/article/details/138614737?spm1001.2014.3001.5501 第三天 公共字段填充--利用AOP 问题提出 这些字段属于公共字段 &#xff1a;在新增员工或者新增菜品分类时需要设置创建时间、创建人、修改时间…

蓝桥杯软件测试-十五届模拟赛2期题目解析

十五届蓝桥杯《软件测试》模拟赛2期题目解析 PS 需要第十五界蓝桥杯模拟赛2期功能测试模板、单元测试被测代码、自动化测试被测代码请加&#x1f427;:1940787338 备注&#xff1a;15界蓝桥杯省赛软件测试模拟赛2期 题目1&#xff1a;功能测试题目 1&#xff08;测试用例&…

[极速版]写个linux探测自己机器ip地址的tool(基于shell + sshpass)

适用情况&#xff1a;上级路由ssh or teamviewer访问下级路由的机器&#xff0c;但下级路由不支持查看IP 自行完成端口映射or DMZ整机映射 apt-get install sshpass#!/bin/bash mkdir log for i in $(seq 2 255) dosshpass -p tmp ssh -E err.log -o StrictHostKeyCheckingno …

【解决】Tree prefab at index 8 is missing.

开发平台&#xff1a;Unity 2020 版本以上   问题描述 翻译&#xff1a;树预制体集合中第8位预制体丢失。   解决方法&#xff1a;修复丢失树资产 关联 Unity Terrier 组件使用&#xff0c;前往 树绘制工作区&#xff0c;检查 “树资产” 引用是否丢失&#xff1f;删除或重…

双指针练习:盛水最多的容器

题目链接&#xff1a;11.盛水最多的容器 题目描述&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可…

【多模态】34、LLaVA-v1.5 | 微软开源,用极简框架来实现高效的多模态 LMM 模型

文章目录 一、背景二、方法2.1 提升点2.2 训练样本 三、效果3.1 整体效果对比3.2 模型对于 zero-shot 形式的指令的结果生成能力3.3 模型对于 zero-shot 多语言的能力3.4 限制 四、训练4.1 数据4.2 超参 五、代码 论文&#xff1a;Improved Baselines with Visual Instruction …

python编程:SQLite 管理图片数据库

在本博客中&#xff0c;我们将介绍如何使用 wxPython 和 sqlite3 模块构建一个 GUI 应用程序&#xff0c;该程序可以遍历指定文件夹中的所有图片&#xff0c;并将其信息存储到 SQLite 数据库中。 C:\pythoncode\new\InputImageOFFolderTOSqlite.py 项目简介 我们的目标是创建…

微信里的东西怎么打印出来呢

随着微信的普及&#xff0c;我们的日常生活和工作都离不开这个强大的社交工具。无论是重要的工作文件、孩子的作业、还是精彩的旅行照片&#xff0c;我们都习惯在微信里保存和分享。但是&#xff0c;当需要将这些微信里的内容打印出来时&#xff0c;很多人可能会感到困惑和麻烦…

电力能源指挥中心调度台解决方案主要关注的问题

调度台是指挥中心不可或缺的设备&#xff0c;随着信息化建设的不断深入&#xff0c;电力能源指挥中心已成为重要平台。因此&#xff0c;构建一套高效、智能的电力能源指挥中心调度台解决方案&#xff0c;需要关注以下关键问题&#xff1a; 一、实时监控与数据采集 电力能源指挥…