单细胞RNAseq常规分析流程(10X)

降维聚类,类型鉴定,差异分析

近年来,单细胞测序的成本逐渐降低,使得大众研究从组织水平转移到单个细胞水平的分析成为可能。本文主要是简单介绍一下SingleCellRNAseq(ScRNA)分析的基本流程,适用于大多数单细胞数据的前期分析,旨在介绍分析的流程和用到的方法,具体细节还需要感兴趣的你们深入挖掘。

主要分析流程

  1. 原始数据处理
  2. 细胞降维与聚类
  3. 细胞类群鉴定
  4. 基因差异表达分析
  5. 基因功能注释,细胞通讯,通路差异分析等

一,数据处理 -- Cellranger

  • 在本篇文章中,我们都是基于10X来源的单细胞数据
    Cellranger输入的每个样本包含3个文件:L1, R1,R2


    rawdata.sample1.png
mkdir cellranger_output
cd cellranger_output
cellranger count \
--id= sample1 \
--transcriptome= "refdata-cellranger-GRCh38-3.0.0/" \
--fastqs= "../rawdata/sample1/"  \
--r2-length = 98
  • tips: --id 是cellranger 输出文件,切记不可以与rawdata在同一文件夹下同名,否则会出现环境错误等奇怪的报错
    Cellranger输出的每个样本也包含3个文件:barcode, features(genes),matrix


    cellranger.out.png

    很多时候,我们都可以从GEO网站上直接下载到上述3个文件的。

二,细胞降维与聚类 -- Seurat

2.1 创建Seurat 对象

2.1.1 基于10X标准输出文件(barcode, features,matrix)创建Seurat 对象

读取10X标准输出文件

# 将barcode, features,matrix三个文件,放入 sample1文件夹中
data <- Read10X(data.dir =samples1,gene.column = 1) 
feature<-read.table("features.tsv.gz",head=F,sep="\t")
gene<-as.character(feature[match(rownames(data),feature$V1),"V2"])

创建Seurat对象

project<-CreateSeuratObject(counts =data, project = samples1)

2.1.2 基于GEO处理后的表达矩阵创建Seurat 对象

如果你下载到的数据是gene-sampleID的表达矩阵,那么这个数据集是别人已经处理好了的。你可以直接使用,或者自己重新降维,聚类,细胞类群鉴定等等。(以 GSE132465为例)


precesseddata.png
datadir = "GSE132465_GEO_processed_CRC_10X_raw_UMI_count_matrix.txt"
metadata = "GSE132465_GEO_processed_CRC_10X_cell_annotation.txt"
outdir = "./Dimention"
nfeature<-100
ncount<-200
mito<-10
ribo<-100
red<-10
## read  gene-sampleID matrix  and  metadata ---------------
data<-fread(datadir,sep = "\t", header = T,check.names = F)
data<-data.frame(data,check.names = F, row.names = 1)

metadata<-fread(metadata,sep = "\t", header = T,check.names = F)
metadata<-data.frame(metadata,check.names = F, row.names = 1)
  • 根据表达矩阵创建SeuratObject
    (在生信分析中,这种对象有很多,比如你们可能会用到的CellChatObject, 最好是搞清楚他的组成和使用)
## Create SeuratObject ------------------------------------
project = CreateSeuratObject(counts = data,metadata = metadata)
project = AddMetaData(object = project, metadata = metadata)

2.1.3 数据清洗

table(grepl("^RP[SL][[:digit:]]",rownames(project)))
project[["mito.per"]]  = PercentageFeatureSet(project, pattern = "^MT-")
project[["ribo.per"]]  = PercentageFeatureSet(project, pattern = "^RP[SL][[:digit:]]")
project[["redcell.per"]]  = PercentageFeatureSet(project, pattern = "^HB-")

project <- subset(project, 
                  subset = nFeature_RNA >= nfeature &
                          nCount_RNA >= ncount &
                          mito.per <= mito &
                          ribo.per <= ribo &
                          redcell.per<=red )

数据保存,这个很重要哦,方便以后对结果的补充和复现呀。

2.2 数据降维聚类的流程

主要流程为:log:Normalize --> FindVariableFeatures --> ScaleData --> RunPCA --> FindNeighbors --> FindClusters --> RunTSNE/RunUMAP

2.2.1 log : NormalizeData

project<- NormalizeData(object = project, scale.factor = 10000)

Normalize.png

2.2.2 找差异基因

project<- FindVariableFeatures(object = project, selection.method = "vst", nfeatures = 2000, mean.cutoff = c(0.1, 8),dispersion.cutoff=c(1, Inf))

FindVariableFeatures.png

2.2.3 标准化

project <- ScaleData(project,verbose = FALSE,features=rownames(project))

2.2.4 PCA

project <- RunPCA(project, npcs = 10, verbose = FALSE)

2.2.5 构建图

project <- FindNeighbors(project, reduction = "pca", dims = 1:10)

FindNeighbors.png

2.2.6 聚类

project <- FindClusters(project, resolution = 0.8)
resolution :聚类分辨率,可以调整该参数以调节合适的聚类数目。

FindClusters.png

2.2.7 降维 tsne /umap

tsne
project <- RunTSNE(object = project, reduction = "pca",dims = 1:10)
umap
project <- RunUMAP(object = project, reduction = "pca",dims = 1:10,umap.method = "umap-learn", check_duplicates = FALSE)

  • umap.method = "umap-learn" 基于python 的umap 包
  • 执行之前,先执行 -- py_module_available(module = 'umap')


    umap.png

