InstaPrism能否平替BayesPrism(贝叶斯棱镜)?

上一期内容提到了BayesPrism算法用于单细胞数据的反卷积,BayesPrism算法在实际应用中非常占用计算资源以及消耗使用者的时间。那么是否有较好的替代包呢?

曾老师告诉了我一个R包—InstaPrism,他希望我将其和BayesPrism算法做个对比。

开发者给InstaPrism的直接定义就是“用于快速实现BayesPrism”。

简单来说这个包是基于BayesPrism分析框架分析并把里边非常耗时的Gibbs采样步骤替换成了fixed-point algorithm,从而减少了运行时间。

接下来分别运行这两种算法并对结果做一个粗糙的对比。

BayesPrism分析步骤详见推文:https://mp.weixin.qq.com/s/Rj8PL6wJqwWhsmLG8tx89w。

BayesPrism

1、输入数据情况
dim(sc.dat)
#[1]  5042 20124dim(bk.dat)
#[1]   424 60533

sc.dat: 5042个细胞和20124个基因的单细胞数据

bk.dat:424个样本和60533个基因的bulkRNA数据(TCGA-LIHC的count数据)

2、运行BayesPrism

关键步骤 bp.res <- run.prism(prism = myPrism, n.cores=20),设置了20线程

#核心代码
start_time <- Sys.time() # 记录初始时间
bp.res <- run.prism(prism = myPrism, n.cores=20)
end_time <- Sys.time() # 记录终止时间
end_time - start_time # 计算时间差# Time difference of 2.865344 hours

需要将近3个小时,如果能设置50线程的话时间可以进一步缩短。建议采用较高配置的电脑或者服务器运行。

InstaPrism-code from github

1、安装及加载R包
if (!require("BiocManager", quietly = TRUE))install.packages("BiocManager")
if (!require("Biobase", quietly = TRUE))BiocManager::install("Biobase")
if (!require("devtools", quietly = TRUE))install.packages("devtools")
devtools::install_github("humengying0907/InstaPrism")library(InstaPrism)
2、数据处理

开发者建议使用TPM或者count的bulkRNA数据,并且从例子来看TPM是更优选。但为了前后分析一致,本次运算仍使用count数据。

# 处理单细胞数据
a <- as.data.frame(GetAssayData(sc_dataset, layer = "counts")) # 行为基因,列为细胞名/样本名cell_meta <- sc_dataset@meta.data    # 处理好的单细胞注释文件
a_ref <- refPrepare(sc_Expr = a,cell.type.labels = cell_meta$celltype, # 细胞类型cell.state.labels = cell_meta$state_type, # 细胞状态) 
head(a_ref)[1:3,1:3]# bulkRNA数据
b_bulk <- exp # 行为基因,列为细胞名/样本名# 运行函数
start_time <- Sys.time() # 记录初始时间
deconv_res <- InstaPrism(bulk_Expr = exp, # bulkRNA数据refPhi_cs = a_ref) # 单细胞数据
end_time <- Sys.time() # 记录终止时间
end_time - start_time # 计算时间差# Time difference of 1.086436 mins

真的非常快哦。本来需要将近3小时,现在只需要1分钟

3、提取数据
# 用@Post.ini.ct@theta可获得细胞的theta估计值
estimated_frac <-  t(deconv_res@Post.ini.ct@theta)# 提取之前保存好的BayesPrism分析结果进行比较
theta <- as.data.frame(theta) #BayesPrism分析结果
estimated_frac <- as.data.frame(estimated_frac) #IntraPrism分析结果
names(theta) <- c("BayesPrism_1","BayesPrism_2","BayesPrism_3")
head(theta)[1:5,1:3]
#                             BayesPrism_1 BayesPrism_2 BayesPrism_3
#TCGA-ZP-A9CY-01A-11R-A38B-07 4.718213e-07    0.9999993 2.523228e-07
#TCGA-DD-AAVZ-01A-11R-A41C-07 6.814688e-02    0.9314891 3.640295e-04
#TCGA-DD-A1EC-01A-21R-A131-07 5.272019e-01    0.4400359 3.276221e-02
#TCGA-DD-A1EC-11A-11R-A131-07 2.532253e-07    0.9999996 1.089799e-07
#TCGA-DD-AADN-01A-11R-A41C-07 3.301156e-01    0.5707665 9.911796e-02names(estimated_frac) <- c("InstaPrism_1","InstaPrism_2","InstaPrism_3")
head(estimated_frac)[1:5,1:3]
#                             InstaPrism_1 InstaPrism_2 InstaPrism_3
#TCGA-ZP-A9CY-01A-11R-A38B-07   0.01309068    0.9869093 1.698626e-12
#TCGA-DD-AAVZ-01A-11R-A41C-07   0.05282472    0.9471751 2.133425e-07
#TCGA-DD-A1EC-01A-21R-A131-07   0.18103636    0.8130102 5.953452e-03
#TCGA-DD-A1EC-11A-11R-A131-07   0.01004673    0.9899533 8.360430e-13
#TCGA-DD-AADN-01A-11R-A41C-07   0.45022208    0.4644255 8.535239e-02identical(rownames(estimated_frac),rownames(theta))
# [1] TRUE
dat <- cbind(estimated_frac,theta)

其实从这里粗看就可以发现数据结果的差异还是非常大的

4、相关性分析(粗糙的比较一下)
# 懒的写循环了,就三张图,徒手修改代码出图 hhh
library(ggstatsplot)
colnames(dat)
ggscatterstats(data = dat,x = InstaPrism_1,  y = BayesPrism_1,   xlab = "InstaPrism_1",ylab = "BayesPrism_1",bf.message = FALSE)

相关性的值分别在0.84,0.87,0.67。说实话,这个相关性的数据,应该不能让使用者满意吧。

为什么会出现这样的情况?目前能想到的有两个可能的主要原因,1、没有进行异常基因过滤2、算法上的差异。

因此笔者重新回溯了开发者提供在github中的代码,发现并没有提供相应的过滤函数(英语不好,如果理解没有误的话)。同时笔者也尝试采用了BayesPrism算法中提供的过滤函数过滤了数据之后再跑IntraPrism,相关性更低了....

接下来了解了Gibbs 采样和Fixed-Point算法。Gibbs 采样通常用于贝叶斯推断,特别是当直接采样较难实现时。它在处理高维分布和复杂模型时具有优势,而定点算法常用于确定性优化问题,例如在确定的条件下求解系统的稳定状态或最优解。Fixed-Point算法在某些特定的情况下可以替代Gibbs采样:1)当所使用的模型相对简单、确定且具有良好的收敛性质时,定点算法更适用;2)在计算资源有限或需要快速结果的情况下,定点算法的高效性显得尤为重要;3)在某些高维度数据分析中,如果定点算法能够被证明在这些维度上具有稳定的收敛性,它可能是一个更好的选择;4)当有较强的先验信息或假设可以指导模型的构建和优化时,定点算法可以利用这些信息进行快速收敛;5)在对模型的鲁棒性要求较低的情况下,定点算法可以作为替代。总而言之,要使用 Fixed-Point算法需要满足一定的条件

