/scLearn

scLearn:Learning for single cell assignment

Primary LanguageR

scLearn: Learning for single cell assignment

Introduction of scLearn

  • scLearn is a learning-based framework that automatically infers quantitative measurement/similarity and threshold that can be used for different single cell assignment tasks, achieving a well-generalized assignment performance on different single cell types. The main contributions of scLearn are (1) scLearn is robust to different assignment tasks with a well-generalized assignment performance, (2) scLearn is efficient in the identification of novel cell types that are absent in the reference datasets and (3) For the first time, a multi-label single cell assignment strategy is proposed in scLearn to assign single cell to proper time status as well as cell type simultaneously, proven to be effective for cell development and lineage analysis with additional temporal information. scLearn is developed as a R package, built in with comprehensive human and mammalian single cell reference datasets and pre-trained models, which can be utilized directly to facilitate broad applications of single cell assignment.
  • scLearn a learning-based framework designed to intuitively carry out a cell search by measuring the similarity between query cells and each reference cell cluster centroid utilizing measurement and similarity thresholds learned from reference datasets, rather than manually designing the measurement/similarity or empirically selecting the threshold. Basically, scLearn comprises three main steps: data preprocessing, model learning, and cell assignment:
    • Data preprocessing: First, a routine normalization and quality control for single cell RNA-sequencing data is performed. scLearn removes the rare cell types whose cell numbers are less than 10 from the reference datasets. Then, scLearn performs feature selection utilizing M3Drop, which is based on a specific dropout rate that has proven suitable for single cell assignment.
    • Model learning: scLearn establishes a learning-based model to automatically learn the measurement used for cell assignment based on reference cells. In this model, the identification of query cell type is formulated as a single-label single cell assignment. The model learning comprise the following parts:
      • Discriminative component analysis (DCA) is applied and a transformation matrix that can be applied to formulate an optimal measurement that naturally fits the relationship between these samples is learned on the basis of the prior sample similarity or dissimilarity.
      • In addition, the assignment of query cell into proper time point and cell type simultaneously is formulated as a multi-label single cell assignment. In this case, scLearn extended the DCA-based matrix transformation to a multi-label dimension reduction by maximizing the dependence between the original feature space and the associated labels (multi-label dimension reduction via dependence maximization, MDDM).
      • For either case, the derived transformation matrix can be multiplied by the original reference data matrix and the query data matrix, respectively, and the learned measurement can be obtained on the basis of the distance/similarity between the transformed data samples. For single-label single cell assignment, bootstrapping sampling technology is also utilized in this step to reduce sampling imbalances and to obtain a stable learning-based model.
      • It should be noted that single cell assignment methods should support the detection of novel cell types, while all existing single cell assignment strategies have adopted an empirical similarity threshold, such as a Pearson correlation coefficient of 0.7 or Cosine similarity of 0.5, which should differ among distinct datasets with different cell types and annotations. In general, the similarity thresholds of datasets with fine-grained annotation (deep annotation, i.e., cells are categorized in a fine-grained manner), should be larger than those of datasets with coarse-grained annotation (shallow annotation, i.e., cells are categorized in a coarse-grained manner), because the cells in the former datasets are more similar than the cells in the latter datasets. Therefore, one threshold for all datasets and all cell types is not suitable. To this end, in this step, scLearn learns the similarity thresholds for each cell type in each dataset instead of specifying a priori thresholds.
    • Cell assignment: Finally, according to the learned measurement and the learned threshold obtained with the learning-based model, scLearn assigns the cell type of the query cells by comparison with the reference datasets.

The scLearn workflow

scLearn comprises three steps: data preprocessing, model learning, and cell assignment.

  • (1) In the first step, the main processes comprise routine normalization, cell quality control, rare cell-type filtering, and feature selection; nGene, number of genes; nUMI, number of unique molecular identifiers; P-mitGene, percentage of mitochondrial genes; and G, cell group.
  • (2) In the second step, for single-label single cell assignment, DCA is applied to learn the transformation matrix; For multi-label single cell assignment, MDDM is applied to learn the transformation matrix. Then, with the learned transformation matrix, the transformed reference cell samples are obtained for the following assignment. The thresholds for labeling a cell as “unassigned” for each cell type are also automatically learned. G, cell group; DCA, discriminative component analysis. LTM, Learned Transformation Matrix, which can be calculated as the optimal transformation matrix for single-label single cell assignment or by equation 6 for multi-label single cell assignment, respectively (see Materials and Methods); and TRCM, Transformed Reference Cell Matrix, which can be calculated by equation 1 (see Materials and Methods).
  • (3) In the third step, the transformed query cell samples are obtained based on LTM with an available optional cell quality control procedure. The transformed query samples are compared against the transformed reference cell matrix to derive the measurement fulfilling the cell-type assignment with the rejection task. TQCM, Transformed Query Cell Matrix, which can be calculated by equation 2 (see Materials and Methods).

