【单细胞分析】P2.5、聚类,筛选marker基因,可视化
「生信技能树」单细胞数据挖掘_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1pa4y1s76J?p=8
#5.1 聚类
pc.num=1:20
#基于PCA数据
scRNA <- FindNeighbors(scRNA, dims = pc.num)
# dims参数,需要指定哪些pc轴用于分析;这里利用上面的分析,选择20
scRNA <- FindClusters(scRNA, resolution = 0.5)
table(scRNA@meta.data$seurat_clusters)
这里构建pc.nmu这个数列,相当于选取20个元素进行后续的计算。
findneighbors和findclusters是两种计算集合距离的方法,本质是用以判断两个集合的相似性。
dims在这里是选取的细胞数,resolution是分辨率,如果值越高,分的cluster越多,越低则产生的cluster越少。
# 进行线性降维处理
scRNA = RunTSNE(scRNA, dims = pc.num)
DimPlot(scRNA, reduction = "tsne",label=T)
?RunTSNE
p3_1 <- DimPlot(scRNA, reduction = "tsne",label=T) +
labs(tag = "E")
p3_1
t-SNE
笔记 | 什么是TSNE - 知乎https://zhuanlan.zhihu.com/p/49073961里面有个英文教程,很适合理解t-SNE的基本原理。
本质是通过t分布转化高维数据的相似性信息并将之映射到低维的数据点中。
5.2 marker gene
#5.2 marker gene
#进行差异分析,一般使用标准化数据
scRNA <- NormalizeData(scRNA, normalization.method = "LogNormalize")
#结果储存在"data"slot里 scRNA@assays$RNA@来查看这个对象中的内容
GetAssayData(scRNA,slot="data",assay="RNA")[1:8,1:4]
#if test.use is "negbinom", "poisson", or "DESeq2", slot will be set to "counts
这里主要是将每个簇的marker基因筛选出来。
如果是获得的是DESeq2这类的数据,本身其使用的是counts数据,来进行差异分析和聚类。包含一些文库、细胞因子等信息等。
那么这里其实是使用了标准化之后的表达矩阵,因此直接使用了wilcox检验。
#if test.use is "negbinom", "poisson", or "DESeq2", slot will be set to "counts
diff.wilcox = FindAllMarkers(scRNA)##默认使用wilcox方法挑选差异基因,大概4-5min
# 这里有准备好的文件,根据位置可以修改
# load("../../tmp/diff.wilcox.Rdata")
head(diff.wilcox)
dim(diff.wilcox)
得到的这里获得的data.frame就是diff.wilcox应该是每个基因在不同簇之间的差异p值。
基于wilcox进行差异检验获取基因。这里的%>%是管道函数,将前者直接作为后者的第一个元素进行计算。
在all.markers函数中就已经根据筛选要求将这些表达量中的基因筛选了出来。
library(tidyverse)
all.markers = diff.wilcox %>% select(gene, everything()) %>%
subset(p_val<0.05 & abs(diff.wilcox$avg_log2FC) > 0.5)
#An adjusted P value < 0.05and | log 2 [fold change (FC)] | > 0.5
#were considered the 2 cutoff criteria for identifying marker genes.
dim(all.markers)
summary(all.markers)
Tip:管道函数
就是把左件的值发送给右件的表达式,并作为右件表达式函数的第一个参数,就是管道函数。
例如:
anscombe_tidy <- anscombe %>%mutate(observation = seq_len(n()))
以上代码等价于:
anscombe_tidy=mutate(anscombe,observation = seq_len(n()))
扩展资料:
1、管道函数的作用
%>%来自dplyr包的管道函数,其作用是将前一步的结果直接传参给下一步的函数,从而省略了中间的赋值步骤,可以大量减少内存中的对象,节省内存。
符号%>%,这是管道操作,其意思是将%>%左边的对象传递给右边的函数,作为第一个选项的设置(或剩下唯一一个选项的设置)
top10 = all.markers %>% group_by(cluster) %>% top_n(n = 10, wt = avg_log2FC)
# 所有基因先分组,再根据avg_log2FC进行排序。
top10
top10 = CaseMatch(search = as.vector(top10$gene), match = rownames(scRNA))
top10
length(top10)
# 检查是否在多个cluster中都是差异基因。
length(unique(sort(top10)))
p3_2 <- DoHeatmap(scRNA, features = top10, group.by = "seurat_clusters")
# 将marker基因差异做个热图看一下每组的分布。
p3_2
p3_1 | p3_2 #下图
top_n()是取前多少以及后多少的一个函数,可根据tw进行选择所参考的参数。这里要注意dplyr包对该函数有个更新,可能后续会用新的语法。具体用法可以参见?top_n()
casematch()是将case中作为要给vector再在所有的scRNA中进行match,返回的就是match到的值,本例中就是基因名。
相当于再确认一次,在删除RNA中,并筛选相应的基因名,作为vector进入后续的分析和研究中。
而在length(unique(sort()))中就是将之排序后,再将重复的基因去掉,这样就能看有多少个独特的基因被筛选出来。
因为取了10个top基因,因此应该是获得cluster数*top基因数(10)的总的基因数目,进而再去看,去重的话剩多少个基因数目。
最后将marker基因作为差异进行作图,将结果拼图。
P 2.6 拼图,|为并列,/为换行。其余无殊。