草庐IT

一文带你了解所有单细胞注释软件

生信宝库 2023-04-14 原文

说在前面

生信宝库对单细胞亚群注释这个问题已经写了很多推文了,如:一文解决单细胞亚群注释的所有问题; SciBet:一个软件解决单细胞注释所有烦恼;mtSC:整合多参考数据集进行单细胞亚群注释等,分别从各个角度来揭示单细胞亚群注释中要注意的问题和技巧。作为单细胞数据分析最核心的步骤之一,细胞亚群注释的准确性直接关系到后续的所有分析,因此对这个问题怎么强调都不为过。

Immugent在之前的推文:生信综述?带你解锁高分单细胞发文骚操作!中介绍了如何通过汇总或者对比具有特定功能的软件,从而发表高分纯生信文章。本期推文Immugent就来介绍一篇总结了截止到2021年所有的单细胞注释软件,相关文章以题为:Automatic cell type identification methods for single-cell RNA sequencing的形式发表在Computational and Structural Biotechnology杂志上。

废话不多说,我们来一起学习一下这篇文章。


主要内容

文章的第一幅图就是对所有单细胞亚群自动注释软件的底层工作框架进行了汇总,可以看出此类大多数软件主要都是基于相似性、随机森林和神经网络等,再进一步组合优化而来。

image.png

然后作者就是列出了目前所有单细胞亚群自动注释软件的信息,不用说了,这是小编见过总结的最全的了。

image.png

image.png

然后作者通过已经发表的小鼠图谱数据集(Tabula Muris)对这几十种算法进行了功能评估,Immugent觉得这个工作量其实还是蛮大的。

image.png

对于单细胞自动注释软件来说,除了准确性,注释的速率也是很重要的因素之一,因为在实际使用自动注释软件都是比较庞大的数据集。

image.png

通过从准确性,速率和新细胞亚群的预测能力等多方面综合评估后发现这些算法并没有绝对的好和坏,都有各自的优点,这也给我们提示在实际应用中要根据需要来个性化选择合适的单细胞注释软件。

image.png

最后,大家可以通过作者这张汇总图来个性化选择适合自己数据分析的软件。此外,值得一提的是之前一直被鼓吹的神器--scVI,它的综合表现并不是很好,而小众软件-clustifyr却表现亮眼。


小结

从第一款单细胞自动注释软件在2018年被开发以来,短短的3年时间里已经有几十款同类软件了。在这篇文章中,作者系统地比较了现有的几十种单细胞自动注释方法的特征、分类器、模型、预测性能、速度和新细胞亚群的预测能力。在准确率、F1-score、非标记率、肿瘤细胞特异性和敏感性、速度方面,最好的是基于三种自动学习方法(eager learning, lazy learning and marker learning),它们的结果总体上表现相似。

在eager learning方法中,clusteryr、scHPL和scPred在所有指标上都表现良好。SingleCellNet、SciBet和Seurat在准确性、f1得分和速度方面表现良好。在lazy learning methods中,cellfishing.Jl似乎是最好的方法。而在marker learning methods中,SCSA、SCINA、scTyper和CellAssign的表现较好。

好啦,本期推文到这就结束了,希望这次分享所提供的信息能对大家今后在选择单细胞自动注释算法上提供帮助。

有关一文带你了解所有单细胞注释软件的更多相关文章

  1. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  2. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  3. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

  4. ruby - 获取模块中定义的所有常量的值 - 2

    我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c

  5. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  6. ruby - 在好的 Ruby 代码中没有注释是否被认为是可以接受的? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭5年前。Improvethisquestion我审查了一些用Ruby编写的专业代码,没有发现任何评论。代码读起来相当清晰,但没有self记录。我应该期望专业编写的Ruby代码有注释吗?或者,是否有一些Ruby原则认为注释不是必需的?

  7. ruby - 如何遍历 Ruby 中所有正则表达式匹配的字符串? - 2

    我们有一个字符串:“”这个正则表达式://i如何从当前字符串中获取所有匹配项? 最佳答案 "".scan(//)参见scan在ruby​​-docs上 关于ruby-如何遍历Ruby中所有正则表达式匹配的字符串?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6857852/

  8. ruby-on-rails - 在所有延迟的作业之前 Hook - 2

    是否可以在所有delayed_job任务之前运行一个方法?基本上,我们试图确保每个运行delayed_job的服务器都有我们代码的最新实例,所以我们想运行一个方法来在每个作业运行之前检查它。(我们已经有了“check”方法并在别处使用它。问题只是关于如何从delayed_job中调用它。) 最佳答案 现在有一种官方方法可以通过插件来做到这一点。这篇博文通过示例清楚地描述了如何执行此操作http://www.salsify.com/blog/delayed-jobs-callbacks-and-hooks-in-rails(本文中描述

  9. ruby - 如何捕获 ruby​​ 中的所有异常? - 2

    我们如何捕获或/和处理ruby​​中所有未处理的异常?例如,这样做的动机可能是将某种异常记录到不同的文件或发送电子邮件给系统管理。在Java中我们会做Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandlerex);在Node.js中process.on('uncaughtException',function(error){/*code*/});在PHP中register_shutdown_function('errorHandler');functionerrorHandler(){$error=error_

  10. ruby - 了解在 Ruby 中与 lambda 一起使用的 inject 行为 - 2

    我经常将预配置的lambda插入可枚举的方法中,例如“map”、“select”等。但是“注入(inject)”的行为似乎有所不同。例如与mult4=lambda{|item|item*4}然后(5..10).map&mult4给我[20,24,28,32,36,40]但是,如果我制作一个2参数lambda用于像这样的注入(inject),multL=lambda{|product,n|product*n}我想说(5..10).inject(2)&multL因为“inject”有一个可选的单个初始值参数,但这给了我......irb(main):027:0>(5..10).inject

随机推荐