[ PROMPT_NODE_27380 ]
differential-expression
[ SKILL_DOCUMENTATION ]
# scvi-tools 中的差异表达分析
本文档提供了有关使用 scvi-tools 概率框架进行差异表达 (DE) 分析的详细信息。
## 概述
scvi-tools 实现了贝叶斯差异表达测试,利用学习到的生成模型来估计组间的表达差异。与传统方法相比,该方法具有以下优势:
- **批次校正**:在批次校正后的表示上进行 DE 测试
- **不确定性量化**:效应大小的概率估计
- **零膨胀处理**:对缺失值 (dropout) 和零值的正确建模
- **灵活的比较**:在任何组或细胞类型之间进行
- **多模态**:适用于 RNA、蛋白质 (totalVI) 和可及性 (PeakVI)
## 核心统计框架
### 问题定义
目标是估计两个条件之间表达的对数倍数变化 (log fold-change):
log fold-change = log(μ_B) - log(μ_A)
其中 μ_A 和 μ_B 分别是条件 A 和 B 中的平均表达水平。
### 三阶段过程
**阶段 1:估计表达水平**
- 从细胞状态的后验分布中采样
- 从学习到的生成模型生成表达值
- 跨细胞聚合以获得群体水平的估计
**阶段 2:检测相关特征(假设检验)
- 使用贝叶斯框架测试差异表达
- 提供两种测试模式:
- **"vanilla" 模式**:点零假设 (β = 0)
- **"change" 模式**:复合假设 (|β| ≤ δ)
**阶段 3:控制错误发现**
- 后验期望错误发现比例 (FDP) 控制
- 选择确保 E[FDP] ≤ α 的最大发现数量
## 基本用法
### 简单的两组比较
python
import scvi
# 训练模型后
model = scvi.model.SCVI(adata)
model.train()
# 比较两种细胞类型
de_results = model.differential_expression(
groupby="cell_type",
group1="T cells",
group2="B cells"
)
# 查看前 20 个 DE 基因
top_genes = de_results.sort_values("lfc_mean", ascending=False).head(20)
print(top_genes[["lfc_mean", "lfc_std", "bayes_factor", "is_de_fdr_0.05"]])
### 一对多比较
python
# 将一组与所有其他组进行比较
de_results = model.differential_expression(
groupby="cell_type",
group1="T cells" # 无 group2 = 与其余部分比较
)
### 所有成对比较
python
# 成对比较所有细胞类型
all_comparisons = {}
cell_types = adata.obs["c