All Projects → bm2-lab → scLearn

bm2-lab / scLearn

Licence: other
scLearn:Learning for single cell assignment

Programming Languages

r
7636 projects

Projects that are alternatives of or similar to scLearn

dynmethods
A collection of 50+ trajectory inference methods within a common interface 📥📤
Stars: ✭ 94 (+261.54%)
Mutual labels:  single-cell-rna-seq
Coursera-Machine-Learning-Andrew-NG
This is a repository of my coursera Machine Learning by Standford, Andrew NG course's assignments
Stars: ✭ 34 (+30.77%)
Mutual labels:  assignment
lfda
Local Fisher Discriminant Analysis in R
Stars: ✭ 74 (+184.62%)
Mutual labels:  metric-learning
FastAP-metric-learning
Code for CVPR 2019 paper "Deep Metric Learning to Rank"
Stars: ✭ 93 (+257.69%)
Mutual labels:  metric-learning
TCE
This repository contains the code implementation used in the paper Temporally Coherent Embeddings for Self-Supervised Video Representation Learning (TCE).
Stars: ✭ 51 (+96.15%)
Mutual labels:  metric-learning
diffxpy
Differential expression analysis for single-cell RNA-seq data.
Stars: ✭ 137 (+426.92%)
Mutual labels:  single-cell-rna-seq
tf retrieval baseline
A Tensorflow retrieval (space embedding) baseline. Metric learning baseline on CUB and Stanford Online Products.
Stars: ✭ 39 (+50%)
Mutual labels:  metric-learning
scedar
Single-cell exploratory data analysis for RNA-Seq
Stars: ✭ 33 (+26.92%)
Mutual labels:  single-cell-rna-seq
EmptyDrops2017
Code for the empty droplet and cell detection project from the HCA Hackathon.
Stars: ✭ 16 (-38.46%)
Mutual labels:  single-cell-rna-seq
MHCLN
Deep Metric and Hash Code Learning Network for Content Based Retrieval of Remote Sensing Images
Stars: ✭ 30 (+15.38%)
Mutual labels:  metric-learning
scarf
Toolkit for highly memory efficient analysis of single-cell RNA-Seq, scATAC-Seq and CITE-Seq data. Analyze atlas scale datasets with millions of cells on laptop.
Stars: ✭ 54 (+107.69%)
Mutual labels:  single-cell-rna-seq
scTCRseq
Processing of single cell RNAseq data for the recovery of TCRs in python
Stars: ✭ 22 (-15.38%)
Mutual labels:  single-cell-rna-seq
SOT
Single-cell Orientation Tracing
Stars: ✭ 20 (-23.08%)
Mutual labels:  single-cell-rna-seq
TreeRep
Learning Tree structures and Tree metrics
Stars: ✭ 18 (-30.77%)
Mutual labels:  metric-learning
scisorseqr
scisorseqr is an R-package for processing of single-cell long read data and analyzing differential isoform expression across any two conditions
Stars: ✭ 21 (-19.23%)
Mutual labels:  single-cell-rna-seq
S-WMD
Code for Supervised Word Mover's Distance (SWMD)
Stars: ✭ 90 (+246.15%)
Mutual labels:  metric-learning
GeDML
Generalized Deep Metric Learning.
Stars: ✭ 30 (+15.38%)
Mutual labels:  metric-learning
LearningToCompare-Tensorflow
Tensorflow implementation for paper: Learning to Compare: Relation Network for Few-Shot Learning.
Stars: ✭ 17 (-34.62%)
Mutual labels:  metric-learning
Metric Learning Adversarial Robustness
Code for NeurIPS 2019 Paper
Stars: ✭ 44 (+69.23%)
Mutual labels:  metric-learning
Deep-Metric-Embedding
Papers and Codes about Deep Metric Learning/Deep Embedding
Stars: ✭ 37 (+42.31%)
Mutual labels:  metric-learning

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 must support the rejection task, 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

[email protected] or [email protected]

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].