Install

  • Install: You can install the scLearn package from Github using devtools packages with R>=3.6.1.

    library(devtools)
    library(SingleCellExperiment)
    library(M3Drop)
    install_github("bm2-lab/scLearn")

Tutorial

Single-label single cell assignment

  • For illustration purpose, we took the dataset baron-human.rds and xin-human.rds as examples.

    • Data preprocessing:
    # loading the reference dataset
    data<-readRDS('baron-human.rds')
    rawcounts<-assays(data)[[1]]
    refe_ann<-as.character(data$cell_type1)
    names(refe_ann)<-colnames(data)
    # cell quality control and rare cell type filtered and feature selection
    data_qc<-Cell_qc(rawcounts,refe_ann,species="Hs")
    data_type_filtered<-Cell_type_filter(data_qc$expression_profile,data_qc$sample_information_cellType,min_cell_number = 10)
    high_varGene_names <- Feature_selection_M3Drop(data_type_filtered$expression_profile)
    • Model learning:
    # training the model. To improve the accuracy for "unassigned" cell, you can increase "bootstrap_times", but it will takes longer time. The default value of "bootstrap_times" is 10.
    scLearn_model_learning_result<-scLearn_model_learning(high_varGene_names,data_type_filtered$expression_profile,data_type_filtered$sample_information_cellType,bootstrap_times=1)
    • Cell assignment:
    # loading the quary cell and performing cell quality control.
    data2<-readRDS('xin-human.rds')
    rawcounts2<-assays(data2)[[1]]
    ### the true labels of this test datasets 
    #query_ann<-as.character(data2$cell_type1)
    #names(query_ann)<-colnames(data2)
    #query_ann<-query_ann[query_ann %in% c("alpha","beta","delta","gamma")]
    #rawcounts2<-rawcounts2[,names(query_ann)]
    #data_qc_query<-Cell_qc(rawcounts2,query_ann,species="Hs")
    ### 
    data_qc_query<-Cell_qc(rawcounts2,species="Hs",gene_low=50,umi_low=50)
    # Assignment with trained model above. To get a less strict result for "unassigned" cells, you can decrease "diff" and "vote_rate". If you are sure that the cell type of query cells must be in the reference dataset, you can set "threshold_use" as FALSE. It means you don't want to use the thresholds learned by scLearn.
    scLearn_predict_result<-scLearn_cell_assignment(scLearn_model_learning_result,data_qc_query$expression_profile,diff=0.05,threshold_use=TRUE,vote_rate=0.6)
    

Multi-label single cell assignment

  • For illustration purpose, we took the dataset ESC.rds as an example.

    • Data preprocessing:
    # loading the reference dataset
    data<-readRDS('ESC.rds')
    rawcounts<-assays(data)[[1]]
    refe_ann1<-as.character(data$cell_type1)
    names(refe_ann1)<-colnames(data)
    refe_ann2<-as.character(data$cell_type2)
    names(refe_ann2)<-colnames(data)
    # cell quality control and rare cell type filtered and feature selection
    data_qc<-Cell_qc(rawcounts,refe_ann1,refe_ann2,species="Hs")
    data_type_filtered<-Cell_type_filter(data_qc$expression_profile,data_qc$sample_information_cellType,data_qc$sample_information_timePoint,min_cell_number = 10)
    high_varGene_names <- Feature_selection_M3Drop(data_type_filtered$expression_profile)
    • Model learning:
    # training the model
    scLearn_model_learning_result<-scLearn_model_learning(high_varGene_names,data_type_filtered$expression_profile,data_type_filtered$sample_information_cellType,data_type_filtered$sample_information_timePoint,dim_para=0.999)
    • Cell assignment: We just use 'ESC.rds' itself to test the multi-label single cell assignment here.
    # loading the quary cell and performing cell quality control
    data2<-readRDS('ESC.rds')
    rawcounts2<-assays(data2)[[1]]
    ### the true labels of this test dataset
    #query_ann1<-as.character(data2$cell_type1)
    #names(query_ann1)<-colnames(data2)
    #query_ann2<-as.character(data2$cell_type2)
    #names(query_ann2)<-colnames(data2)
    #rawcounts2<-rawcounts2[,names(query_ann1)]
    #data_qc_query<-Cell_qc(rawcounts2,query_ann1,query_ann2,species="Hs")
    data_qc_query<-Cell_qc(rawcounts2,species="Hs",gene_low=50,umi_low=50)
    # Assignment with trained model above
    scLearn_predict_result<-scLearn_cell_assignment(scLearn_model_learning_result,data_qc_query$expression_profile)

Pre-trained scLearn models

Citation

B. Duan, C. Zhu, G. Chuai, C. Tang, X. Chen, S. Chen, S. Fu, G. Li, Q. Liu, Learning for single-cell assignment. Sci. Adv. 6, eabd0855 (2020)

Contact

bioinfo_db@163.com or qiliu@tongji.edu.cn