空间转录组第六讲:数据预处理、降维、聚类(seurat)

前面我们有介绍了利用10x Space Ranger软件分析空间转录组原始数据得到可用于下游分析的矩阵和镜像文件。今天来介绍一下怎么利用Space Ranger的结果文件进行后续分析,这里主要使用Seurat在进行下游分析。

先来回顾一下跑完Space Ranger得到哪些结果文件:

Outputs:
- Run summary HTML:                         /opt/sample345/outs/web_summary.html
- Outputs of spatial pipeline:              /opt/sample345/outs/spatial
- Run summary CSV:                          /opt/sample345/outs/metrics_summary.csv
- BAM:                                      /opt/sample345/outs/possorted_genome_bam.bam
- BAM index:                                /opt/sample345/outs/possorted_genome_bam.bam.bai
- Filtered feature-barcode matrices MEX:    /opt/sample345/outs/filtered_feature_bc_matrix
- Filtered feature-barcode matrices HDF5:   /opt/sample345/outs/filtered_feature_bc_matrix.h5
- Unfiltered feature-barcode matrices MEX:  /opt/sample345/outs/raw_feature_bc_matrix
- Unfiltered feature-barcode matrices HDF5: /opt/sample345/outs/raw_feature_bc_matrix.h5
- Secondary analysis output CSV:            /opt/sample345/outs/analysis
- Per-molecule read information:            /opt/sample345/outs/molecule_info.h5
- Loupe Browser file:                       /opt/sample345/outs/cloupe.cloupe

用seurat进行下游分析主要用到两个结果文件。一个是filtered_feature_bc_matrix.h5文件,一个是spatial镜像结果目录。

安装R包

由于seurat分析空间转录组的R包satijalab-seurat是在GitHub 上的,如果我们需要直接安装的话需要先安装R包devtools,然后利用devtools工具中的install_github来安装GitHub上的R包。

安装devtools

install.packages('devtools')

安装satijalab-seurat

devtools::install_github("satijalab/seurat",ref = "spatial")

考虑到直接安装github上的R包速度是很慢的,非常考验网速,可能需要多次才能安装成功,我们也可以直接下载安装包,本地安装。

#下载
https://codeload.github.com/satijalab/seurat/legacy.tar.gz/spatial 
#安装
install.packages("satijalab-seurat-v3.1.5-351-g85610bc.tar.gz", repos = NULL, type = "source")

注意该R包还在开发中,不要和之前安装的seurat包冲突。

数据准备

这里使用从10x官网下载的小鼠脑组织样本MouseBrain Serial Section 1 (Sagittal-Posterior)。

下载网址:https://support.10xgenomics.com/spatial-gene-expression/datasets

image.png

点击选择的样本,下载两个数据就行
cell matrix HDF5 (filtered)和Spatial imaging data


image.png

导入R包读取文件

library("Seurat")
library("ggplot2")
library("cowplot")
library("dplyr")
library("hdf5r")
##读取矩阵文件
name='Posterior1'
expr <- "/data/Sagittal-Posterior1/V1_Mouse_Brain_Sagittal_Posterior_filtered_feature_bc_matrix.h5"
expr.mydata <- Seurat::Read10X_h5(filename =  expr )
mydata <- Seurat::CreateSeuratObject(counts = expr.mydata, project = 'Posterior1', assay = 'Spatial')
mydata$slice <- 1
mydata$region <- 'Posterior1' #命名
#读取镜像文件
imgpath <- "/data/Sagittal-Posterior1/spatial"
img <- Seurat::Read10X_Image(image.dir = imgpath)
Seurat::DefaultAssay(object = img) <- 'Spatial'
img <- img[colnames(x = mydata)]
mydata[['image']] <- img
mydata  #查看数据
An object of class Seurat
32285 features across 3355 samples within 1 assay
Active assay: Spatial (32285 features)

从mydata的输出信息我们可以知道,这个样本包含3355个spot点、32285个基因。

基础统计作图

##UMI统计画图
plot1 <- VlnPlot(mydata, features = "nCount_Spatial", pt.size = 0.1) + NoLegend()
plot2 <- SpatialFeaturePlot(mydata, features = "nCount_Spatial") + theme(legend.position = "right")
plot_grid(plot1, plot2)
image.png

UMI数大部分集中到10000-20000区间,最高不超过80000,并且组织中高UMI数的区域主要集中在左下角。后面可以特意性关注一下左下角区域的基因的表达和主要的细胞类型。

##gene数目统计画图
plot1 <- VlnPlot(mydata, features = "nFeature_Spatial", pt.size = 0.1) + NoLegend()
plot2 <- SpatialFeaturePlot(mydata, features = "nFeature_Spatial") + theme(legend.position = "right")
plot_grid(plot1, plot2)
image.png

