10X单细胞转录组下游流程-1-整合多个cellranger结果

1. 写在前面

  • 因为后续的课题以及下一次的JC都准备做单细胞的,所以开始学习单细胞转录组的下游分析。
  • 又因为7月在珠海跑过一次基于Seurat v2的单细胞转录组下游流程,所以这一次准备做一些不一样的,首先是在新买的服务器上跑,其次是自己摸一摸Seurat v3,和原作者的v2比一比。
  • 说是自己摸索,其实还是有前辈先探路了(毕竟开始得这么晚,很不好意思),前辈的首页,里面有技能树暑期单细胞培训两篇文章(分别是10X和smart-seq)的流程复现。
  • 除此之外,学习资料当然离不开Jimmy老师的录频和代码。

2. 读取数据

  • 上游分析的结果中,对我们最有用的是三个文件和一个报告
  • 我们本次使用的数据是作者测的同一个患者四个时期的PBMC样本


  • 这四个sra文件和四个时间点的对应关系是

| SRR7722939 | PBMC Pre |

| SRR7722940 | PBMC Disc Early |

| SRR7722941 | PBMC Disc Resp |

| SRR7722942 | PBMC Disc AR |

  • 开始读取
library(Seurat)
sce.10x <- Read10X(data.dir = './cellranger/four-PBMC-mtx/SRR7722939/')
sce1 <- CreateSeuratObject(counts = sce.10x,
                           min.cells = 60,
                           min.features = 200,
                           project = "SRR7722939")
sce1
sce.10x <- Read10X(data.dir = './cellranger/four-PBMC-mtx/SRR7722940/')
sce2 <- CreateSeuratObject(counts = sce.10x,
                           min.cells = 60,
                           min.features = 200,
                           project = "SRR7722940")
sce2
sce.10x <- Read10X(data.dir = './cellranger/four-PBMC-mtx/SRR7722941/')
sce3 <- CreateSeuratObject(counts = sce.10x,
                           min.cells = 60,
                           min.features = 200,
                           project = "SRR7722941")
sce3
sce.10x <- Read10X(data.dir = './cellranger/four-PBMC-mtx/SRR7722942/')
sce4 <- CreateSeuratObject(counts = sce.10x,
                           min.cells = 60,
                           min.features = 200,
                           project = "SRR7722942")
sce4
> sce1;sce2;sce3;sce4
An object of class Seurat
6163 features across 2047 samples within 1 assay
Active assay: RNA (6163 features)
An object of class Seurat
4267 features across 1074 samples within 1 assay
Active assay: RNA (4267 features)
An object of class Seurat
5480 features across 4311 samples within 1 assay
Active assay: RNA (5480 features)
An object of class Seurat
6429 features across 4028 samples within 1 assay
Active assay: RNA (6429 features)
  • 和技能树提供的v2代码跑出来有些许差异,我们暂且忽视。

  • v2,v3的Seurat对象结构也是不一样的,先探索一下。



  • 我大胆猜测这个assays它就是v2里的data(后面证明是猜错了),而这个meta.data应该和原来是一样的。

3. 添加分组信息

[email protected]$group <- "PBMC_Pre"
[email protected]$group <- "PBMC_EarlyD27"
[email protected]$group <- "PBMC_RespD376"
[email protected]$group <- "PBMC_ARD614"
  • meta.data的确没变,所以这个代码跑下来没问题

4. 添加分组信息至细胞名

  • 在v2中,我们是可以通过colnames(sce1@data)来看到每个细胞的barcode的,但v3中我们不能通过colnames(sce1@assays)来做到同样的事情,看来果然不是变了个名字那么简单,我们继续探索assays的结构。
> str(sce1@assays)
List of 1
#后面还有一大堆
#既然是个列表,我们就取它第一项看看
> str(sce1@assays[[1]])
Formal class 'Assay' [package "Seurat"] with 7 slots
  • 我们来看看这7个slots分别是啥


  • 很可能这个data才类似v2中的data

  • 那么我们就在这里添加组别

head(colnames(sce1@assays[[1]]@data))
colnames(sce1@assays[[1]]@data) <- paste0("PBMC_Pre.",colnames(sce1@assays[[1]]@data))
head(colnames(sce1@assays[[1]]@data))
colnames(sce1@assays[[1]]@data) <- paste0("PBMC_Pre.",colnames(sce1@assays[[1]]@data))
colnames(sce1@assays[[1]]@data) <- paste0("PBMC_Pre.",colnames(sce1@assays[[1]]@data))
colnames(sce1@assays[[1]]@data) <- paste0("PBMC_Pre.",colnames(sce1@assays[[1]]@data))

5. 归一化+标准化

  • 这里用的是公司官网的推荐函数
sce1 <- NormalizeData(sce1)
sce1 <- ScaleData(sce1, display.progress = F)
sce2 <- NormalizeData(sce2)
sce2 <- ScaleData(sce2, display.progress = F)
sce3 <- NormalizeData(sce3)
sce3 <- ScaleData(sce3, display.progress = F)
sce4 <- NormalizeData(sce4)
sce4 <- ScaleData(sce4, display.progress = F)

6. 整合

  • 技能树提供的代码跑出来整合效果是没有原作者好的,四组细胞分得比较开,理想情况是各个群里四组细胞都存在。
[email protected]$orig.ident <- "PBMC_Pre"
[email protected]$orig.ident <- "PBMC_EarlyD27"
[email protected]$orig.ident <- "PBMC_RespD376"
[email protected]$orig.ident <- "PBMC_ARD614"

sce.big <- merge(sce1,
                 y = c(sce2,sce3,sce4),
                 add.cell.ids = c("PBMC_Pre.","PBMC_EarlyD27.","PBMC_RespD376.","PBMC_ARD614."),
                 project = "p1-PBMC")

table(sce.big$orig.ident)
sce.big <- SCTransform(sce.big, verbose = FALSE)
sce.big <- RunPCA(sce.big, verbose = FALSE)
sce.big <- RunTSNE(sce.big, verbose = FALSE)
DimPlot(object = sce.big,
        reduction = "tsne",group.by = 'orig.ident')
  • 可以看到效果还算可以
  • 再按亚群画图
sce.big <- FindNeighbors(sce.big, dims = 1:20)
sce.big <- FindClusters(sce.big, resolution = 0.2)
DimPlot(object = sce.big, reduction = "tsne",
        group.by = 'SCT_snn_res.0.2')#这里的SCT_snn_res.0.2就是分群信息
> table(sce.big$SCT_snn_res.0.2,sce.big$orig.ident)

     PBMC_ARD614 PBMC_EarlyD27 PBMC_Pre PBMC_RespD376
  0         1175           347       22          1555
  1          987           152      137          1103
  2          862            35       24           488
  3          396            43       14           471
  4            0             2      862             1
  5          294             0      160           330
  6           26           272        6           261
  7            0             1      361             1
  8            1            43      228             2
  9          112           130        1            15
  10           0             0      205             5
  11         134            29        4            29
  12          41            20       23            50
  • 从数据上看效果依旧不是太好。

你可能感兴趣的:(10X单细胞转录组下游流程-1-整合多个cellranger结果)