那么是否InstaPrism能平替BayesPrism呢? 恐怕大多数情况下还是不行的,还是老老实实的用BayesPrism进行分析吧~

参考资料:

1、github:https://github.com/humengying0907/InstaPrism?tab=readme-ov-file

2、生信碱移:https://mp.weixin.qq.com/s/NTOxq_soYmPVbSItXVKGPw

致谢:感谢曾老师,小洁老师以及生信技能树团队全体成员。

:若对内容有疑惑或者有发现明确错误的朋友,请联系后台(欢迎交流)。更多内容可关注公众号:生信方舟

- END -

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3249005.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Axure RP移动端医院在线挂号app问诊原型图模板

医疗在线挂号问诊Axure RP原型图医院APP原形模板&#xff0c;是一款原创的医疗类APP&#xff0c;设计尺寸采用iPhone13&#xff08;375*812px&#xff09;&#xff0c;原型图上加入了仿真手机壳&#xff0c;使得预览效果更加逼真。 本套原型图主要功能有医疗常识科普、医院挂号…

鸿蒙Navigation路由能力汇总

基本使用步骤&#xff1a; 1、新增配置文件router_map&#xff1a; 2、在moudle.json5中添加刚才新增的router_map配置&#xff1a; 3、使用方法&#xff1a; 属性汇总&#xff1a; https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-compone…

mediasoup企业级会议并发方案设计

mediasoup单服务企业级部署方案 网络环境如图 服务器要求: 单个mediasoup稳定支持200-300路流&#xff0c;为了增加服务的并发&#xff0c;在一个服务器上部署5个信令服务及mediasoup服务 单台服务器32核cpu&#xff0c;32G内存&#xff0c;带宽2000M及以上 集群部署方案图…

IDEA SpringBoot实现定时任务(保姆级教程,超详细!!!)

目录 1. 前言 2. 创建SpringBoot项目 3. Maven依赖引入 4. 创建定时任务 5. 问题&#xff1a;执行时间延迟和单线程执行 5.1 问题原因 5.2 解决方式 1. 前言 在现代化应用中&#xff0c;定时任务&#xff08;Scheduled Tasks&#xff09;是不可或缺的一部分&#xff…

Linux 07:基础IO

stdin & stdout & stderr C默认会打开三个输入输出流&#xff0c;分别是stdin, stdout, stderr。仔细观察发现&#xff0c;这三个流的类型都是FILE*, fopen返回值类型&#xff0c;文件指针。 文件读取函数&#xff08;库函数&#xff09;&#xff1a; fopen、fread、…

部分功能的实现和算法

目录 1.雪花算法 2.MD5加密 3.小眼睛显示密码 4.发送验证码 5.倒计时 1.雪花算法 SnowFlake 中文意思为雪花&#xff0c;故称为雪花算法。最早是 Twitter 公司在其内部用于分布式环境下生成唯一 ID。在2014年开源 scala 语言版本 雪花算法的原理就是生成一个的 64 位比特…

