BH-FDR 小筆記

BH 代表這是 BenjaminiHochberg 這兩個人提出的一種統計方法。FDR 表示 false discovery rate,顧名思義,這個方法用來檢測偽陽性率。

它計算的對象不是原始數據,而是顯著性檢定時的那個 p。本來在 p < 5% 時就判定有顯著性。但其中也可能有偽陽性的存在,所以要再多做一個 BH-FDR 把它揪出來。

假設你做了 6 次檢定,得到這些 p 值,乍看之下有五個顯著,C 不顯著,E = 0.049,剛好在邊緣,看了有點不放心,那就適合 BH-FDR。先看簡單的臨界值法。

檢定原始 p 值
A0.021
B0.004
C0.130
D0.018
E0.049
F0.001

我們設定 “假發現率水準":α=0.05

總檢定數:m=6

第 1 步:把 p 值由小到大排序

排序後:

排名 ip 值 pi對應原檢定
10.001F
20.004B
30.018D
40.021A
50.049E
60.130C

第 2 步:計算每個排名的 BH 臨界值

公式是:imα

因為 m=6、α=0.05,所以:

排名 ip 值 piBH 臨界值 i6×0.05
10.0010.0083
20.0040.0167
30.0180.0250
40.0210.0333
50.0490.0417
60.1300.0500

第 3 步:找最大的 i,使得

piimα逐一比較:

  • 0.0010.00830.001≤0.0083,成立
  • 0.0040.01670.004≤0.0167,成立
  • 0.0180.02500.018≤0.0250,成立
  • 0.0210.03330.021≤0.0333,成立
  • 0.0490.04170.049≤0.0417,不成立
  • 0.1300.05000.130≤0.0500,不成立

所以最大的符合者是:i=4


第 4 步:判定顯著結果

BH 方法會把 排名 1 到 4 的檢定都視為顯著。

所以顯著的檢定是:

  • F
  • B
  • D
  • A

不顯著的是:

  • E
  • C

由於 p 值這種東西不能看平均值,也無法正規化,所以用排名來解決。假如不喜歡排名,也有純計算的方法,方法二就是計算 q 值。

q 值的定義:qᵢ = pᵢ × m / i(m=檢定總數 6,i=該 p 在排序中的排名),利用前面排好的順序,代公式算出 q。

步驟 1:算原始 qi
原始 p 值原始 q
0.001 q = p×6/1: 0.0060
0.004q = p×6/2: 0.0120
0.018q = p×6/3: 0.0360
0.021 q = p×6/4: 0.03155
0.049q = p×6/5: 0.0588
0.130q = p×6/6: 0.1300
步驟 2:單調化(關鍵!)

q 必須隨排名單調遞增,所以從最後往前取累積最小值,方向和方法一相反:

qiBH 校正後的 q
q₆ = 0.1300
q₅ = min(0.0588, 0.1300) 0.0588
q₄ = min(0.0315, 0.0588)0.0315
q₃ = min(0.0360, 0.0315)0.0315 (同上)
q₂ = min(0.0120, 0.0315)0.0120
q₁ = min(0.0060, 0.0120)0.0060
步驟 3:用 q < 0.05 篩選
  • p1: 0.001 ,q = 0.006 < 0.05 ,成立
  • p2: 0.004 • q = 0.0120 <0.05,成立
  • p3: 0.018 • q = 0.0315 <0.05,成立
  • p4: 0.021 • q = 0.0315 <0.05,成立
  • p5: 0.049 • q = 0.0588 <0.05,不成立
  • p6: 0.049 • q = 0.1300 <0.05,不成立

結果和方法一是一樣的。為什麼要做這件事呢?假如今天我要做很多次檢定,例如跑 10 種 LLM model 測試 5 種演算法,一共跑了 50 組。每一組信心程度都是 95%。那麼在這麼多測試當中,有 1−(0.95)50 ≈ 92.3% 的機率產生一次歪打正著,結果和其他人相反。但你不能拿這一組數據證明什麼天大的發現?除非你經過了 BH-FDR 測試後,它仍然是顯著。

發表留言