BayesPrism 增速 400 倍?!免疫反卷积算法 InstaPrism

news2025/1/24 7:23:07

生信碱移

BayesPrism 加速

计算细胞类型去卷积是一种重要的分析技术,用于模拟整体基因表达数据的成分异质性。之前小编给大家介绍过一篇子刊文章,其综合比较了多种细胞去卷积算法(图1)。研究的结果显示,BayesPrism 作为一种全新的贝叶斯方法,在反卷积的准确程度和对模型误差的鲁棒性方面具有优越性。

图片

▲ 图1:点击图片跳转到推文。

尽管如此,由于 BayesPrism 依赖于 Gibbs 采样,因此其计算成本比标准方法高出多个数量级。为此,另一项研究介绍了 InstaPrism 算法,它通过用定点算法替换 BayesPrism 中耗时的 Gibbs 采样步骤,在一个去随机化框架中重新实现了 BayesPrism。根据作者的表述,InstaPrism 在实现相同性能的条件下,将算法的运行时间大大缩短了 400 倍,并且运行所占用的内存降低了 20 倍。

图片

▲ InstaPrism的运行速度,来源于 gihub 描述:https://github.com/humengying0907/InstaPrism

这篇推文中,小编给大家简单介绍一下这个 R 包的使用。当然,感兴趣的铁子也可以进入上面的 github 链接看看。

一、R包安装

可以使用以下代码安装该 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")

一、执行反卷积

① 加载单细胞参考对象。该包内置了一部分癌症的单细胞参考,如果你要使用已经准备好的参考对象,则可以使用下方代码,OV 特指卵巢癌:

OV_ref <- InstaPrism_reference('OV') 
str(OV_ref)
#Formal class 'refPhi_cs' [package "InstaPrism"] with 2 slots
#  ..@ phi.cs: num [1:32053, 1:40] 1.30e-08 1.00e-08 3.86e-07 5.21e-08 1.30e-08 ...
#  .. ..- attr(*, "dimnames")=List of 2
#  .. .. ..$ : chr [1:32053] "MIR1302-2HG" "OR4F5" "AL627309.1" "AL627309.3" ...
#  .. .. ..$ : chr [1:40] "Cycling.cancer.cell.2" "Cycling.cancer.cell.1" "fallopian tube secretory epithelial cell" "Cancer.cell.1" ...
#  ..@ map   :List of 9
#  .. ..$ malignant       : chr [1:11] "Cycling.cancer.cell.2" "Cycling.cancer.cell.1" "fallopian tube secretory epithelial cell" "Cancer.cell.1" ...
#  .. ..$ fibroblast      : chr "fibroblast"
#  .. ..$ T cell          : chr [1:11] "T cell" "CD8.T.cytotoxic" "CD4.T.reg" "CD4.T.naive" ...
#  .. ..$ endothelial cell: chr "endothelial cell"
#  .. ..$ plasma cell     : chr "plasma cell"
#  .. ..$ B cell          : chr "B cell"
#  .. ..$ dendritic cell  : chr [1:4] "pDC" "mDC" "cDC2" "cDC1"
#  .. ..$ mast cell       : chr "Mast.cell"
#  .. ..$ monocyte        : chr [1:9] "Cycling.M" "M1.S100A8" "M2.CXCL10" "M2.SELENOP" ...

其他已经准备好的参考有:

图片

当然,也可以使用下方代码自定义单细胞参考对象

sc.dat <- readRDS("10.sc.dat.rds")           # 处理好的单细胞count矩阵
sc.dat[1:5, 1:5]
#                 A1BG A1CF A2M A2M-AS1 A2ML1
#HCC9_COL18_ROW25    2    0   2       0     0
#HCC9_COL19_ROW39    1   28   0       0     0
#HCC9_COL12_ROW23    1    0   0       0     0
#HCC1_COL14_ROW31   26   98 264       0     3
#HCC1_COL6_ROW4    115  121   1       0     0

cell_meta <- readRDS("10.cell_meta.rds")     # 处理好的单细胞注释文件
cell_meta[1:5, c("orig.ident", "Celltype")]
# A tibble: 5 × 2
#  orig.ident Celltype   
#  <fct>      <fct>      
#1 HCC9       Hepatocytes
#2 HCC9       Hepatocytes
#3 HCC9       Hepatocytes
#4 HCC1       Hepatocytes
#5 HCC1       Hepatocytes

HCC_ref <- refPrepare(t(sc.dat),
                     cell_meta$Celltype,
                     cell_meta$Celltype, 
                     pseudo.min = 1e-08)

② 读入表达矩阵,这里读入的是示例数据的表达矩阵(行为基因,列为样本,填充值为基因的表达量):