电力需求预测挑战赛笔记 Task2 Datawhale AI 夏令营

#AI夏令营 #Datawhale #夏令营 Task1文章链接&#xff1a; 电力需求预测挑战赛笔记 Taks1 跑通baseline-CSDN博客文章浏览阅读577次&#xff0c;点赞5次&#xff0c;收藏9次。电力需求预测挑战赛;【训练时序预测模型助力电力需求预测】https://blog.csdn.net/qq_23311271/art…

【数据结构】二叉树———Lesson2

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

如何走出低能量状态?

晚上好。 每个人都难免会有状态不佳的时候。可能是遭受压力&#xff0c;可能是事情不顺&#xff0c;也可能无缘无故、突然就陷入情绪的低谷之中。 这时&#xff0c;我们很容易感到精力不济&#xff0c;无精打采&#xff0c;明明有许多事情要做和想做&#xff0c;但总是提不起精…

JavaWeb入门程序解析(Spring官方骨架、配置起步依赖、SpringBoot父工程、内嵌Tomcat)

3.3 入门程序解析 关于web开发的基础知识&#xff0c;我们可以告一段落了。下面呢&#xff0c;我们在基于今天的核心技术点SpringBoot快速入门案例进行分析。 3.3.1 Spring官方骨架 之前我们创建的SpringBoot入门案例&#xff0c;是基于Spring官方提供的骨架实现的。 Sprin…

DevExpress WPF中文教程 - 为项目添加GridControl并将其绑定到数据

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

springboot+vue+mybatis销售评价系统+PPT+论文+讲解+售后

随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;销售评价系统当然也不能排除在外。销售评价系统是以实际运用为开发背景&#xff0c;运用软件工程开发方法&#xff0c;采用Java…

Three.js 实战【2】—— 船模型海上场景渲染

停止了好久没有更新three这方面的文章了&#xff0c;从上两年还是vue2&#xff0c;一下子都换到vue3了&#xff0c;下面这些three都是基于vue3来进行开发的哈&#xff0c;先看一下这篇文章实现的效果哈。其中关于模型什么的资源都放在Git上了 初始化场景 安装three就直接通过n…

GuLi商城-商品服务-API-品牌管理-品牌分类关联与级联更新

先配置mybatis分页&#xff1a; 品牌管理增加模糊查询&#xff1a; 品牌管理关联分类&#xff1a; 一个品牌可以有多个分类 一个分类也可以有多个品牌 多对多的关系&#xff0c;用中间表 涉及的类&#xff1a; 方法都比较简单&#xff0c;就不贴代码了

000007 - HDFS DataNode

HDFS DataNode 1. DataNode工作机制2. DataNode的数据完整性3. 掉线时限参数设置 1. DataNode工作机制 &#xff08;1&#xff09;一个数据块在 DataNode 上以文件形式存储在磁盘上&#xff0c;包括两个文件&#xff0c;一个是数据本身&#xff0c;一个是元数据包括数据块的长度…

【C++】类与对象的学习(中)

目录 一、默认成员函数&#xff1a; 二、构造函数&#xff1a; 1、定义&#xff1a; 2、理解&#xff1a; 三、析构函数&#xff1a; 1、定义&#xff1a; 2、理解&#xff1a; 四、拷贝构造&#xff1a; 1、定义&#xff1a; 2、理解&#xff1a; 五、运算符的重载&…

夏令营入门组day5

目录 一. 城市距离 二. 史莱姆 一. 城市距离 &#xff08;1&#xff09;思路 每次询问&#xff0c;对于每一个点都判断与下一个点是否为临近点会超时&#xff0c;因此预处理&#xff0c;预先判断每一个点的临近点&#xff0c;然后将花费存入前缀和数组&#xff0c;这样在每次询…

对redis进行深入学习

目录 1. 什么是redis&#xff1f;1.1 为什么使用redis作为缓存&#xff1f;1.1.0 数据库&#xff08;MySQL&#xff09;与 redis1. 存储介质不同&#xff08;408选手应该都懂hh&#xff09;2. 数据结构优化3. I/O模型差异4. CPU缓存友好性5. 单线程与多线程差异6. 持久化与缓存…

哈尔滨网站建设注意哪些问题

在进行哈尔滨网站建设时&#xff0c;需要注意以下几个问题&#xff1a; 首先&#xff0c;要明确网站的定位和目标。网站建设的首要任务是明确网站的定位和目标&#xff0c;确定网站所要传达的信息和服务内容&#xff0c;以及面向的目标用户群体。哈尔滨作为一个具有浓厚地域特色…

Linux脚本:如何编写bash脚本统计多个相关进程的CPU占用率,以此统计系统中指定多进程的总的CPU使用率

目录 一、需求 二、分析 三、脚本示例 1、创建脚本 2、编写脚本 3、脚本编写注意事项 &#xff08;1&#xff09;CPU占用率列 &#xff08;2&#xff09;多进程实例 &#xff08;3&#xff09;权限 四、运行脚本 1、给予脚本可执行权限 2、运行脚本 五、优化脚本 …