scRNA-seq拟时间分析数据处理


拟时间分析简介

拟时序(pseudotime)分析,又称细胞轨迹(cell trajectory)分析,通过拟时分析可以推断出发育过程细胞的分化轨迹或细胞亚型的演化过程,在发育相关研究中使用频率较高。

主要基于关键基因的表达模式,通过学习每个细胞必须经历的基因表达变化的序列,在拟时间中对单个细胞进行排序,模拟出时间发育过程的动态变化。而这个排序技术表现是一种在低维空间排布高维数据的降维技术。(具体描叙请参考:https://www.meiwen.com.cn/subject/zlgsvqtx.html)

如何利用单细胞数据来分析细胞的分化轨迹或细胞亚型的演化过程?这里给大家介绍monocle软件,该软件能从数据中用无监督或半监督学习获得这个轨迹。无监督方式是利用seurat对细胞进行聚类,通过cluster间的差异基因对细胞进行排序。

在做拟时序分析之前,先要明白几个研究目的:

1. 对什么类型的细胞群进行拟时许分析?这类细胞群在不同的分化轨迹或细胞亚型的区别是否明显?

2. monocle做拟时序分析时,可与seurat聚类结果进行对接,因此可对seurat的分群结果进行定性的解释。

3. 可分析比较组间的差异或者多组样本间拟时间分析差别。

Seurat对象转换成monocle对象

如果你已经完成了seurat分类(数据已经经过质控),而且你希望通过seurat的分类后cluster的差异基因来对细胞进行排序。以下方法可供选择。

Seurat2的版本。可直接使用importRDS进行seurat对象和monocle对象间的转换。

    spleen <-readRDS("seurat.analysis.rds") 

    monocle_cds <-importCDS(spleen,import_all=TRUE)  

Seurat3版本。Seurat3版本没有importRDS函数了,因此需要手动构建clustered_spleen_monocle对象。  

    spleen <-readRDS("seurat.analysis.rds")

    data <- as(as.matrix(spleen@assays$RNA@counts), 'sparseMatrix')  ##此处需要提供绝对的count值。  

    pd <- new('AnnotatedDataFrame', data = spleen@meta.data)  

    fData <- data.frame(gene_short_name = row.names(data), row.names = row.names(data)  

    fd <- new('AnnotatedDataFrame', data = fData)       

    monocle_cds <- newCellDataSet(data, 

                        phenoData = pd,  

                        featureData = fd,  

                        lowerDetectionLimit = 0.5,  

                        expressionFamily = negbinomial.size()) ##newCellDataSet构建monocle对象 

使用差异基因进行细胞排序

对细胞进行排序之前,首先要进行降维。降维后形成细胞cluster,通过cluster形成的细胞集,对细胞轨迹进行训练。

这里根据需要,提供两种思路进行分析。

由于做拟时间分析时,构建monocle_cds对象采用的是基因的counts值,因此要对基因的表达量进行标准化处理。而作者也建议即使seurat做了标准化,在这里还要进行标准化。(见 https://www.jianshu.com/p/aaa0c768c861)

monocle_cds  <- estimateSizeFactors(monocle_cds ) #计算SizeFactor

monocle_cds  <- estimateDispersions(monocle_cds ) #计算Dispersions

1 重新进行聚类分析来对细胞轨迹进行无监督学习分析。

      #先绘制主成分对应的解释方差的值可视化图形。      

    plot_pc_variance_explained(monocle_cds , return_all = F, max_components = 25)

    # 这里的num_dim选择多少个主成分来进行降维,需要根据PCA分布图进行确定,一般是选择斜率第一次出现最小值时对应的主成分点。

    HSMM_myo <- reduceDimension(my_cds,max_components = 2,norm_method = 'log',num_dim = 3,reduction_method = 'tSNE',verbose = T)

    # number指要将细胞分成多少个cluster。

    HSMM_myo <- clusterCells(HSMM_myo, verbose = F,num_clusters = number)

    graph <- paste(prefix,'cell_clusters.pdf',sep='_')

    pdf(graph, w=12, h=8)

    plot_cell_clusters(HSMM_myo, color_by = 'as.factor(Cluster)')

    dev.off()

2 根据seurat已经聚好的类对细胞轨迹进行无监督学习分析。

    # 如果导入的是Seurat3版本的rds文件,需在pData(HSMM_myo)矩阵中添加一列Cluster,即细胞群编号。

    HSMM_myo <- moocle_cds

    pData(HSMM_myo)$Cluster <- pData(HSMM_myo)$seurat_clusters

    clustering_DEG_genes <-row.names(subset(fData(HSMM_myo),num_cells_expressed >= 10)) 

3 细胞排序

    这一步很慢,可调整所使用的的线程cores加快运行速度。

    diff_test_res <- differentialGeneTest(HSMM_myo,fullModelFormulaStr = "~Cluster",,cores = 4)

    # 选择用来排序的基因。官网给的是q-value值在top1000的基因,此处也可以进行调整。

    HSMM_ordering_genes <-row.names(clustering_DEG_genes)[order(clustering_DEG_genes$qval)][1:1000]

    # 调整用来排序的基因,选择qval< 1e-4。

    HSMM_ordering_genes <- row.names (subset(clustering_DEG_genes, qval < 1e-4))

    # 对细胞进行排序

    HSMM_myo <-setOrderingFilter(HSMM_myo,ordering_genes = HSMM_ordering_genes)

    HSMM_myo <-reduceDimension(HSMM_myo, method = 'DDRTree')

    HSMM_myo <-orderCells(HSMM_myo)

4 对排序好的结果进行可视化输出

    Cluster_num<-ceiling(length(unique(pData(HSMM_myo)$Cluster))/4)

    pData(HSMM_myo)$seurat_clusters <- as.factor(pData(HSMM_myo)$seurat_clusters)

    graph <- paste(prefix,'cell_trajectory_cluster.pdf',sep='_')

    pdf(graph, w=12, h=8)

    #按state对细胞进行着色

    plot_cell_trajectory(HSMM_myo, color_by = "State",cell_size = 0.75)    

    plot_cell_trajectory(HSMM_myo, color_by = "State",cell_size = 0.75)+facet_wrap(~State, nrow = Cluster_num)

    #按拟时间值对细胞进行着色

    plot_cell_trajectory(HSMM_myo, color_by = "Pseudotime",cell_size = 0.75)

    #按cluster id进行着色

    plot_cell_trajectory(HSMM_myo, color_by = "seurat_clusters",cell_size = 0.75)

    plot_cell_trajectory(HSMM_myo, color_by = "seurat_clusters",cell_size = 0.75)+facet_wrap(~seurat_clusters, nrow =Cluster_num)

    #按样本进行着色

    plot_cell_trajectory(HSMM_myo, color_by = "stim",cell_size = 0.75)

    plot_cell_trajectory(HSMM_myo, color_by = "stim",cell_size = 0.75)+facet_wrap(~stim, ncol =opt$sample_number)

    dev.off()

参考文章见:

1 https://www.jieandze1314.com/post/cnposts/scrna-notes-18/

2 https://www.jianshu.com/p/aaa0c768c861

3 https://www.jianshu.com/p/2b9982cb7d89

你可能感兴趣的