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://www.mzph.cn/news/873062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Python Turtle绘制圣诞树和装饰

简介(❤ ω ❤) 在这篇文章中&#xff0c;我们将探索如何使用Python的Turtle模块来绘制一个充满节日气氛的圣诞树&#xff0c;以及一些可爱的装饰品。Turtle是一个受Logo语言启发的图形库&#xff0c;非常适合初学者学习编程和创建图形。 码农不是吗喽&#xff08;大学生版&…

【常见开源库的二次开发】基于openssl的加密与解密——单向散列函数(四)

目录&#xff1a; 目录&#xff1a; 一、什么是单项散列函数&#xff1f; 1.1 如何验证文件是否被修改过 1.2 单项散列函数&#xff1a; 二、单向hash抗碰撞 2.1 弱抗碰撞&#xff08;Weak Collision Resistance&#xff09; 2.2 强抗碰撞&#xff08;Strong Collision Resista…

图像边缘检测中Sobel算子的原理,并附OpenCV和Matlab的示例代码

Sobel算子是一种用于图像边缘检测的离散微分算子。它结合了图像的平滑处理和微分计算&#xff0c;旨在强调图像中强度变化显著的区域&#xff0c;即边缘。Sobel算子在图像处理中被广泛使用&#xff0c;特别是在计算机视觉和图像分析领域。 Sobel算子的原理 Sobel算子主要用于计…

大模型入门(一)—— LLaMa/Alpaca/Vicuna

LLaMa模型是Meta开源的大模型&#xff0c;模型参数从7B到65B不等&#xff0c;LLaMa-7B在大多数基准测试上超过了GPT3-173B&#xff0c;而LLaMa-65B和Chinchilla-70B、PaLM-540B相比也极具竞争力。相比于ChatGPT或者GPT4来说&#xff0c;LLaMa可能效果上还有差距&#xff0c;但相…

HyperBDR云容灾,让低碳未来有“迹”可循

全球气候变化时刻牵动着我们的心。生活在同一个地球下&#xff0c;万博智云始终坚持环境友好&#xff0c;携手企业和合作伙伴在保持市场竞争力、促进企业可持续发展的同时&#xff0c;共同肩负起守护地球环境的责任。 HyperBDR云容灾以“碳足迹”践行低碳容灾 云产品及数据中心…

Qt界面假死原因

创建一个播放器类&#xff0c;继承QLabel&#xff0c;在播放器类中起一个线程用ffmpeg取流解码&#xff0c;将解码后的图像保存到队列&#xff0c;在gui线程中调用update()刷新显示。 当ffmpeg打开视频流失败后调用update()将qlabel刷新为黑色&#xff0c;有一定概率会使得qla…

随机采样一致性算法RANSAC

点云分割 图自&#xff1a;https://openaccess.thecvf.com/content_cvpr_2017/papers/Qi_PointNet_Deep_Learning_CVPR_2017_paper.pdf《PointNet:用于3D分类和分割的点集深度学习》 点云分割(Point Cloud Segmentation)是计算机视觉和3D图像处理中的一个重要步骤&#xff0c;…

数据结构——位图布隆过滤器

一、位图 1.1 概念 所谓位图&#xff0c;就是用每一位来存放某种状态&#xff0c;适用于海量数据&#xff0c;数据无重复的场景。通常是用来判断某个数据存不存在的。 数据是否在给定的整形数据中&#xff0c;结果是在或者不在&#xff0c;刚好是两种状态&#xff0c;那么可以…

Android获取当前屏幕显示的是哪个activity

在 Android 中&#xff0c;要获取当前屏幕显示的 Activity&#xff0c;可以使用以下几种方法&#xff1a; 方法一&#xff1a;使用 ActivityManager 获取当前运行的任务信息 这是一个常见的方法&#xff0c;尽管从 Android 5.0 (API 21) 开始&#xff0c;有些方法变得不太可靠…

log4js node日志插件

最近不是特别忙在用express搭建后台项目&#xff0c;在开发过程中遇到了需要输入日志的问 本来想直接用node自带的console来实现&#xff0c;后来发现console输出的日志达不到自己希望的 日志格式&#xff0c;后来各种百度发现了log4js插件&#xff0c;本文来记录log4js插件使用…

STM32智能工业自动化监控系统教程

目录 引言环境准备智能工业自动化监控系统基础代码实现&#xff1a;实现智能工业自动化监控系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;工业自动化与管理问题解决方案与优化收尾与总结 1. 引言 智能…

基于zynq的视频采集与hdmi显示(未完)

文章目录 一、项目整体框架一、传感器配置与驱动二、IMX222 1080P 模式图像解析(bayer 2 rgb 模块)2.1 解析有效像素(gen_sync)2.1.1同步字详细介绍&#xff1a; 2.2 bayer 2 rgb 一、项目整体框架 一、传感器配置与驱动 camera信息&#xff1a;索尼IMX222摄像头 SPI&#xf…

Android10.0 锁屏分析-KeyguardPatternView图案锁分析

首先一起看看下面这张图&#xff1a; 通过前面锁屏加载流程可以知道在KeyguardSecurityContainer中使用getSecurityView()根据不同的securityMode inflate出来&#xff0c;并添加到界面上的。 我们知道&#xff0c;Pattern锁所使用的layout是 R.layout.keyguard_pattern_view&a…

【内网穿透】如何本地搭建Whisper语音识别模型并配置公网地址

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

【机器学习】Grid Search: 一种系统性的超参数优化方法

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Grid Search: 一种系统性的超参数优化方法引言什么是Grid Search&#xff1f;Gr…

Spring Boot(概要 入门 Spring Boot 核心配置 YAML JSR303数据校验 )

目录 一、Spring Boot概要 1. SpringBoot优点 2. SpringBoot缺点 二、Spring Boot入门开发 1. 第一个SpringBoot项目 项目创建方式一&#xff1a;使用 IDEA 直接创建项目 项目创建方式二&#xff1a;使用Spring Initializr 的 Web页面创建项目 &#xff08;了解&#x…

Java学习高级四

JDK8开始&#xff0c;接口新增了三种形式的方法 接口的多继承 内部类 成员内部类 静态内部类 局部内部类 匿名内部类 import javax.swing.*; import java.awt.event.ActionEvent;public class Test {public static void main(String[] args) {// 扩展 内部类在开发中的真实使用…

深度学习LSTM之预测光伏发电

代码一&#xff1a;训练LSTM模型 代码逐段分析 import numpy as np import pandas as pd import tensorflow.keras as tk from tensorflow.keras import layers首先&#xff0c;导入了必要的库&#xff1a;numpy用于数值计算&#xff0c;pandas用于数据处理&#xff0c;tenso…

【C++】多态进阶

标题&#xff1a;【C】多态进阶 水墨不写bug 目录 &#xff08;一&#xff09;多态的原理 &#xff08;1&#xff09;虚函数表 &#xff08;2&#xff09;多态的原理 &#xff08;3&#xff09;动态绑定与静态绑定 &#xff08;一&#xff09;多态的原理 &#xff08;1&am…

windows 11 PC查询连接过的wlan密码

1:管理员打开cmd 2:输入netsh wlan show profiles 3:netsh wlan show profiles Shw2024-5G keyclear 密码关键内容&#xff1a;12345678