Nature Communications 单细胞算法 scDist,教你怎么找到重要的细胞亚群与基因!

生信碱移

scDist: 寻找关键细胞亚群与基因的方法

单细胞RNA测序(scRNA-seq)使我们能够研究受药物治疗、感染以及癌症等疾病中关键的细胞亚群。为了找到可能影响疾病的细胞亚群乃至基因,我们常常去比较两个或多个组之间显著差异的细胞类型。这里"显著差异"的定义可以是不同方面的,总结成两种

  • 细胞比例差异,如 DA-seq、Milo和Meld,侧重于识别在不同条件下比例变化的细胞类型;

  • 细胞状态差异,与细胞比例相反,旨在检测在不同条件下具有不同转录组特征的细胞类型。常见的做法是使用不同条件下差异表达基因的数量来评估某种细胞亚群状态的转录状态变化,当然也有一些相关算法被开发出来比如 Augur

直觉上看,基于转录表达状态的细胞状态方法似乎更合理。之前比较有名的算法Augur,通过训练一个分类器,从表达数据中预测条件标签,然后使用ROC曲线下面积作为指标对细胞类型进行排名。尽管如此,Augur并未考虑个体间的变异性,这可能会混淆扰动细胞类型的排名。来自美国新墨西哥大学的研究者使用六个健康对照者的血液scRNA-seq数据演示了这个现象。通过将六个健康对照者的样本随机分为两组,生成一个假的对照数据集,逻辑上讲算法不应该检测到任何细胞类型的差异。但他们的实验结果表明,在20次随机重复中,93%的细胞类型AUC均大于0.5,红细胞(RBCs)在所有20次试验中均被识别有意义的细胞。

图片

▲ 模拟实验结果:理论上讲每种细胞AUC应该都在0.5附近,因为分组是假的。但是实际上,RBC的平均AUC甚至可以超过0.7.

图片

▲ DOI:10.1038/s41467-024-51649-3

为此,他们开发了一种基于混合效应模型算法scDist,于今年9月1号发表于Nature Communications[IF:14.7]杂志。简单来讲,scDist估计每种细胞类型在高维基因表达空间(如PCA降维空间)中条件均值之间的距离,并采用线性混合效应模型来考虑不同样本和其他技术潜在的变异性。除了找到不同条件下变化最大的细胞亚群,作者还根据主成分回归的beta值与基因在主成分的载荷乘积定义了特定细胞中的基因重要性(基因-->主成分-->条件差异)。

图片

▲ scDist的原理。

小编将在下文简单介绍一下scDist的使用,感兴趣的铁子可以阅读原文或者在下方链接进一步查看:

  • https://github.com/phillipnicol/scDist

0.R包的安装与引用

可以使用下方注释代码安装该包,当然本文还使用了其它包(自行安装):

#devtools::install_github("phillipnicol/scDist")library(dplyr)
library(Seurat) # v4版本
library(scDist)
library(ggplot2)
library(ggpubr)

1.数据的加载

先读取以下数据,走一下标准的seurat流程。需要注意的是,尽管该方法scDist与任何归一化方法兼容,但作者建议使用scTransform进行归一化

af <- readRDS("af.rds")
af <- SCTransform(af, vars.to.regress = "percent.mt", verbose = FALSE)
af <- RunPCA(af, verbose = FALSE)
af <- RunUMAP(af, dims = 1:30, verbose = FALSE)
af <- FindNeighbors(af, dims = 1:30, verbose = FALSE)
af <- FindClusters(af, verbose = FALSE, resolution = 0.05)
DimPlot(af, label = TRUE)

图片

▲ 示例数据的初步分群。

2.执行scDist分析

① 首先从seurat对象af中提取数据构建一个列表sim

sim <- list(Y=af@assays$SCT@scale.data %>% as.data.frame(),meta.data=af@meta.data %>% as.data.frame())# 看一下数据的长相
dim(sim$Y) #Normalized counts
#[1]  3000 18497head(sim$meta.data)
#                           orig.ident nCount_RNA nFeature_RNA  Type percent.mt percent.rb nCount_SCT nFeature_SCT SCT_snn_res.0.05 seurat_clusters
#AAACATCGAACGCTTACGAACTTA_1      cABMR       1965          789 cABMR   2.340967  1.1195929       1328          757                1               1
#AAACATCGAATCCGTCCCTAATCC_1      cABMR       4828         1558 cABMR   8.243579  5.1367026       1334          681                4               4
#AAACATCGAATGTTGCGATGAATC_1      cABMR       1029          489 cABMR   1.068999  1.1661808       1028          489                1               1
#AAACATCGACACGACCCCGACAAC_1      cABMR       1448          680 cABMR   1.933702  2.4861878       1237          680                1               1
#AAACATCGACAGCAGATGGTGGTA_1      cABMR       7451         2137 cABMR   9.126292 13.7699638       1273          575                4               4
#AAACATCGACCACTGTGTCTGTCA_1      cABMR       1059          457 cABMR   3.493862  0.7554297       1049          457                1               1

