沈大力的窝

沈大力的窝

摘要:

在做生信分析时,我们经常会用到adjusted p-value,而不是直接使用p-value,为什么呢?

1. 假设检验的基础:Type I 错误

在统计学中,假设检验的核心是对一个原假设(\(H_0\)​)进行验证。假设检验中可能出现以下两种错误:

Type I 错误(假阳性): 原假设 \(H_0\)​ 为真,但我们错误地拒绝它。

假阳性率通常用显著性水平\(α\)表示(比如 0.05)。

Type II 错误(假阴性): 原假设 \(H_0\)为假,但我们未能拒绝它。

基础知识回顾:我们平时所说的p值就是与这里的α进行比较。p值公式可以简单理解为p-value = P(观察到的结果或更极端的结果|H0成立) ,即原假设成立的情况下观察到的结果成立的概率。我这里用基因表达比较来举个例子,针对geneA,我们的原假设H0是geneA在疾病组和对照组之间不存在差异,备择假设H1是存在差异,观察的结果就是指我们实际在抽样中算出来的两组之间的geneA的统计量,或者可以简单理解为数据差异(比如最简单的均值差异)。那么这个概率就是指,geneA在两组之间没有差异的情况下,我们实际看到的当前差异或者更极端的差异的概率。如果这个概率大于某个标准,也就是这里所说的α,我们认为数据符合H0假设,那么我们就同意它,反之则拒绝它。到这里可能有些没怎么接触过统计的人还会问一个问题:我们一般思考问题是,不应该是想尽办法来证明某个观点是对的吗(也就是H0是对的)?为何在统计检验中都是通过这种拒绝原假设的“反证法”来检验?这里有一句话我想分享一下:正向的个案不足以证明观点的正确性,但反向的却可以直接否定该观点。

单次检验

当我们只进行一次假设检验时,控制\(α\)即控制了假阳性率(Type I 错误率)。

如果设置 \(α = 0.05\) ,意味着有 5% 的概率拒绝一个实际上为真的 \(H_0\)。

那么,多次检验呢?

2. 多次独立检验时发生了什么?

当我们同时进行多次检验(即多重比较,例如比较A组和B组中10,000个基因的表达水平,是10,000次独立检验)时,每次检验都可能发生 Type I 错误。这些错误的概率会累积,导致总体假阳性率大幅提高。

假阳性累积的数学推导

假设我们进行 \(m\) 次独立检验,每次的假阳性率是 \(α\),那么:

首先,每次检验不发生假阳性的概率为:

\(1 - α\)

接着我们可以得出\(m\)次检验都不发生假阳性的概率为:

\((1 - α)^m\)

至少一次假阳性发生的累积概率为:

\(P (至少一次假阳性) = 1 - (1 - α)^m\)

一个简单的例子,如果我们进行10次检验(或者比较两组之间10个基因的表达),这里的\(α\)我们就设置为常用的0.05:

\(P (至少一次假阳性) = 1 - (1 - 0.05)^{10} ≈ 0.40\)

也就是说,尽管每次检验的假阳性率是 5%,在10次检验中,至少出现一次假阳性的概率升到了 40%。如果检验次数增加到100次,累积假阳性概率会进一步上升:

\(P (至少一次假阳性) = 1 - (1 - 0.05)^{100} ≈ 0.994\)

这时候至少出现一次假阳性的概率高达99.4%,几乎可以说是必然出现假阳性了。所以这也是做p-value矫正的主要动机。

3. 如何解决多重比较问题?

为了控制总体的假阳性率,我们需要调整单次检验的p值或显著性水平。这就是p值矫正的目的。以下是常用的两个方法:

方法一:Bonferroni校正

核心思想: 降低每次检验的显著性水平,使得总体假阳性率仍然保持在设定的 \(α\)。

公式:\(p_{cut-off} = {α \over m}\),这里的\(m\)是指检验次数(差异基因分析中就是基因个数)。

\(p_{cut-off} \)是指指调整后的显著性水平(校正后的阈值),它定义了多次检验中单个检验需要达到的显著性标准,以便控制总体假阳性率。