bulk_expr <- read.csv(system.file('extdata',
                                  'example_bulk.csv',
                                  package = 'InstaPrism')) 
bulk_expr[1:5, 1:5]
#           simulated1 simulated2  simulated3 simulated4 simulated5
#AL627309.1   4.083809   2.506129  0.13908015 11.0578698   3.548361
#LINC00115    1.339467   3.788035  0.04873877  0.4734699   1.364752
#SAMD11       1.310678   2.586227  0.00000000  0.6388871   1.059823
#NOC2L       51.436820  64.370597 48.12664982 25.8605285  46.726963
#HES4        18.179669  17.233774 20.57675914 13.4103796   6.820316

③ 执行 InstaPrism 估计,随后可以使用 deconv_res@Post.ini.ct@theta 获得细胞的 theta 估计值:

deconv_res <- InstaPrism(bulk_Expr = bulk_expr,
                         refPhi_cs = OV_ref)

# 使用 @Post.ini.ct@theta 即可获得细胞的 theta 估计值
estimated_frac <-  t(deconv_res@Post.ini.ct@theta)
head(estimated_frac)

write.csv(estimated_frac, "theta.csv", quote = F, row.names = T) # 保存结果

# 也可以使用 get_Z_array 函数获得反卷积的基因表达 Z
get_Z_array(deconv_res)

增速400倍?

感兴趣的老铁可以试试

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

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

相关文章

文献解读-肿瘤测序-第二十八期|《基于Palbociclib的高通量联合药物筛选确定了HPV阴性头颈部鳞状细胞癌的协同治疗选择》

关键词&#xff1a;肿瘤测序&#xff1b;基因测序&#xff1b;变异检测&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;Palbociclib-based high-throughput combination drug screening identifies synergistic therapeutic options in HPV-negative hea…

HTML中的<fieldset>标签元素框的使用

HTML 提供的 <fieldset> 标签用于在表单中分组相关元素。 <fieldset> 标签会在相关元素周围绘制一个框。 <legend> 标签为 fieldset 元素定义标题。 语法如下&#xff1a; <fieldset><legend>标题</legend><!-- 元素内容... -->…

C++第三十六弹---二叉搜索树的性能飞跃:AVL树原理与实现

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1 AVL 树 1.1 AVL树的概念 1.2 AVL树节点的定义 1.3 AVL树的插入 1.4 AVL树的旋转 1.5 AVL树的验证 1 AVL 树 1.1 AVL树的概念 二叉搜索树虽…

韩顺平Java-第十九章:IO流

一 文件 文件是保存数据的地方。 1 文件流 文件在程序中是以流的形式来操作的。 流&#xff1a;数据在数据源&#xff08;文件&#xff09;和程序&#xff08;内存&#xff09;之间经历的路径&#xff1b; 输入流&#xff1a;数据从数据源&#xff08;文件&#xff09;到程…

深度解析 MetaArena 游戏引擎,如何让 GameFi 应用更具生命力?

从去年下边年 Friend.tech 引发的新一轮社交热&#xff0c;到去年年底铭文赛道高潮不断&#xff0c;加密市场情绪不断被点燃。但事实上&#xff0c;链游板块在最近几轮热潮中显得有些冷清&#xff0c;无论是彼时的 GameFi 龙头 Axie Infinity&#xff0c;还是在上一轮 GameFi 热…

PHP微信V3支付完整版:实现与微信退款回调 总结

一、在微信商户平台注册账号并完成相关设置&#xff0c;获取到商户号和API密钥。同时&#xff0c;下载并安装官方提供的PHP SDK。 二、发起支付 使用SDK发起支付请求相对简单。首先&#xff0c;创建一个UnifiedOrder对象&#xff0c;然后设置订单的相关信息&#xff0c;如商品…

【HeadFirst 设计模式】装饰者模式的C++实现

一、案例背景 Starbuzz是以扩张速度最快而闻名的咖啡连锁店。如果你在街角看到它的店&#xff0c;在对面街上肯定还会看到另一家。因为扩张速度实在太快了&#xff0c;他们准备更新订单系统&#xff0c;以合乎他们的饮料供应要求。他们原先的类设计是这样的…… 购买咖啡时&am…

HTTP/1.1

目录 一、比较HTTP/1.0的优点 二、请求报文 1.请求报文 &#xff08;1&#xff09;格式 2.get请求 &#xff08;1&#xff09;请求行 &#xff08;2&#xff09;请求头 &#xff08;3&#xff09;请求体 3.post请求 &#xff08;1&#xff09;请求行 &#xff08;2&…

