197_RNA-seq样本量估计¶
一句话概述¶
RNA-seq实验的样本量(生物学重复数)估计通过功效分析(power analysis)确定在给定效应量、显著性水平和期望检验力下所需的最少样本数,使用RNASeqPower、ssizeRNA、PROPER等工具进行计算,是实验设计阶段的关键步骤。
核心知识点表格¶
| 知识点 | 说明 |
|---|---|
| 检验力(Power) | 正确拒绝零假设的概率,通常要求≥0.8 |
| 效应量(Effect size) | 差异的大小(如fold change=2) |
| 显著性水平(α) | 假阳性率,通常0.05(FDR校正后) |
| 生物变异(BCV) | 生物学变异系数,影响样本量需求 |
| 测序深度 | reads数量,与检测灵敏度相关 |
| 推荐最低样本量 | 一般每组≥3个,推荐≥6个 |
| RNASeqPower包 | 最常用的RNA-seq功效分析R包 |
| PROPER | 基于模拟的功效分析 |
步骤详解¶
第一步:理解功效分析的基本概念¶
白话解释:做RNA-seq实验前,需要回答"我该测几个样本?"这个问题。太少样本检测不到差异(假阴性),太多样本浪费经费。功效分析就是在"检测灵敏度"和"成本"之间找到平衡。
技术细节:功效分析涉及四个参数:样本量(n)、效应量(effect size/fold change)、显著性水平(α)、检验力(power=1-β)。固定其中三个可以计算第四个。对于RNA-seq,还需要考虑生物学变异系数(BCV)和测序深度。
第二步:使用RNASeqPower计算样本量¶
library(RNASeqPower)
# 基本功效分析
# 参数:
# depth: 平均测序深度(每基因的reads数)
# cv: 生物学变异系数(BCV)
# effect: 最小检测的fold change
# alpha: 显著性水平(考虑FDR校正)
# power: 期望的检验力
# 场景1:常规RNA-seq
n1 <- rnapower(
depth = 20, # 每基因约20 reads(对应~2000万reads总量)
cv = 0.4, # BCV=0.4(人类样本典型值)
effect = 2, # 检测2倍变化
alpha = 0.05/20000, # Bonferroni校正(约20000个基因)
power = 0.8
)
cat("需要每组样本数:", ceiling(n1), "\n")
# 场景2:不同参数组合
params <- expand.grid(
depth = c(10, 20, 50, 100),
cv = c(0.2, 0.4, 0.6),
effect = c(1.5, 2, 3),
alpha = 0.05/20000,
power = 0.8
)
params$n <- apply(params, 1, function(x) {
ceiling(rnapower(depth = x[1], cv = x[2], effect = x[3],
alpha = x[4], power = x[5]))
})
# 查看结果
library(ggplot2)
ggplot(params, aes(x = factor(effect), y = n, fill = factor(cv))) +
geom_bar(stat = "identity", position = "dodge") +
facet_wrap(~depth, labeller = label_both) +
theme_minimal() +
labs(x = "Fold Change", y = "Samples per Group", fill = "BCV",
title = "Required Sample Size for RNA-seq")
第三步:使用ssizeRNA包¶
# install.packages("ssizeRNA")
library(ssizeRNA)
# 基于负二项分布的功效分析
result <- ssizeRNA_single(
nGenes = 20000, # 检测的基因数
pi0 = 0.9, # 非差异基因比例
m = 1000, # 平均reads数
mu = 10, # 平均表达量
disp = 0.1, # 离散系数
logfc = log2(2), # log2 fold change
fdr = 0.05, # FDR阈值
power = 0.8 # 期望检验力
)
cat("推荐每组样本数:", result, "\n")
# 绘制功效曲线
sizes <- 3:20
powers <- sapply(sizes, function(n) {
# 简化的功效估计
power_at_n <- 1 - pnorm(qnorm(1 - 0.05/2) - log2(2) / (0.4 / sqrt(n)))
return(power_at_n)
})
plot(sizes, powers, type = "b", pch = 19,
xlab = "Samples per Group", ylab = "Power",
main = "Power Curve for RNA-seq")
abline(h = 0.8, lty = 2, col = "red")
abline(v = sizes[which.min(abs(powers - 0.8))], lty = 2, col = "blue")
第四步:基于已有数据的模拟功效分析¶
白话解释:如果有先导实验数据,可以用PROPER包模拟不同样本量的检测能力。
library(PROPER)
# 基于DESeq2的模拟
# 使用已有数据估计参数
sim_options <- RNAseq.SimOptions.2grp(
ngenes = 20000,
p.DE = 0.1, # 10%差异基因
lOD = "300", # 平均read depth
lfc = function(x) rnorm(x, mean = 1, sd = 0.5) # log fold change分布
)
# 运行模拟
sim_result <- runSims(
Nreps = c(3, 5, 7, 10, 15, 20), # 测试不同样本量
sim.opts = sim_options,
DEmethod = "DESeq2",
nsims = 50 # 模拟次数
)
# 提取功效
powers <- comparePower(sim_result, alpha.type = "fdr", alpha.nominal = 0.05,
stratify.by = "expr", delta = 0.5)
summaryPower(powers)
# 可视化
plotPower(powers)
plotFDR(powers)
第五步:实用建议总结¶
# 快速参考表
sample_size_guide <- data.frame(
Scenario = c("模式生物,低变异", "人类样本,中等变异", "临床样本,高变异",
"时间序列实验", "多因素实验", "稀有样本"),
BCV = c("0.1-0.2", "0.3-0.4", "0.5-0.8", "0.3-0.5", "0.3-0.5", "0.4-0.6"),
FC_target = c("1.5x", "2x", "2x", "1.5x", "2x", "3x"),
Min_per_group = c(3, 5, 8, 5, 4, 3),
Recommended = c(5, 8, 12, 8, 6, 5),
Note = c("近交系,变异小", "个体差异大", "临床异质性高",
"需要足够时间点", "每个因素组合", "尽量多收集")
)
print(sample_size_guide)
实战命令速查¶
# RNASeqPower快速计算
library(RNASeqPower)
rnapower(depth=20, cv=0.4, effect=2, alpha=0.05/20000, power=0.8)
# 检验力曲线
sapply(3:20, function(n) rnapower(depth=20, cv=0.4, effect=2, alpha=0.05/20000, n=n))
# PROPER模拟
library(PROPER)
sim <- runSims(Nreps=c(3,5,10), sim.opts=RNAseq.SimOptions.2grp(), DEmethod="DESeq2")
面试常问点¶
Q1: RNA-seq实验每组至少需要多少个生物学重复? A: 绝对最低3个(否则无法估计变异),但3个样本检验力很低。推荐每组至少6个样本以获得合理的检验力(power≥0.8检测2倍变化)。对于人类临床样本(变异大),建议8-12个。增加样本数的收益远大于增加测序深度。
Q2: 增加测序深度和增加样本量哪个更有价值? A: 几乎总是增加样本量更有价值。Hart等人(2013)的经典论文指出:对于差异基因检测,6个样本×1000万reads优于2个样本×3000万reads。测序深度超过一定阈值后(~2000万reads/样本),增加深度的边际收益很小。
Q3: BCV(生物学变异系数)如何估计? A: 可以从先导实验或同类型已发表数据中估计。edgeR的estimateDisp函数可以从已有数据计算BCV。一般参考:技术重复BCV~0.01,近交系小鼠~0.1,人类细胞系~0.2-0.3,人类组织~0.4-0.6,临床样本~0.5-0.8。
Q4: FDR校正如何影响样本量估计? A: FDR校正比Bonferroni宽松。同时检验20000个基因,Bonferroni校正后的α=0.05/20000=2.5e-6(极其严格),而BH-FDR在q=0.05水平允许更多假阳性。使用FDR校正的α在功效分析中通常取0.005-0.001之间(经验值)。
Q5: 样本量不足怎么补救? A: (1)降低要求的效应量(接受只检测大差异);(2)使用更宽松的FDR阈值(如0.1而非0.05);(3)使用正则化方法(如DESeq2的信息共享收缩,比edgeR在小样本时更保守但更可靠);(4)采用通路级分析(如GSEA),比单基因分析对样本量更耐受。
易错点¶
- 混淆生物学重复和技术重复:功效分析基于生物学重复数,技术重复不增加自由度
- 使用过乐观的BCV:低估变异导致样本量不足
- 忽略多重检验校正的影响:不考虑FDR校正的功效分析会低估所需样本量
- 期望检测所有差异基因:通常只能检测到中/大效应量的差异
- 不考虑dropout率:实际实验中部分样本可能失败,应多准备20%样本
补充知识¶
不同研究目的的样本量建议¶
| 研究目的 | 每组最低 | 推荐 | 说明 |
|---|---|---|---|
| 差异基因检测 | 3 | 6-8 | 检测2倍以上变化 |
| WGCNA共表达分析 | 15 | 20+ | 需要足够多样本估计相关 |
| eQTL分析 | 50 | 100+ | 需要大量样本检测小效应 |
| 亚型发现 | 20 | 50+ | 无监督方法需要更多样本 |
| 时间序列 | 3/时间点 | 5/时间点 | 每个时间点作为独立组 |