单细胞分析(19)—— 单细胞转录组基因集评分方法

下面是每种基因集评分方法的原理介绍+代码示例,适用于R语言和Python两种主流生信分析环境。可以直接应用于单细胞转录组(scRNA-seq)数据分析中。


🔬 单细胞转录组基因集评分方法(附代码示例)

在单细胞RNA测序(scRNA-seq)分析中,基因集评分(Gene Set Scoring)是一项关键任务,能帮助研究者识别细胞功能状态。本文介绍5种主流方法,并提供代码示例


1️⃣ AUCell:基于AUC的基因集活性评分

📌 原理

  • AUCell 使用 AUC(Area Under the Curve) 来计算基因集在单细胞数据中的活跃度
  • 不依赖数据标准化,适用于异质性较高的数据集。

💻 R 代码示例

# 1. 加载必要的包
library(AUCell)
library(SingleCellExperiment)

# 2. 读取表达矩阵(假设 scRNA-seq 数据已转换为 SingleCellExperiment)
exprMatrix <- assay(sce, "counts")  # 取 count 数据

# 3. 定义基因集
geneSet <- list(MyGeneSet = c("CD8A", "GZMB", "PRF1"))  # 以T细胞毒性相关基因为例

# 4. 计算 AUC 分数
cells_rankings <- AUCell_buildRankings(exprMatrix, nCores = 1)
cells_AUC <- AUCell_calcAUC(geneSet, cells_rankings)

# 5. 可视化结果
AUCell_plot(cells_AUC)

✅ 适用场景:适合用于检测高度活跃的基因集,例如肿瘤浸润T细胞的活化情况


2️⃣ ssGSEA:单样本基因集富集分析

📌 原理

  • 扩展自 GSEA,可计算每个样本的基因集富集得分
  • 适用于大规模数据,计算速度快,但受数据分布影响较大。

💻 R 代码示例

library(GSVA)
library(GSEABase)

# 1. 读取数据
exprMatrix <- as.matrix(assay(sce, "logcounts"))  # 取 log-normalized 数据

# 2. 定义基因集
geneSet <- GeneSet(setName = "T_Cell_Activation",
                   geneIds = c("CD69", "IL2", "IFNG"),
                   geneIdType = SymbolIdentifier())

# 3. 运行 ssGSEA
ssgsea_scores <- gsva(exprMatrix, list(T_Cell_Activation = geneSet), method = "ssgsea")

# 4. 绘制热图
heatmap(ssgsea_scores)

✅ 适用场景:适用于大规模数据分析,如免疫细胞功能状态的评估。


3️⃣ VAM:方差调整的马氏距离计算

📌 原理

  • 通过方差调整(Variance Adjustment)计算基因集活跃度,减少数据噪音的影响。
  • 适用于跨数据集分析,避免数据归一化带来的误差。

💻 Python 代码示例

import vam
import scanpy as sc

# 1. 读取数据
adata = sc.read_h5ad("single_cell_data.h5ad")

# 2. 定义基因集
gene_set = ["CD3D", "CD3E", "CD3G"]  # 例:T 细胞相关基因

# 3. 计算 VAM 得分
vam_scores = vam.calculate_vam_score(adata, gene_set)

# 4. 将得分存入 AnnData
adata.obs["VAM_score"] = vam_scores

# 5. 可视化
sc.pl.umap(adata, color="VAM_score")

✅ 适用场景:适合用于跨数据集比较,如不同队列的免疫特征对比


4️⃣ UCell:基于秩和得分的评分方法

📌 原理

  • 采用 Spearman 秩和统计 方法计算基因集的活跃度
  • 计算效率高,适用于大规模单细胞数据

💻 R 代码示例

library(UCell)
library(Seurat)

# 1. 读取 Seurat 数据
sce <- readRDS("single_cell_seurat.rds")

# 2. 定义基因集
geneSet <- c("GATA3", "TBX21", "IL4")  # 例:Th1/Th2 相关基因

# 3. 计算 UCell 评分
sce <- AddModuleScore_UCell(sce, features = list(Th1_Th2 = geneSet), name = "UCell")

# 4. 可视化
FeaturePlot(sce, features = "UCell_Th1_Th2")

✅ 适用场景:适合大样本量数据,如全转录组水平的功能分析


5️⃣ Seurat AddModuleScore:Seurat环境下的简单评分方法

📌 原理

  • 计算目标基因集的表达均值,并与背景基因对比。
  • 适用于 Seurat 分析框架,但受批次效应影响较大。

💻 R 代码示例

library(Seurat)

# 1. 读取 Seurat 数据
sce <- readRDS("seurat_obj.rds")

# 2. 定义基因集
geneSet <- list(MyGeneSet = c("CCL5", "CXCL10", "GZMB"))  # 例:T 细胞趋化因子

# 3. 计算模块得分
sce <- AddModuleScore(sce, features = geneSet, name = "MyGeneSet_Score")

# 4. 可视化
FeaturePlot(sce, features = "MyGeneSet_Score1")

✅ 适用场景:适合Seurat 分析,如特定细胞亚群功能状态的评估


🔍 方法对比总结

方法计算方式是否需标准化计算效率适用场景
AUCellAUC 排序中等适用于高异质性数据
ssGSEA积分计算适用于大规模数据分析
VAM方差调整马氏距离中等适用于跨数据集分析
UCellSpearman 秩和适用于大规模数据
Seurat AddModuleScore均值计算适用于 Seurat 框架

📝 结论:如何选择最佳方法?

  • 研究细胞功能状态 → 试试 AUCellssGSEA
  • 想分析大规模数据?UCell 是你的最佳选择!
  • 在 Seurat 里工作?Seurat AddModuleScore 是最简单的方法!
  • 想减少批次效应影响? → 选择 VAM

### 单细胞数据中自定义基因评分方法单细胞RNA测序(scRNA-seq)分析过程中,评估特定基因合的表现对于理解生物过程至关重要。Scanpy提供了一种灵活的方法计算给定基因列表的平均表达水平作为分数[^1]。 #### 使用`sc.tl.score_genes` 为了实现这一目标,可以利用 `score_genes` 函数,该函数允许指定一组感兴趣的基因并为每个样本生成相应的得分: ```python import scanpy as sc # 假设adata是一个AnnData对象,其中包含了经过预处理的数据 gene_list = ['GeneA', 'GeneB', 'GeneC'] # 用户定义的目标基因列表 # 计算这些基因组合成的一个综合指标 sc.tl.score_genes(adata, gene_list=gene_list) # 将结果存储到obs属性下的新列'custom_score' adata.obs['custom_score'] = adata.obs_vector('scores') ``` 此代码片段展示了如何通过调用 `score_genes()` 来创建一个新的观测变量 `'custom_score'` ,它代表了由用户提供的一组基因的整体活性程度。这有助于识别具有相似特征模式或功能关联性的细胞群体。 #### 自定义加权方案 除了简单的均值外,还可以应用更复杂的权重策略以反映不同成员的重要性差异。例如,在某些情况下可能希望给予那些被认为更为关键的标记更高的比重: ```python weights_dict = {'GeneA': 0.7, 'GeneB': 0.2, 'GeneC': 0.1} def weighted_mean(x): return sum([v * weights_dict[g] for g, v in zip(gene_list, x)]) adata.obs['weighted_custom_score'] = ( adata[:, gene_list].X.toarray().mean(axis=1).tolist() ) ``` 这里展示了一个基于字典形式提供的个性化权重分配方式,并据此构建了一个新的评分体系——`'weighted_custom_score'` 。这种方法能够更好地捕捉复杂生物学现象背后的细微差别。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信小鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值