举个例子,我们原来设置的阈值是0.05,现在在我们的数据中有100个基因,那么矫正过的阈值\(p_{cut-off} \)就是\({0.05 \over 100} = 0.0005\)。换句话说这时候我们的p值就不是<0.05显著,而是<0.0005才算显著。那么我们通过计算得出的adjusted p-value是怎么得出来的呢?其实很简单,就是\(p-value_{original} * m\)。例如,geneA算出来的原始p值为0.001,那么这里\(0.001 * 100 = 0.1\),也就是经过矫正后实际上geneA的表达在两组之间并没有显著差异。

然而Bonferroni方法也并不是十全十美,我们从上面的讲解中可以看出,经过校正后的p值阈值会变得非常低,换句话说接受原假设的要求会变得很严格,这种情况下虽然我们降低了Type I错误,但Type II错误的概率却提高了。因此,当当检验次数非常多(如 10,000+)时通常不建议用该矫正方法。

方法二:假发现率(FDR,False Discovery Rate)

核心思想: FDR 的目标是控制显著结果中的假阳性比例,而不是控制整体假阳性率(像 Bonferroni 那样严格)。

公式:\(FDR = {假阳性结果数 \over 所有显著结果数}\)

方法:对所有p值排序,之后可通过Benjamini-Hochberg (BH) 方法计算每个p值对应的FDR值。

Benjamini-Hochberg 是最常用的 FDR 控制方法,其步骤如下:

输入:

假设有\(m\)个独立检验,分别对应的p值为\(p_1, p_2, p_3, ..., p_m\)。

我们的目标是控制FDR要小于指定的阈值\(α\)(例如0.05)。

计算步骤:

排序p值:按照升序对原始p值进行排列。排完序后,每个p值对应一个ranking值\(i\)。

计算FDR值:对每个p值\(p_{(i)}\),计算对应的FDR阈值\(q_{(i)}\):\(q_{(i)} = {i \over m} * α\)。

比较p值与FDR值:找到最大的\(k\),使得\(p_{(k)} ≤ q_{(k)}\)

输出:最后输出所有符合\(p_{(i)} ≤ q_{(i)}\)的结果。

以上理论可能有点抽象,我们举个具体例子来更好的理解。假设我们需要比较 10 个基因在疾病组和对照组之间的表达差异,得到以下 p 值(已排序):

排序位置 (\(i\))

p 值 (\(p_{(i)}\)​)

FDR 阈值 (\(q_{(i)} = {i \over m} * α\), \(α = 0.05\))

1

0.001

0.005

2

0.003

0.01

3

0.008

0.015

4

0.02

0.02

5

0.03

0.025

6

0.04

0.03

7

0.06

0.035

8

0.08

0.04

9

0.1

0.045

10

0.15

0.05

根据以上的排序表,我们要确定一个\(k\),也就是某个\(i\),使得刚好\(p_{(k)} ≤ q_{(k)}\)。我们一个一个来看:

\(p_{(1)} =0.001 ≤ q_{(1)} = 0.005\),那么可以认为这个确实是显著的。

\(p_{(2)} =0.003 ≤ q_{(2)} = 0.01\),同上。

\(p_{(3)} =0.008≤ q_{(3)} = 0.015\),同上。

\(p_{(4)} =0.02≤ q_{(4)} = 0.02\),同上。

\(p_{(5)} =0.03 ≥ q_{(5)} = 0.025\),这时候我们发现p值大于q值了,那么这里的\(k\)就是4,也就是说判定前 4 个基因是确实的显著。

最后,我们依然用原始的p值来表示这4个基因的显著性(为什么?q-value或者FDR主要用于判定显著性,而p值是实际报告原始数据的差异程度,这两者是不同的概念)。

🎯 相关推荐

上海7小时暴走攻略,需要花多少沪币?
日博365官网

上海7小时暴走攻略,需要花多少沪币?

📅 08-26 👀 3603
CEC品牌介绍-CEC是哪个国家的品牌
日博365官网

CEC品牌介绍-CEC是哪个国家的品牌

📅 12-18 👀 2023
口袋妖怪GBA改版哪个更好玩?剧情必须好,bug必须少,(漆黑的魅影,zero都玩过了)多多益善