- SCMarker:选择表达水平呈双/模态分布,并且与其他一些基因共同表达或相互排斥性表达的基因。
论文链接
library(SCMarker)
scMarker <- function(data){
Res <- ModalFilter(data = data, geneK = 10, cellK = 10)
Res <- GeneFilter(obj = Res)
Res <- getMarker(obj = Res, k = 300, n = 30)
scMarker_genes <- Res$marker
return(scMarker_genes)
}
- Seurat:首先利用局部加权回归(Locally Weighted Linear Regression, loess)[13]对基因表达量的均值和方差的对数拟合一条直线,然后利用观测均值和期望方差对基因表达量进行标准化,最后根据标准化的表达量计算方差,选取最高排名基因,称为高度可变基因。
论文链接
HVG <- function(data){
s=nrow(data)*0.1
s=floor(s)
pbmc_small <- CreateSeuratObject(data)
pbmc_small <- NormalizeData(object = pbmc_small)
pbmc_small <- FindVariableFeatures(object = pbmc_small,nfeatures = s)
pbmc_small <- ScaleData(object = pbmc_small)
Seurat_genes=pbmc_small@assays[["RNA"]]@var.features
return(Seurat_genes)
}
- M3Drop:对所有基因的缺失率和平均表达量拟合一个 Michaelis-Menten(MM)方程,并估计一个全局 MM 常数。然后计算每个基因的 MM 常数,使用 Z 检验将其与全局 MM 常数比较,从而得出每个基因的 p-value 值,随后用 p-value 对基因进行排名。
论文链接
# M3Drop
library(M3Drop)
M3Drop <- function(data){
uso_list <- M3Drop::M3DropCleanData(
data,
labels = colnames(data),
min_detected_genes = 100,
is.counts = FALSE
)
expr_matrix <- uso_list$data
ex=M3Drop::M3DropFeatureSelection(expr_matrix,mt_method = "fdr",mt_threshold = 0.01)
M3Drop_genes=ex[[1]]
return(M3Drop_genes)
}
- Expr:使用基因的平均表达作为基因重要性度量
论文链接
Expr <- function(data){
meanExp = apply(data,1,mean)
meanExp = meanExp[order(meanExp,decreasing = TRUE)]
s=nrow(data)*0.1
s=floor(s)
Expr_genes = names(meanExp)[1:s]
return(Expr_genes)
}
- SC3:过滤掉普遍存在和很少表达的基因,根据平均表达水平和 dropout 比率保留重要基因
论文链接
sce <-
SingleCellExperiment(assays = list(counts = as.matrix(t(embedding_data)),
logcounts = as.matrix(log2(
t(embedding_data) + 1
))))
# define feature names in feature_symbol column
rowData(sce)$feature_symbol <- rownames(sce)
# remove features with duplicated names
sce <- sce[!duplicated(rowData(sce)$feature_symbol), ]
sce <- runPCA(sce)
#estimate optimal k for clustering
k <- sc3_estimate_k(sce)@metadata$sc3$k_estimation
res <- sc3(sce, ks = k)
adjustedRandIndex(res$sc3_xxx_clusters, meta$label)
- FEAST:计算基因的 F-statistics 得分,选择前 n 个基因作为特征集合,使用 MSE 估计最佳特征集合。
原文链接
test <- load("filepath")
K <- length(unique(meta$label))
Y <- process_Y(data)
#FEAST+SC3
con_res <- Consensus(Y, k = K)
F_res = cal_F2(Y, con_res$cluster)
ixs = order(F_res$F_scores, decreasing = T) # order the features
top = 2000 # try the top 2000 features
markers = rownames(Y)[ixs][1:top]
sc3_res = SC3_Clust(Y, k = K, input_markers = markers)
eval_Cluster(sc3_res$cluster, meta$label)
-
Laplacian Scores:基于拉普拉斯特征映射(Laplacian Eigenmaps)和局部保留投影(Locality Preserving Projection),通过构造一个局部加权图来评估特征的重要性。
论文链接 -
SCMER:通过优化原始数据和低维空间的相似度矩阵的 KL 散度,选择非零权重对应的基因,从而识别非冗余特征,用于描绘常见的细胞类型和罕见的细胞状态。
论文链接
代码链接 -
EDGE:结合集成学习和 sketching 技术[21],使用大量的弱学习器学习细胞间相似性概率,通过最小化交叉熵函数学习并优化数据的低维表示,同时选择在这一过程中做出重要贡献的基因作为标记基因。
论文链接
代码链接
-
scCCESS:从原始数据中提取随机投影子空间,使用自编码器将每一个随机投影压缩到低维空间进行聚类,应用集成学习思想生成最终的细胞簇划分。
论文链接
-
DUBStepR:基于基因间相关性的特征选择方法 DUBStepR[23],使用逐步回归的方法识别数据集中最能代表生物变异的基因集合,随后定义了一种基于图的细胞聚类度量方法密度指数(density index,DI)用来优化特征的数量。
论文链接
源码链接
from NSForest_v3 import *
import itertools
adata_markers = NS_Forest(adata) #Runs NS_Forest on scanpy object
#gets list of minimal markers from dataframe for display in scanpy plotting functions
Markers = list(itertools.chain.from_iterable(adata_markers['NSForest_Markers']))
# gets list of binary markers from dataframe for display in scanpy plotting functions
Binary_Markers = list(itertools.chain.from_iterable(adata_markers['Binary_Genes']))