基因数目大部分处于2500-7500之间,结合UMI数据的分布可以发现UMI数目高的区域基因数也高,说明基因数和UMI数基本上是呈正相关的。

#线粒体统计
mydata[["percent.mt"]] <- PercentageFeatureSet(mydata, pattern = "^mt[-]")
plot1 <- VlnPlot(mydata, features = "percent.mt", pt.size = 0.1) + NoLegend()
plot2 <- SpatialFeaturePlot(mydata, features = "percent.mt") + theme(legend.position = "right")
plot_grid(plot1, plot2)

注意如果是人的数据pattern = "^mt[-]改成pattern = "^MT[-]

image.png

总体来说,这个样本的线粒体比例不高,左边中上区域有一处线粒体比例稍微高一点,后面也可以仔细研究一下这一块区域到底是特定的细胞类型引起的还是组织活性的差异引起的。不过从这张图我们还可以发现一个有意思的现象,基因和UMI高表达的区域往往线粒体比例更低。

数据过滤

做单细胞RNAseq我们都会根据UMI、基因数、线粒体比例等进行过滤,那么做空间转录组数据分析其实我们也可以按这样的方式来过滤。具体的过滤条件需要根据具体样本数据来定,没有固定的标准。
比如这个样本我们可以设置过滤条件:
① 基因数大于200,小于7500
② UMI数大于1000,小于60000
③ 线粒体比例小于25%

mydata2 <- subset(mydata, subset = nFeature_Spatial > 200 & nFeature_Spatial <7500 & nCount_Spatial > 1000 & nCount_Spatial < 60000 & percent.mt < 25)
mydata2
An object of class Seurat
32285 features across 2977 samples within 1 assay
Active assay: Spatial (32285 features)

过滤后还剩2977个spot点。过滤后我们在绘制一下UMI分布图。

plot1 <- VlnPlot(mydata2, features = "nCount_Spatial", pt.size = 0.1) + NoLegend()
plot2 <- SpatialFeaturePlot(mydata2, features = "nCount_Spatial") + theme(legend.position = "right")
plot_grid(plot1, plot2)

image.png

那么现在问题来了,过滤之后组织图像里面缺了几块,显得特别丑。那么我们到底应不应该过滤呢?过滤数据可以减少利群的点,减少对后面聚类结果的影响,不过滤数据可以让组织图像保持完整性,绘图更好看一点,所以这个还真不好决断。

数据归一化

Seurat官方推荐使用sctransform 归一化方法,它构建了基因表达的正则化负二项模型,以便在保留生物差异的同时考虑技术因素。
Sctransform函数同时实现了NormalizeData、ScaleData、FindVariableFeatures三个函数的功能。

mydata <- SCTransform(mydata, assay = "Spatial", verbose = FALSE)

基因表达可视化

Seurat的SpatialFeaturePlot功能扩展了FeaturePlot,可以将表达数据覆盖在组织组织上。这里展示的Hpca基因是一个强的海马marker ,Ttr是一个脉络丛marker 。可以通过基因的表达分布来初步判断一下海马区和脉络丛区处于组织切片的哪个位置。

image.png

从结果的展示来看,这两个marker基因的分布还是挺集中的,这也说明理由空间转录组数据来分析小鼠脑的不同区域的表达差异应该还是比较准确的。另外,海马区的分布可以大概分成3大块,从上之下第一块弧形区域似乎处于线粒体高表达区域,而最下面一块弧形区处于基因高表达区。后面可以把这三个不同区域的数据进行差异基因和功能的比较也许会发现一些有意思的东西。

降维、聚类和可视化

先进行PCA降维,再选择前30个维度进行聚类和umap降维。

降维、聚类和可视化

mydata <- RunPCA(mydata, assay = "SCT", verbose = FALSE)
mydata <- FindNeighbors(mydata, reduction = "pca", dims = 1:30)
mydata <- FindClusters(mydata, verbose = FALSE)
mydata <- RunUMAP(mydata, reduction = "pca", dims = 1:30)
mydata <- RunTSNE(mydata, reduction = "pca",dims = 1:30)

tsne展示结果:

image.png

Umap展示结果:
image.png

tsne和umap两种展示方式在这次分析里差别不是特别大,tsne相对来说群于群之间分的更开,而umap则单个亚群位置更集中。这个时候我们也可以结合前面marker基因的表达分布图来大概判断一下每个亚群大概处于小鼠脑的那个区。

由于亚群的颜色比较接近,有时候不太好判断,我们可以是cells.highlight来标记特定的亚群。

SpatialDimPlot(mydata, cells.highlight = CellsByIdentities(object = mydata, idents = c(1, 2, 3, 4, 
   5, 6)), facet.highlight = TRUE, ncol = 3)
image.png

当然也可以利用LinkedDimPlot和LinkedFeaturePlot函数进行交互式可视化,这里不再展示。


image.png

扫码关注公众号,内容更精彩哦!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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