跳转至

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),比单基因分析对样本量更耐受。

易错点

  1. 混淆生物学重复和技术重复:功效分析基于生物学重复数,技术重复不增加自由度
  2. 使用过乐观的BCV:低估变异导致样本量不足
  3. 忽略多重检验校正的影响:不考虑FDR校正的功效分析会低估所需样本量
  4. 期望检测所有差异基因:通常只能检测到中/大效应量的差异
  5. 不考虑dropout率:实际实验中部分样本可能失败,应多准备20%样本

补充知识

不同研究目的的样本量建议

研究目的每组最低推荐说明
差异基因检测36-8检测2倍以上变化
WGCNA共表达分析1520+需要足够多样本估计相关
eQTL分析50100+需要大量样本检测小效应
亚型发现2050+无监督方法需要更多样本
时间序列3/时间点5/时间点每个时间点作为独立组