LLM - 微调(Fine-Tuning) Llama3 以及合并微调模型 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/141218047 在微调 Llama3 大模型时&#xff0c;需要注意一些事项&#xff1a; 合适的预训练模型&#xff1a;不同的预训练模型具有不同的特点和适…

Selenium WebDriver 的 Microsoft Edge 驱动程序【附代码】

1、从 Microsoft Edge 驱动程序的官方网站下载与浏览器版本相匹配的驱动程序。 https://msedgewebdriverstorage.z22.web.core.windows.net/https://msedgewebdriverstorage.z22.web.core.windows.net/ 2、指向驱动程序&#xff08;msedgedriver.exe&#xff09;的路径 serv…

Datawhale X魔搭AI夏令营 AIGC方向Task01学习笔记

目录 一、开通PAL-DSW适用 二、报名可图Kolors-LoRA风格故事挑战赛 三、创建PAL实例 四、跑baseline 五、结果上传魔塔 六、关闭PAL 小白&#xff0c;刚跑通Baseline&#xff0c;初步了解了竞赛。 Datawhale官方的速通教程链接&#xff1a;Task 1 从零入门AI生图原理&am…

利用Matlab实现【图论】中的图

目录 前言 一、图论是什么&#xff1f; 1.基本概念 2.表达形式 二、使用matlab作图 1.作无向图 2.作有向图 总结 前言 本文将讲解如何使用matlab中的函数实现最短路径算法&#xff0c;所提供代码仅供参考&#xff0c;严禁用于数模比赛中使用&#xff01; 一、图论是什么&#…

Linux:进程管理,任务管理,监控系统

1&#xff0c;任务管理 从前台丢到后台&#xff1a;【ctrl】 z&#xff0c;如果正在使用vim&#xff0c;突然想干其他事情&#xff0c;但又不想关闭vim&#xff0c;只需要暂时将vim丢到后台等待即可&#xff08;暂停&#xff09;。 查看后台任务状态&#xff1a;jobs&#xff0…

许多人在网络上“裸奔”,你信吗?

现在网络的热议话题之一&#xff0c;是近年来不仅网络诈骗、电信诈骗比比皆是&#xff0c;而更加让人恐怖的是仅只一个QQ号码就可以查出你所有的个人信息。 ​在时下&#xff0c;我国个人隐私泄漏的现象比比皆是&#xff0c;而且不只是仅几大社交平台才存在着严重的漏洞。早前…

WPF 资源、引用命名空间格式、FrameworkElement、Binding、数据绑定

资源 对象级别独立文件 静态资源使用(StaticResource)指的是在程序载入内存时对资源的一次性使用&#xff0c;之后就不再去访问这个资源了。 动态资源使用&#xff08;DynamicResource&#xff09;使用指的是在程序运行过程中仍然会去访问资源。 显然&#xff0c;如果你确定…

【专题】全球商用服务机器人市场研究(2023)报告合集PDF分享(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p37366 近年来&#xff0c;随着人工智能、物联网和自动化技术的不断进步&#xff0c;商用服务机器人行业迅速崛起&#xff0c;展现出广阔的发展前景。从最初的实验室研发到如今的规模化应用&#xff0c;商用服务机器人已逐渐成为各行…

【解析几何笔记】3.向量分解定理

3. 向量分解定理 3.1 线性组合 有 n n n个向量 α 1 , α 2 , . . . , α n \pmb{\alpha}_{1},\pmb{\alpha}_{2},...,\pmb{\alpha}_{n} α1​,α2​,...,αn​&#xff0c;对应有 n n n个实数 λ 1 , λ 2 , . . . , λ n \lambda_{1},\lambda_{2},...,\lambda_{n} λ1​,λ2…

Springboot项目基础开发模式+注解

文章目录 web项目开发涉及基础servlettomcatstrutsssm架构SpringBoot架构tomcathibernate Springboot注解AAspectAutowiredAllargConstructorAround BBeanBuilder CConfigurationConditionalOnMissingBeanComponentComponentScanConfigurationPropertiesCrossOrigin DDocumente…

C语言——构造类型

构造类型 数据类型分类 结构体 结构体的定义 定义&#xff1a;自定义数据类型的一种&#xff0c;关键字 struct &#xff0c;结构体类型的变量可以存储多个不同数据类型的数据。 定义格式&#xff1a; struct 结构体名 { 数据类型1 成员名称1; 数据类型2 成员名称2; … } 注…

Golang | Leetcode Golang题解之第335题路径交叉

题目&#xff1a; 题解&#xff1a; func isSelfCrossing(distance []int) bool {n : len(distance)// 处理第 1 种情况i : 0for i < n && (i < 2 || distance[i] > distance[i-2]) {i}if i n {return false}// 处理第 j 次移动的情况if i 3 && di…