② 执行scDist分析,需要根据自己数据设置的参数有d, fixed.effects, random.effects, clusters(仔细看我的注释):

out <- scDist(normalized_counts = sim$Y, # 标准化的数据矩阵meta.data = sim$meta.data, # metadata表格d = 20, # 指定用于PCA分析的维度数量为前20fixed.effects = "orig.ident", # 你感兴趣的分组条件,对应metadata表格中的列名称random.effects = c(),  # 需要去除的潜在的影响因素,比如不同的样本、年龄、批次等等,对应metadata表格中的列名称clusters="seurat_clusters" # 待分析的细胞类型,对应metadata表格中的列名称)

③ 可视化分析结果,首先是看看不同细胞类型的在分组间的距离得分:

p <- DistPlot(out, return.plot = TRUE)
p + theme_bw()

图片

▲ 细胞类型的分组距离得分。

随后可以评估一下基因的重要性,通过out$vals对象中的载荷以及beta值相乘计算。这个计算过程包装在distGenes函数,需要使用cluster参数指定要分析的细胞:

distGenes(out, cluster = "4") # 指定4这一群细胞
df <- data.frame(value = out$vals[[cluster]]$beta.hat, label = out$gene.names) %>% top_n(20, abs(value)) # 可视化前20个
df$color <- ifelse(df$value>0, "Positive", "Negative")
ggbarplot(df,x="label", y="value", fill = "color",color = "white",palette = "npg",sort.val = "asc",sort.by.groups = FALSE,xlab = "",legend.title = "")+ theme_bw() + ylab("Condition difference") + coord_flip()

图片

▲ 指定亚群4中的基因重要性得分。

简单分享到这各位老哥老姐

欢迎关注

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

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

相关文章

docker安装prometheus、grafana监控SpringBoot

1. 概述 最新有一个需求&#xff0c; 需要安装一个监控软件&#xff0c;对SpringBoot程序进行监控&#xff0c; 包括机器上cpu, 内存&#xff0c;jvm以及一些日志的统计。 这里需要介绍两款软件&#xff1a; prometheus 和 grafana prometheus: 中文名称&#xff0c; 普罗米…

10分钟了解OPPO中间件容器化实践

背景 OPPO是一家全球化的科技公司&#xff0c;随着公司的快速发展&#xff0c;业务方向越来越多&#xff0c;对中间件的依赖也越来越紧密&#xff0c;中间件的集群的数量成倍数增长&#xff0c;在中间件的部署&#xff0c;使用&#xff0c;以及运维出现各种问题。 1.中间件与业…

遥控器显示分别对应的无人机状态详解!!

1. 电量显示 遥控器电量&#xff1a;遥控器上通常会显示自身的电池电量&#xff0c;以提醒用户及时充电。 无人机电量&#xff1a;部分高端遥控器还会显示无人机的电池电量&#xff0c;以进度条或百分比的形式表示&#xff0c;帮助用户了解无人机的续航能力。 2. 飞行模式与…

【C语言从不挂科到高绩点】09-作业练习-循环结构02

Hello!彦祖们,俺又回来了!!!,继续给大家分享 《C语言从不挂科到高绩点》课程,前面课程中给大家讲解了一些常规的知识点,那么本次课,我们一起来练习挑战一下!! 本套课程将会从0基础讲解C语言核心技术,适合人群: 大学中开设了C语言课程的同学想要专升本或者考研的同…

【C++题解】1002 - 编程求解1+2+3+...+n

问题一&#xff1a;1002 - 编程求解123…n 类型&#xff1a;简单循环 题目描述&#xff1a; 编程求解下列式子的值&#xff1a; S123⋯n。 输入&#xff1a; 输入一行&#xff0c;只有一个整数 n(1≤n≤1000) 。 输出&#xff1a; 输出只有一行&#xff08;这意味着末尾有…

R语言 | 文件读取

一、文件读取 -scan()函数 scan(file “”, what double(), nmax -1, n -1, sep “ ”)&#xff0c;file" " 的双引号里写文件地址&#xff0c;what写读入的数据类型&#xff0c;如果文件有好几种类型&#xff0c;可以啥也不写&#xff08;what" "&…

如何解决Vue中给data中的对象属性添加一个新的属性时响应式不生效的问题?

vue2的响应式原理使用的是对象代理去实现的&#xff0c;对象代理中有一个get和set方法&#xff0c;当我们访问对象的时候就会触发get方法&#xff0c;当我们对对象中的值进行修改时会触发set方法。但是当我们给对象添加一个新的属性时对象代理是检测不到的&#xff0c;所以就会…

通用文字识别如何通过C#进行调用?(三)

一、什么是通用文字识别&#xff1f; 通用文字识别是一种技术&#xff0c;它能够将图像中的文字转换为可编辑的文本格式。 二、通用文字识别适用哪些场景&#xff1f; 例如&#xff1a;商业场景 1.广告数据分析&#xff1a;可以识别户外广告、宣传海报上的文字内容&#xf…

archery 1.9.1 二开-本地环境搭建

archery git 地址: 1、https://github.com/hhyo/Archery 2、pyton 版本使用3.9 3、创建虚环境 使用python3.9安装ldap依赖对应python版本 下载文件地址https://github.com/cgohlke/python-ldap-build/releasespip install python_ldap-3.4.4-cp39-cp39-win_amd64.whl 安装…

多个Node.js版本之间切换

使用nvm 查看已安装的版本 nvm list 切换版本 nvm use 版本号 安装指定版本 1.nvm install 2.nvm use [version] 原文参考

儿童耳勺电子版的好用吗?六大弊病坏处要规避

很多家长在后台私信问儿童耳勺电子版的好不好用&#xff0c;作为个护师&#xff0c;也测过市面上大大小小的儿童耳勺产品&#xff0c;要说出比较好用的是哪一款&#xff0c;还应当是电子版的可视耳勺&#xff0c;因为它有着其他耳勺没有的可视化功能&#xff0c;能将儿童耳道内…

MySQL record

更改密码&#xff1a; alter user rootlocalhost identified with mysql_native_password by ‘123456’; 注意&#xff1a; 在命令行方式下&#xff0c;每条MySQL的命令都是以分号结尾的&#xff0c;如果不加分号&#xff0c;MySQL会继续等待用户输入命令&#xff0c;直到MyS…

009.数据库管理-数据字典动态性能视图

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

贝宁共和国驻华大使馆聘任向凌云教授为新兴产业顾问

2024年7月31日&#xff0c;贝宁共和国驻华大使西蒙皮埃尔阿多伟兰德&#xff08;S.E.M.Simon Pierre ADOVELAND&#xff09;代表贝宁共和国聘任国际著名新兴产业专家向凌云教授为贝宁共和国新兴产业顾问。 贝宁共和国&#xff08;英文&#xff1a;The Republic of Benin, 法文&…

QT做一个USB HID设备识别软件

1.下载 HidApi库&#xff1a;GitHub - yigityuce/HidApi: Human Interface Device Api (HidApi) with C 2.pro文件添加 DEFINES - UNICODE LIBS -lsetupapi 3.h文件 #ifndef My_Usb_Hid_Device_H #define My_Usb_Hid_Device_H#include <QWidget> #include <QStr…

网络安全知识:什么是访问控制列表 (ACL)?

访问控制列表 (ACL) 是网络安全和管理的基础。它们在确定谁或什么可以访问网络内的特定资源方面发挥着重要作用。 本文深入探讨了 ACL 的复杂性&#xff0c;探索了其类型、组件、应用程序和最佳实践。我们还将比较不同操作系统的 ACL&#xff0c;并讨论它们在网络架构中的战略…

时序分解预测|基于变分模态分解VMD双向长短期记忆网络BiLSTM的单变量时间序列预测Matalb程序VMD-BiLSTM

时序分解预测|基于变分模态分解VMD双向长短期记忆网络BiLSTM的单变量时间序列预测Matalb程序VMD-BiLSTM 文章目录 前言时序分解预测|基于变分模态分解VMD双向长短期记忆网络BiLSTM的单变量时间序列预测Matalb程序VMD-BiLSTM 一、VMD-BiLSTM模型VMD-BiLSTM模型详细原理和流程1. …

bootstrap下拉多选框

1、引用(引用资源下载) <!-- Latest compiled and minified CSS --> <link rel"stylesheet" href"static/css/bootstrap-select.min.css"> <!-- Latest compiled and minified JavaScript --> <script src"static/js/bootstrap…

为什么IGSO卫星星下点轨迹为“8”字?

前言 IGSO&#xff0c;倾斜地球同步轨道(Inclined GeoSynchronous Orbit)&#xff0c;又名GIO (Geosynchronous Inclined Orbit)。高度与GEO(Geostationary Orbit)相同&#xff0c;都是约35700km&#xff08;我国北斗系统部分卫星就用该轨道&#xff0c;轨道高度约35786km&…

Linux awk案例

目录 1. 查询时间超过2000毫秒的请求2. 查询指定列组合出现的次数3. 统计所有文件的大小4. 获取大于指定大小的文件名&#xff0c;并按照从大到小排序5. grep指定字段后&#xff0c;使用awk列转行6. 查询第四个字段等于指定值的内容 1. 查询时间超过2000毫秒的请求 ✅log: 202…