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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342