美文网首页
M3Drop用法的修改

M3Drop用法的修改

作者: 因地制宜的生信达人 | 来源:发表于2020-01-26 14:21 被阅读0次

    两年前我们介绍的用米氏方程解决单细胞转录组dropout现象的文章提出的那个算法,被包装到了R包,是:M3Drop ,文章最开始 2017年发表在biorxiv的是:Modelling dropouts for feature selection in scRNASeq experiments 后来(2019)published in Bioinformatics doi: 10.1093/bioinformatics/bty1044 ,而且整个包的使用方法发生了变化,值得记录和分享一下。

    首先回顾一下单细胞流程

    单细胞R包如过江之卿,入门的话我推荐大家学习5个R包,分别是: scater,monocle,Seurat,scran,M3Drop 需要熟练掌握它们的对象,:一些单细胞转录组R包的对象 而且分析流程也大同小异:

    • step1: 创建对象
    • step2: 质量控制
    • step3: 表达量的标准化和归一化
    • step4: 去除干扰因素(多个样本整合)
    • step5: 判断重要的基因
    • step6: 多种降维算法
    • step7: 可视化降维结果
    • step8: 多种聚类算法
    • step9: 聚类后找每个细胞亚群的标志基因
    • step10: 继续分类

    其中一个步骤是判断重要的基因,我分享过:比较5种scRNA鉴定HVGs方法 里面就提到了 M3Drop::BrenneckeGetVariableGenes 函数,但是如果大家看到的是我早期教程,会发现很多函数用不了了。有必要更新一下教程。

    认识测试数据

    library(M3Drop)
    library(M3DExampleData) 
    counts <- Mmus_example_list$data
    labels <- Mmus_example_list$labels
    total_features <- colSums(counts >= 0)
    counts <- counts[,total_features >= 2000]
    labels <- labels[total_features >= 2000]
    

    是5个分组,133个细胞

    > table(labels)
    labels
    early2cell earlyblast  late2cell   mid2cell   midblast 
             8         43         10         12         60 
    > dim(counts)
    [1] 17706   133
    

    首先,它提供3种判断重要的基因的方法

    norm <- M3DropConvertData(counts, is.counts=TRUE)
    # norm <- M3DropConvertData(log2(norm+1), is.log=TRUE, pseudocount=1)
    ###################################################
    M3Drop_genes <- M3DropFeatureSelection(norm, mt_method="fdr", mt_threshold=0.01)
    
    count_mat <- NBumiConvertData(Mmus_example_list$data, is.counts=TRUE)
    DANB_fit <- NBumiFitModel(count_mat)
    NBDropFS <- NBumiFeatureSelectionCombinedDrop(DANB_fit, method="fdr", qval.thres=0.01, suppress.plot=FALSE)
    
    HVG <- BrenneckeGetVariableGenes(norm)
    
    require(UpSetR)
    input <- fromList(list(M3Drop_genes=M3Drop_genes$Gene, NBDropFS=NBDropFS$Gene,
                           HVG=HVG$Gene ))
    upset(input)
    

    可以看到3种方法的一致性还可以

    肯定是不能选择NBDropFS这个结果啦,就是来源于NBumiFeatureSelectionCombinedDrop 函数,因为基因实在是太多了,而且跟另外两个方法冲突的比较多 。

    分组,找差异,可视化marker基因

    标准的3个衔接起来的函数:M3DropExpressionHeatmap, M3DropGetHeatmapClusters, M3DropGetMarkers

    heat_out <- M3DropExpressionHeatmap(M3Drop_genes$Gene, norm, 
                                        cell_labels = labels) 
    cell_populations <- M3DropGetHeatmapClusters(heat_out, k=4, type="cell")
    library("ROCR") 
    marker_genes <- M3DropGetMarkers(norm, cell_populations)   
    marker_genes$Gene=rownames(marker_genes)
    library(dplyr)
    top20 <- marker_genes %>% group_by(Group) %>% top_n(n = -20, wt = pval) 
    heat_out <- M3DropExpressionHeatmap(M3Drop_genes$Gene, norm, 
                                        cell_labels = cell_populations) 
    

    轻轻松松就把细胞分类了,而且可以可视化那些排名比较靠前的marker基因。

    以前的用法

    是 M3Drop流程,主要是分组及找差异的3个函数:

    • M3DropCleanData,M3DropDropoutModels,M3DropDifferentialExpression

    加上可视化的一些函数,代表是:

    • M3DropExpressionHeatmap,M3DropGetHeatmapCellClusters,M3DropGetMarkers
        library(M3Drop) 
        dim(counts);dim(meta)
        Normalized_data <- M3DropCleanData(counts, 
                                           labels = meta, 
                                           is.counts=TRUE, 
                                           min_detected_genes=2000)
        par(mar=c(1,1,1,1)) 
        dev.new()
        fits <- M3DropDropoutModels(Normalized_data$data)
        DE_genes <- M3DropDifferentialExpression(Normalized_data$data, 
                                                 mt_method="fdr", mt_threshold=0.01)
        par(mar=c(1,1,1,1)) 
        dev.new()
        heat_out <- M3DropExpressionHeatmap(DE_genes$Gene, Normalized_data$data, 
                                            cell_labels = Normalized_data$labels$mouseID)
        par(mar=c(1,1,1,1)) 
        dev.new()
        cell_populations <- M3DropGetHeatmapCellClusters(heat_out, k=i)
        library("ROCR") 
        marker_genes <- M3DropGetMarkers(Normalized_data$data, cell_populations)
        sigM = with(marker_genes,subset(marker_genes,AUC>0.7 & pval<0.05))
        dim(counts)
        dat=log2(edgeR::cpm(counts+1)) 
        
    

    相关文章

      网友评论

          本文标题:M3Drop用法的修改

          本文链接:https://www.haomeiwen.com/subject/bspjzctx.html