对降维后的细胞可视化,即可看到降维后聚类的细胞分布情况。
尽量选择不同类别边界清晰的一组参数进行后续的细胞类群鉴定。


metadata.png
  • 可以通过调节 resolution,改变cluster (本次聚类中,resolution=0.4 RNA_snn_res.0.4, 聚成21 类)

DimPlot(object=project,dims = c(1, 2), reduction ="umap", group.by = c("seurat_clusters"),label = TRUE)

UMAP_by_Sample.png

tSNE_by_Sample.png

保存聚类后的seurat对象为project.rds 用于后续细胞类群鉴定。

三,细胞类群鉴定

在这里,以UMAP图为基础,进行细胞类群鉴定

3.1 根据已有marker 鉴定细胞类型

首先需要自行整理出markergene.txt文件

markergene.txt.png

思路:将marker gene map到UMAP图上,综合确定细胞类群。
获取数据中存在的marker gene

gene<-read.table("markergene.txt",sep="\t",header=T,check.names=F)
data<-project@assays$RNA@data
target_gene<-intersect(gene[,2],rownames(data))

将marker gene map到UMAP图上

DefaultAssay(project) <- "RNA"
subdata <- lapply(1:length(target_gene),function(tg){
      sub = data.frame(barcode=colnames(data),
                      exp=data[target_gene[tg],],
                      Gene=target_gene[tg],
                      celltype=pdf_name)
      umap = as.data.frame(project@reductions$umap@cell.embeddings)
      sub <- cbind(sub,umap)
      return(sub)
      })

subdata<-do.call('rbind',subdata)
ggplot(subdata,
aes(x=UMAP_1, y=UMAP_2, color=exp)) + 
geom_point(size=0.5,alpha=1)+
theme_bw()+facet_wrap(~Gene,ncol=col_num)+theme(legend.position="right",panel.grid=element_blank(),axis.text=element_blank(),axis.title=element_text(size=rel(2),color="black"),strip.background=element_rect(fill="white",colour="white"),axis.line =element_line(colour="black",size=),axis.ticks.length = unit(0,"cm"),strip.text = element_text(face="bold", size=rel(2)),plot.title=element_text(size=rel(3),color="black",hjust=0.5))+
scale_color_gradient(low="#cee7f4", high="red") 
UMAP.png
Bmarker.png

先初步判定cluster 4,5,11为B cell

Epithelial cell marker.png

这个就很明显了,cluster 3,13,14,15,17, 为 上皮细胞,cluster 9,先打个问号吧。

myeloid cellmarker.png

cluster 6,7 认为是 Myeloid cell


Mast cell marker.png

cluster21 为 mast cell

T cell marker.png

cluster 1,2,16,18,20 为T cell, cluster 9也有可能是T cell?

Endothelial cell marker.png

cluster 12 为 , Endothelial cell

好了,总结一下,到目前为止鉴定出来的cluster分别是

  • B cells: cluster 4,5,11
  • T cells: cluster 1,2,16,18,20
  • epithelial cells: cluster 3,13,14,15,17
  • endothelial cells:cluster 12
  • Myeloid cells: cluster 6,7
  • Mast cells: cluster 21
    一共21个cluster, 现在不确定的就剩下cluster 9,8,10啦。

3.2 根据差异基因鉴定细胞类型

除了去map已知文献报道的marker gene, 我们还可以用生信分析的基本功--计算差异基因,再根据差异基因去网站(eg. CellMarker:http://bio-bigdata.hrbmu.edu.cn/CellMarker/)上查询所属的细胞类型,综合做出判断。

cluster8-deg.png

在CellMarker上,查询COL1A1。
CellMarker-COL1A1.png

发现很有可能是成纤维细胞,于是再次查询文献报道过的Fibroblast marker gene, 最后综合判断cluster 8,10 为Fibroblast cells.
Fibroblast marker.png

我们在cluster9中并没有看到明显的独立的cluster特有的差异基因,综合上面的结果,判定cluster 为T cell


Cluster9-deg.png

cluster19 太小了,好像刚刚漏掉了,因为该样本是肠癌样本,cluster19map 上了肠神经胶质细胞的marker , 同时,cluster19特异的gene 查询到属于Schwann cell,属于神经胶质细胞的一种,所以判定cluster19为 Enteric glial cells。


Enteric glial cells.png

Cluster19-deg.png
sina.blog.png

好啦,耗时大半天,终于确定细胞类型啦,我们来再次总结一下:

  • B cells: cluster 4,5,11
  • T cells: cluster 1,2,9,16,18,20
  • Epithelial cells: cluster 3,13,14,15,17
  • Endothelial cells:cluster 12
  • Myeloids: cluster 6,7
  • Mast cells: cluster 21
  • Fibroblast: cluster 8,10
  • Enteric glial cells: 19
UMAPplot_by_celltype.png

由于我们下载到的GEO数据集是已经给出细胞类型鉴定结果的,所以我们来看一下作者的结果,还是有一点点差异的,不过大的细胞类群鉴定结果几乎相同。

作者的细胞类型如下:


cell_type.png
  • 个人认为,细胞类群鉴定本身不是一件特别精确的事情,他需要同时综合样本来源,常见细胞类群的关键基因的生物学知识,以及基于生信分析手段得到的差异基因的表达情况等来判定,总之能自圆其说就好,不必针对个别cluster锱铢必较啦。当然,如果你们有更好的方法,欢迎留言哦。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容