目录
1,数据加载
2, 分别创建CellChat对象
①LS组数据
②NL组数据
3,分别构建cellchat文件
①构建LS组cellchat数据
②构建NL组cellchat数据
4,进行cellchat分析
①LS组的cellchat分析
②NL组的cellchat分析
5,合并分组cellchat对象
①数据加载
②合并cellchat对象
进行分析
1.总体比较:通讯数目与通讯强度差异
2.细胞亚群水平的通讯差异
2.1 细胞通讯差异网络图
2.2 细胞通讯差异热图
3.信号通路水平的通讯差异
3.1 组间富集信号通路差异条形图
3.2 传出信号通路水平热图
3.3 传入信号通路水平热图
3.4 总体信号通路水平热图
4.配受体对水平通讯差异
4.1 总配受体对概率差异气泡图
4.2 区分上下调配受体对
5.单个/特定信号通路水平差异可视化
5.1网络图
5.2热图
④-2单细胞学习-cellchat单数据代码补充版(通讯网络)-****博客
1,数据加载
-
# 包的加载
-
#CellChat细胞通讯之组间差异分析#
-
rm(list=ls())
-
library(CellChat)
-
library(patchwork)
-
library(ggplot2)
-
library(Seurat)
-
library(ggalluvial)#绘制桑基图
-
library(expm)
-
library(sna)
-
library(NMF)
-
library(ComplexHeatmap)
-
options(stringsAsFactors = FALSE)##输入数据不自动转换成因子(防止数据格式错误)
数据加载
-
#数据加载################
-
load("data_humanSkin.Rdata")#数据加载:这里是count data数据
-
data.input = data_humanSkin$data#需标准化的基因表达量矩阵和细胞分组信息文件
-
#dat <- as.data.frame(data.input)#可以查看表达矩阵 [1] 17328 7563
-
meta = data_humanSkin$meta
-
data.input[1:6,1:3]#表达count
-
head(meta);table(meta$condition) #含normal(NL)和diseases(LS)
-
unique(meta$labels) #检查细胞亚群标签类型
2, 分别创建CellChat对象
①LS组数据
-
#LS组数据
-
cell.use1 = rownames(meta)[meta$condition == 'LS'] #提取LS的细胞名称
-
data.input1 = data.input[, cell.use1]#提取LS表达矩阵
-
meta1 = meta[cell.use1, ]#提取LS细胞信息
-
identical(rownames(meta1),colnames(data.input1)) #检查矩阵列名和分组文件行名是否一致
-
unique(meta1$labels) #检查细胞亚群标签类型
②NL组数据
-
#NL组数据
-
cell.use2 = rownames(meta)[meta$condition == 'NL'] #提取NL的细胞名称
-
data.input2 = data.input[, cell.use2]#提取NL表达矩阵
-
meta2 = meta[cell.use2, ]#提取NL细胞信息
-
identical(rownames(meta2),colnames(data.input2)) #检查矩阵列名和分组文件行名是否一致
-
unique(meta2$labels) #检查细胞亚群标签类型
-
#数据检查:不同分组的细胞系检查
-
setdiff(unique(meta1$labels),unique(meta2$labels))#character(0) 细胞分类都是一致的
3,分别构建cellchat文件
①构建LS组cellchat数据
-
#分别构建cellchat文件
-
##构建LS组cellchat数据
-
cellchatLS <- createCellChat(object = data.input1, #支持normalized表达矩阵,Seurat对象,和SingleCellExperiment对象
-
meta = meta1, #meta文件
-
group.by = 'labels') #meta中的细胞分类列
②构建NL组cellchat数据
-
##构建NL组cellchat数据
-
cellchatNL <- createCellChat(object = data.input2, #支持normalized表达矩阵,Seurat对象,和SingleCellExperiment对象
-
meta = meta2, #meta文件
-
group.by = 'labels') #meta中的细胞分类列
-
save(cellchatLS, cellchatNL, file = "")#暂存分组的cellchat数据
4,进行cellchat分析
①LS组的cellchat分析
-
#重新加载数据进行cellchat分析#################################################
-
rm(list=ls())
-
load("")
-
#LS组的cellchat分析
-
cellchat <- cellchatLS
-
cellchat <- setIdent(cellchat, = 'labels') #将label设置为显示的默认顺序
-
levels(cellchat@idents) #查看celltype和factor顺序
-
table(cellchat@idents) #每个celltype中的细胞数
-
cellchat@DB <- ##设置配受体数据库(CellChatDB):
-
cellchat <- subsetData(cellchat)##信号基因的表达矩阵子集 赋值到cellchat@
-
cellchat <- identifyOverExpressedGenes(cellchat)##鉴定与每个细胞亚群相关的过表达信号基因
-
cellchat <- identifyOverExpressedInteractions(cellchat)##识别过表达基因配体-受体互作
-
cellchat <- projectData(cellchat, )#将基因表达数据映射到PPI网络(可跳过)
-
cellchat <- computeCommunProb(cellchat, = TRUE) #计算细胞通讯概率
-
cellchat <- filterCommunication(cellchat, = 10)##细胞通讯过滤
-
cellchat <- computeCommunProbPathway(cellchat)#计算信号通路水平上的通讯概率
-
cellchat <- aggregateNet(cellchat)#计算细胞对间通讯的数量和概率强度
-
cellchat <- netAnalysis_computeCentrality(cellchat,#计算网络中心性权重:识别每类细胞在信号通路中的角色/作用
-
= "netP")
-
cellchatLS <- cellchat
-
saveRDS(cellchatLS, "")
②NL组的cellchat分析
-
#cellchatNL组的cellchat分析
-
rm(list=ls())
-
load("")
-
cellchat <- cellchatNL
-
cellchat <- setIdent(cellchat, = 'labels') #将label设置为显示的默认顺序
-
levels(cellchat@idents) #查看celltype和factor顺序
-
table(cellchat@idents) #每个celltype中的细胞数
-
cellchat@DB <- ##设置配受体数据库(CellChatDB):
-
cellchat <- subsetData(cellchat)##信号基因的表达矩阵子集 赋值到cellchat@
-
cellchat <- identifyOverExpressedGenes(cellchat)##鉴定与每个细胞亚群相关的过表达信号基因
-
cellchat <- identifyOverExpressedInteractions(cellchat)##识别过表达基因配体-受体互作
-
cellchat <- projectData(cellchat, )#将基因表达数据映射到PPI网络(可跳过)
-
cellchat <- computeCommunProb(cellchat, = TRUE) #计算细胞通讯概率
-
cellchat <- filterCommunication(cellchat, = 10)##细胞通讯过滤
-
cellchat <- computeCommunProbPathway(cellchat)#计算信号通路水平上的通讯概率
-
cellchat <- aggregateNet(cellchat)#计算细胞对间通讯的数量和概率强度
-
cellchat <- netAnalysis_computeCentrality(cellchat,#计算网络中心性权重:识别每类细胞在信号通路中的角色/作用
-
= "netP")
-
cellchatNL <- cellchat
-
saveRDS(cellchatNL, "")
-
#######################################################
5,合并分组cellchat对象
①数据加载
-
#两个特应性皮炎患者的皮肤样本数据集:非病变性(NL,正常)和病变性(LS,患病)
-
rm(list=ls())
-
cellchatNL <- readRDS("")
-
cellchatLS <- readRDS("")
-
levels(cellchatNL@idents)
-
levels(cellchatLS@idents)
-
identical(levels(cellchatNL@idents),levels(cellchatLS@idents))#数据检查一致的[1] TRUE
②合并cellchat对象
-
#合并cellchat对象:
-
object.list <- list(NL = cellchatNL,
-
LS = cellchatLS) #对照组(NL)在前,比较组(LS)在后,注意顺序
-
cellchat <- mergeCellChat(object.list, add.names = names(object.list))
-
cellchat
-
dplyr::glimpse(cellchat)#数据结构查看
-
##合并内容:'','images','net','netP','meta','idents','','DB',and 'LR'
接下来开始组间cellchat分析
1.总体比较:通讯数目与通讯强度差异
-
#1.总体比较:通讯数目与通讯强度差异
-
p1 <- compareInteractions(cellchat, = F, group = c(1,2))
-
p2 <- compareInteractions(cellchat, = F, group = c(1,2),
-
measure = "weight")
-
p1 + p2
左图展示了两数据集通讯数量间的差异,右图则展示了通讯强度间的差异。
2.细胞亚群水平的通讯差异
2.1 细胞通讯差异网络图
-
#2.细胞亚群水平的通讯差异
-
par(mfrow = c(1,2), xpd = TRUE)
-
netVisual_diffInteraction(cellchat, = T)
-
netVisual_diffInteraction(cellchat, = T, measure = "weight")
展示了样本间所有细胞亚群中的配受体对数目差异(左)及通讯概率差异(右);外周圆不同颜色代表不同细胞亚群,大小表示亚群的配受体对数目,圈越大,细胞间配受体对数目比值越大.蓝线表示对照组通讯较强,红线表示比较组通讯较强。线越粗表示通讯变化程度越强。
2.2 细胞通讯差异热图
-
#细胞通讯差异热图
-
p3 <- netVisual_heatmap(cellchat)
-
p4 <- netVisual_heatmap(cellchat, measure = "weight")
-
p3 + p4
-
dev.off()
纵坐标为配体细胞,横坐标为受体细胞,热图颜色代表通讯概率差异,颜色越深,通讯越强。上侧和右侧的柱子是纵轴和横轴通讯概率差异的累积。左图为细胞间配受体对数目差异,右图为通讯概率差异。
3.信号通路水平的通讯差异
3.1 组间富集信号通路差异条形图
-
#3.信号通路水平的通讯差异
-
##基于信息流或互作数对信号通路进行排序
-
p5 <- rankNet(cellchat, mode = "comparison", stacked = T, = TRUE) #堆叠
-
p6 <- rankNet(cellchat, mode = "comparison", stacked = F, = TRUE) #不堆叠
-
p5 + p6
当比较(LS)组与对照组(NL)的通路概率总和的比值<0.95且差异pval<0.05(秩和检验)时,则该通路在对照组中的通讯强度显著增加(纵坐标为红色);当比较组与对照组的通路概率总和的比值>1.05且差异pval<0.05时,则该通路在比较组中的通讯强度显著增加(纵坐标为蓝色);纵坐标为黑色表示该通路在两组间没有差异。左侧为比例图,右侧为实际数值比对图。
3.2 传出信号通路水平热图
-
# 传出信号通路水平热图
-
i = 1
-
<- union(object.list[[i]]@netP$pathways,
-
object.list[[i+1]]@netP$pathways)
-
-
ht1 = netAnalysis_signalingRole_heatmap(object.list[[i]],
-
pattern = "outgoing", #传出
-
signaling = ,
-
title = names(object.list)[i],
-
width = 5,
-
height = 6)
-
ht2 = netAnalysis_signalingRole_heatmap(object.list[[i+1]],
-
pattern = "outgoing", #传出
-
signaling = ,
-
title = names(object.list)[i+1],
-
width = 5,
-
height = 6)
-
draw(ht1 + ht2, ht_gap = unit(0.5, "cm"))
3.3 传入信号通路水平热图
-
#传入信号通路水平热图
-
ht3 = netAnalysis_signalingRole_heatmap(object.list[[i]],
-
pattern = "incoming", #传入
-
signaling = ,
-
title = names(object.list)[i],
-
width = 5, height = 6,
-
= "GnBu")
-
ht4 = netAnalysis_signalingRole_heatmap(object.list[[i+1]],
-
pattern = "incoming", #传入
-
signaling = ,
-
title = names(object.list)[i+1],
-
width = 5, height = 6,
-
= "GnBu")
-
draw(ht3 + ht4, ht_gap = unit(0.5, "cm"))
3.4 总体信号通路水平热图
-
#总体信号通路水平热图
-
ht5 = netAnalysis_signalingRole_heatmap(object.list[[i]],
-
pattern = "all", #总体
-
signaling = ,
-
title = names(object.list)[i],
-
width = 5, height = 6,
-
= "OrRd")
-
ht6 = netAnalysis_signalingRole_heatmap(object.list[[i+1]],
-
pattern = "all", #总体
-
signaling = ,
-
title = names(object.list)[i+1],
-
width = 5, height = 6,
-
= "OrRd")
-
draw(ht5 + ht6, ht_gap = unit(0.5, "cm"))
纵坐标为信号通路,横坐标为细胞亚群,热图颜色代表信号强度,颜色越深,通讯越强。上侧和右侧的柱子是纵轴和横轴强度的累积。左图NL组,右图LS组。
4.配受体对水平通讯差异
4.1 总配受体对概率差异气泡图
-
levels(cellchat@idents$joint) #查看细胞亚群
-
netVisual_bubble(cellchat,
-
sources.use = 4,
-
targets.use = c(5:12),
-
comparison = c(1, 2),
-
= 45)
4.2 区分上下调配受体对
-
p7 <- netVisual_bubble(cellchat,
-
sources.use = 4,
-
targets.use = c(5:12),
-
comparison = c(1, 2),
-
= 2,
-
= "Increased signaling in LS",
-
= 45,
-
= T) #Increased为比较组通讯概率更强的配受体对信息
-
p8 <- netVisual_bubble(cellchat,
-
sources.use = 4,
-
targets.use = c(5:12),
-
comparison = c(1, 2),
-
= 1,
-
= "Decreased signaling in LS",
-
= 45,
-
= T) #Decreased为对照组通讯概率更强的配受体对信息
-
p7 + p8
在气泡图中,横坐标为细胞对,颜色区分样本;纵坐标为配受体。气泡的大小表示p值,p值越小气泡越大。颜色表示通讯概率的大小。
5.单个/特定信号通路水平差异可视化
5.1网络图
-
#使用网络图:
-
<- c("CXCL") #选择目标信号通路
-
<- getMaxWeight(object.list,
-
= c("netP"),
-
attribute = ) #控制不同数据集的边权重
-
-
par(mfrow = c(1,2), xpd = TRUE)
-
for (i in 1:length(object.list)) {
-
netVisual_aggregate(object.list[[i]],
-
signaling = ,
-
layout = "circle",
-
= [1],
-
= 10,
-
= paste(, names(object.list)[i]))
-
}
5.2热图
-
<- c("CXCL")
-
par(mfrow = c(1,2), xpd = TRUE)
-
ht <- list()
-
for (i in 1:length(object.list)) {
-
ht[[i]] <- netVisual_heatmap(object.list[[i]],
-
signaling = ,
-
= "Reds",
-
= paste(, "signaling ",names(object.list)[i]))
-
}
-
ComplexHeatmap::draw(ht[[1]] + ht[[2]], ht_gap = unit(0.5, "cm"))
参考:
1:单细胞分析之细胞交互-3:CellChat - 简书 ()
2:CellChat细胞通讯分析(下)--实操代码·多个数据集比较分析 - 知乎 ()
3:CellChat细胞通讯之组间差异分析 ()
4:focuslyj/CellChat ()