内容

本文介绍和概述的功能cellity包中。

cellity包包含函数来帮助识别低质量细胞scRNA-seq数据。它从基因表达数据中提取生物和技术特点,帮助检测细胞低质量。

输入要求:cellity需要1 xgene表达矩阵(x基因细胞)和1 x读数据矩阵(细胞x指标),可以先处理你的数据与玻璃纸]。这将地图数据,生成一个counts-table +统计信息读取。为进一步细节(玻璃纸请检查(https://github.com/ti243/celloline)。

包的特点:

将来的版本cellity也可能包括:

尽快启动并运行,参见下面不同的用例。

0.1你需要的东西

假设你有一个矩阵包含表达式计数数据总结在基因水平+一个矩阵包含读指标(如映射读取次数)产生的玻璃纸你是好去识别细胞低质量数据。

在这里我们使用提供的示例数据方案,给我们:

  1. 样本训练数据:数量、读取数据标签
  2. 培训功能:所有、共同
  3. 测试功能:所有、共同

这些数据集将帮助您了解如何提取自己的特性,训练你自己的模型或简单地使用现有的模型。

首先,允许加载包和所有数据集

图书馆(cellity)数据(sample_counts)数据(sample_stats)

0.2提取生物和技术特点

现在加载数据,我们需要正常化基因表达。目前支持生成数量只有HTSeq和袖扣。前计数(HTSeq)将正常的数量总读/库大小(见下文),后者(袖扣)需要从FPKM变成TPM。

让我们正常化HTSeq产生的测试样本数据在这种情况下。

sample_counts_nm < - normalise_by_factor (sample_counts colSums (sample_counts))

一旦数据已经正常化(库大小或TPM)下一步是提取特征。这个函数将提取生物意义和技术特性,将帮助区分低与高质量的细胞。

因为它不仅提取生物,而且技术特点,我们需要提供读指标。现在让我们从样本数据中提取特征使用.counts和.stats文件通常会产生的玻璃纸

sample_features < - extract_features (sample_counts_nm sample_stats)

这将生成一个与两个元素列表。列表中的每个条目是一个矩阵(细胞x功能)。第一个将包含所有功能,第二我们所说的“共同”特性。所有的功能都可以用来预测低质量相同的细胞类型的细胞,而共同的特征是细胞类型无关,应该适用于大多数的细胞类型。然而,“共同”功能较少力量检测细胞低质量。

这个函数extract_features目前只支持人类和小鼠数据与预定义的功能。然而,如果你想使用自己的或额外的,或定义哪些特性是常见的,可以通过提供的数据在我们的格式(检查下面的数据结构)。目前我们只支持人类和老鼠的细胞和相关数据库已经安装。然而,如果你指定extra_genes动手动脑(他们有适当的基因ID(例如ENSMUSG老鼠)和安装了特定基因数据库(例如org.Mm.eg。db的老鼠基因biomart R)),它可能会奏效。见下面的一个例子来提取特征假装样本案例是人类:

如果(requireNamespace (“org.Hs.eg。db”,悄悄地= TRUE)){#确保您已经安装了相应的生物#你将instsall下面的图书馆:如果(# !requireNamespace (“BiocManager”,悄悄地= TRUE)) # install.packages (BiocManager) # BiocManager::安装(“org.Hs.eg.db”)库(org.Hs.eg.db)数据(“extra_human_genes”)的数据(“feature_info”) GO_terms < - feature_info [[1]] common_features < - feature_info [[2]] features_human < - extract_features (sample_counts_nm、sample_stats common_features = common_features GO_terms = GO_terms extra_genes = extra_human_genes有机体=“人”)}
# #[1]“[信息]:提取功能”# #[1][信息]:特征提取。

如果不出现在一些特性矩阵,这意味着他们都有相同的值(例如ERCC都是0如果没有ERCC出现在数据)。

一旦我们提取的所有功能,我们现在可以做的有趣的和分析数据的质量。为此,我们有这些可能性:* PCA-based特性可视化* *混合支持向量机分类方法

0.3基于PCA-feature可视化

让我们首先测试基于PCA-feature版本,通过使用所有功能:

sample_features_all < - sample_features [[1]] sample_qual_pca < - assess_cell_quality_PCA (sample_features_all)

这个函数assess_cell_quality_PCA对特性和检测异常值执行PCA应用uni.plotmvoutlier包在第一两个维度(PC1和PC2)。它返回一个二维矩阵与每个样本的名称和指示细胞是否低(0)或高质量(1)。

确保注释是有道理的,你可以指定输出文件的PCA情节将写入,着色低(红色)和高质量(绿色)细胞。此外,情节将展示最丰富的特性PC1和PC2显示低之间的分布(红色)和高质量(绿色)细胞。

然而,由于样本数据很小,很难确定从高质量的低细胞充满信心,因为他们都将分散在情节。因此数据越多,你可以更有信心使用PCA-based方法。

见下面的一个例子显示PCA-feature基于最初的训练数据(所有960 mES细胞)和最丰富的特性通过使用我们已经提取的培训功能。

数据(training_mES_features) training_mES_features_all < - training_mES_features [[1]] training_quality_PCA_allF < - assess_cell_quality_PCA (training_mES_features_all、文件=“。/ training_quality_PCA_allF.pdf”)

如您所见,大多数细胞绿色和分散在一起,而红细胞是离群值。侧面和底部的信息特征告诉我们,基因间的比例读更高的红细胞和关联的意思表达较低,相比,绿色(高质量)细胞。这表明,这些红色细胞确实是低质量。注意:倍数通常会表现出更强的相关性的意思是,如果人口是同质的大小。因此,如果红细胞显示可能表明他们是倍数较高的相关性。

你可以使用脱字符号包比较预测与原标签标签(如果你有)协议。请注意,这个分类器预测低质量的亚型细胞在显微镜下是不可见的(欺骗性细胞,有关更多信息,请参见文章)。因此它可能识别比最初由显微镜注释更低质量的细胞。

如果(requireNamespace(“插入符号”,悄悄地= TRUE)){图书馆(脱字符号)数据(training_mES_labels) lv < - c(“0”、“1”)真理< -因子(training_mES_labels[2],水平= (lv)牧师)pred < -因子(training_quality_PCA_allF[2],水平= (lv)牧师)confusionMatrix (pred真理)}
# #混淆矩阵和统计预测参考# # # # # # 723 42 0 # # 1 # # 0 62 133 # # # #准确性:# # 95%置信区间:0.8917(0.8703,0.9106)# #没有信息率:0.8177 # #假定值(Acc > NIR): 1.851平台以及# # # # Kappa: 0.6521 # # # # Mcnemar检验法测试假定值:0.06245 # # # #灵敏度:0.9210 # #特异性:0.7600 # # Pos Pred值:0.9451 # # Neg Pred值:0.6821 # #患病率:0.8177 # #检出率:0.7531 # #检测患病率:0.7969 # #平衡精度:0.8405 # # # # "正面"类:1 # #

总体上我们可以达到90%的准确率,检测细胞低质量的76%。这很好,考虑到我们不训练分类器。调用相同的函数仅使用共同的特征会导致下面的情节(充分利用原始数据集):

training_mES_features_common < - training_mES_features [[2]] training_quality_PCA_commonF < - assess_cell_quality_PCA (training_mES_features_common、文件=“。/ training_quality_PCA_commonF.pdf”)

因为我们不使用所有功能,我们的高级特性相关的主要是线粒体和细胞质(请参阅本文为什么)。让我们再次检查的准确性通过比较原始的标签:

如果(requireNamespace(“插入符号”,悄悄地= TRUE)) {pred < -因子(training_quality_PCA_commonF[2],水平= (lv)牧师)confusionMatrix (pred真理)}
# #混淆矩阵和统计预测参考# # # # # # 1 0 # # 1 0 9 132 776 43 # # # # # #准确性:# # 95%置信区间:0.9458(0.9296,0.9593)# #没有信息率:0.8177 # #假定值(Acc > NIR): < 2.2 e-16 # # # # Kappa: 0.8035 # # # # Mcnemar检验法测试假定值:4.733灵敏度e-06 # # # #: 0.9885 # #特异性:0.7543 # # Pos Pred值:0.9475 # # Neg Pred值:0.9362 # #患病率:0.8177 # #检出率:0.8083 # #检测患病率:0.8531 # #平衡精度:0.8714 # # # # "正面"类:1 # #

现在实际上是更高的准确性,我们发现更多的高质量的细胞,然而,我们检测细胞数量略低的低质量。检测精度经常来这里将取决于类型的低质量的数据和细胞合作。在倍数的情况下,基于PCA-feature版本将不会非常成功。因此,让我们尝试另一种方法。

0.4支持向量机分类

PCA-based的替代方法是使用支持向量机对细胞进行分类。有几种方法可以这样做,它将取决于如果(A)你想使用我们的数据来预测mES细胞(B)使用我们的数据预测任何细胞类型(C)使用自己的数据进行训练和预测

# # #场景一:预测低质量细胞使用原始数据集mES数据让我们首先考虑这样一个场景:您想要使用原来的960 mES细胞质量预测另一个数据集。首先,负载特性,计算从原始训练数据和标签(960 mES细胞)和我们的测试集(mES1纸)。

数据(mES1_features)数据(mES1_labels)

这为我们提供了完整的培训mES和测试集。现在让我们使用支持向量机来预测细胞低质量我们先前的例子。要做到这一点,我们需要加载hyperparameters湿草地将优化支持向量机分类。因此,电话:

数据(param_mES_all) mES1_features_all < - mES1_features [[1]] mES1_quality_SVM < - assess_cell_quality_SVM (training_mES_features_all, training_mES_labels [2], param_mES_all, mES1_features_all)

这个函数assess_cell_quality_SVM将执行支持向量机使用一个模型(预测的质量通过使用不同的组合参数,然后投票)来提高精度。它返回,类似于PCA-feature基础版本,一个矩阵与细胞名称及其标签指示低(0)和高质量(1)细胞。

让我们再次检查的准确性通过比较原始的标签:

如果(requireNamespace(“插入符号”,悄悄地= TRUE)){真理< -因子(mES1_labels[2],水平= (lv)牧师)pred < -因子(mES1_quality_SVM[2],水平= (lv)牧师)confusionMatrix (pred真理)}
# #混淆矩阵和统计预测参考# # # # # # 439 45 0 # # 1 # # 0 89 99 # # # #准确性:# # 95%置信区间:0.8006(0.7683,0.8302)# #没有信息率:0.7857 # #假定值(Acc > NIR): 0.1863703 # # # # Kappa: 0.467 # # # # Mcnemar检验法测试假定值:0.0002035 # # # #灵敏度:0.8314 # #特异性:0.6875 # # Pos Pred值:0.9070 # # Neg Pred值:0.5266 # #患病率:0.7857 # #检出率:0.6533 # #检测患病率:0.7202 # #平衡精度:0.7595 # # # # "正面"类:1 # #

它执行很好通过捕获大部分的低质量的细胞(70%)同时也确保识别大多数正确的高质量的细胞(80%)。

# # #情形B:预测低质量细胞使用原始数据集,如果你有任何数据细胞不是老鼠的胚胎干细胞,使用可以使用功能的一个子集(共同)预测细胞质量。这将降低精度,但仍给一个合理的估计低和高质量的细胞。在遥远的细胞类型(其他生物体,或肿瘤细胞)可能是共同的特点并不适用。在这种情况下你需要做去情形C。

请注意,您需要使用两个共同特征,训练和测试集,也为共同特征参数优化。让我们考虑前面的示例只使用共同的特征。

数据(param_mES_common) training_mES_features_common < - training_mES_features [[2]] mES1_features_common < - mES1_features [[2]] mES1_quality_SVM_common < - assess_cell_quality_SVM (training_mES_features_common, training_mES_labels [2], param_mES_common, mES1_features_common)

当我们现在比较准确的原始标签我们可以看到,它执行比之前更糟糕。

如果(requireNamespace(“插入符号”,悄悄地= TRUE)){真理< -因子(mES1_labels[2],水平= (lv)牧师)pred < -因子(mES1_quality_SVM_common[2],水平= (lv)牧师)confusionMatrix (pred真理)}
# #混淆矩阵和统计预测参考# # # # # # 1 0 # # 1 471 75 0 57 69 # # # # # #准确性:# # 95%置信区间:0.8036(0.7715,0.833)# #没有信息率:0.7857 # #假定值(Acc > NIR): 0.1394 # # # # Kappa: 0.3889 # # # # Mcnemar检验法测试假定值:0.1390 # # # #灵敏度:0.8920 # #特异性:0.4792 # # Pos Pred值:0.8626 # # Neg Pred值:0.5476 # #患病率:0.7857 # #检出率:0.7009 # #检测患病率:0.8125 # #平衡精度:0.6856 # # # # "正面"类:1 # #

# # #场景C:预测低质量细胞在任何数据使用自己的训练集最后一个场景是最复杂和费时。这里假设t细胞和想要确保你删除你的低质量的细胞。使用所有功能的mES trainign数据不会工作和共同的特征也可能不准确。替代现在将进入实验室,annote每个单元手动通过显微镜。作为微观注释可能非常耗时的你不想花天检查每一个单个细胞和最有可能犯很多错误(例如倍数难以识别如果你不投入足够的时间)。

最好的方法,这会节省你的时间,仍然给良好的预测精度,是用显微镜注释您的数据的一个子集。你使用这个子集提取所有特性和训练自己的SVM分类器预测剩余的不带注释的细胞。然而,您可能必须估计hyperparameters(我不会在这里讨论,因为它将范围)但它可能与优化hyperparameters我们使用上面的原始训练集。

0.5基于混合方法:PCA-feature + SVM

我推荐的是混合的方式,你(1)执行PCA-feature方法基于您的数据,(2)检查它是否合理和随后的训练(3)使用我们的数据(或理想自己的带注释的训练数据)来预测你的细胞细胞的质量。你可以检查他们同意和决定你会去哪个版本。

让我们比较PCA-feature之间的精度和SVM版本使用所有功能基于mES1测试的例子:

# PCA质量mES1_quality_PCA < -assess_cell_quality_PCA (mES1_features_all) mES1_quality_SVM < - assess_cell_quality_SVM (training_mES_features_all, training_mES_labels [2], param_mES_all, mES1_features_all)如果(requireNamespace(“插入符号”,悄悄地= TRUE)){真理< -因子(mES1_labels[2],水平= (lv))牧师pred_PCA < -因子(mES1_quality_PCA[2],水平= (lv))牧师pred_SVM < -因子(mES1_quality_SVM[2],水平= (lv))牧师c_PCA < -confusionMatrix (pred_PCA,真理)打印(PCA准确性)打印(c_PCA byClass美元[1:2])c_SVM < -confusionMatrix (pred_SVM,真理)打印(“支持向量机精度”)打印(c_SVM byClass美元[1:2])}
# #[1]“主成分分析的准确性”0.9772727 - 0.6180556 # # # # # #灵敏度特异性[1]“支持向量机精度”# #灵敏度特异性# # 0.8314394 - 0.6875000

我们可以看到,现在PCA-feature基础版本执行不如SVM使用所有功能检测低质量细胞(特异性),但保留了更多的高质量的细胞(灵敏度)。根据实验设置和问题更重要的是importat:保持高或删除更多低质量的电池,我们会选择这两种方法之一。

通常两个版本应该是在良好的协议。如果你预测的数据是相同的细胞类型的训练数据(在本例中mES)你可能更多地依赖于支持向量机版本更多,PCA作为控制,看看整体是有道理的。

在这种情况下,这两种方法之间的agreemeent ~ 86%。

print(长度(((mES1_quality_PCA [2] = = mES1_quality_SVM [2]) = = TRUE)) / nrow (mES1_labels))
# # 0.858631 [1]