異質性:I²、τ² 與預測區間
I² 為什麼會在真實效果差異完全沒變的情況下從五成跳到九成九、Q 檢定不顯著到底能不能當作同質的證據、預測區間為什麼比信賴區間更貼近讀者真正想問的事,以及用 meta-regression 解釋異質性時那個「研究層級的關聯不能推到個人身上」的陷阱。
三個指標,衡量的不是同一件事
論文裡幾乎一定會出現 I²,偶爾出現 τ² 與 Q,很少出現 H²。它們的關係其實是一組恆等式,但它們回答的問題不同:
| 指標 | 定義 | 單位 | 回答什麼 |
|---|---|---|---|
| Q | 各研究對合併值的加權殘差平方和 | 無 | 「觀察到的離散程度,比純抽樣誤差該有的多嗎?」——這是個檢定統計量 |
| τ² | 研究間真實效應的變異數 | 效果量單位的平方(此處是 log RR 的平方) | 「這些真實效應散得多開?」——這是絕對量 |
| H² | 總變異 ÷ 抽樣變異(估法見下方說明) | 無 | 「總離散是抽樣誤差的幾倍?」——下限是 1 |
| I² | 研究間變異佔總變異的百分比 | % | 「離散有多少比例不是抽樣誤差造成的?」——這是比例 |
在這 13 篇 BCG 疫苗試驗上:
| 指標 | 值 | 怎麼唸 |
|---|---|---|
| Q | 152.2(df = 12, p < 0.001) | 離散遠超過抽樣誤差可以解釋的程度 |
| τ² | 0.3132 | 研究間 log RR 的變異數 |
| τ | 0.560 | 研究間 log RR 的標準差——這個數字比 τ² 好用 |
| H² | 12.86 | 總變異是抽樣變異的 12.9 倍 |
| I² | 92.2% | 總變異中約九成不是抽樣誤差 |
I² 是比例,所以它會被精確度牽著走
這是 I² 最常被誤讀的地方,而且用一個實驗就能講完:把 τ² 釘死在觀察到的值不動,只把每一篇研究的內部變異數乘上一個倍數(等於假想這些試驗收案更多或更少),看 I² 怎麼變。
| 各研究變異數 × | τ²(固定不動) | H² | I² |
|---|---|---|---|
| 0.1 | 0.3132 | 119.56 | 99.2% |
| 0.25 | 0.3132 | 48.42 | 97.9% |
| 1 | 0.3132 | 12.86 | 92.2% |
| 4 | 0.3132 | 3.96 | 74.8% |
| 10 | 0.3132 | 2.19 | 54.2% |
真實效果的差異從頭到尾一模一樣(τ² 是同一個數字),但 I² 從 54.2% 一路跑到 99.2%。差別只在於各研究測得多準。
Q 檢定不顯著,不等於同質
Q 檢定的虛無假設是「所有研究的真實效果都相同」。它是一個檢定,因此有檢定力的問題——而在統合分析裡,樣本數就是研究篇數 ,而 通常很小。
用模擬把檢定力畫出來:各研究的內部變異數從這 13 篇實際觀察到的變異數中重抽,真實的 τ² 固定在四個水準,只改變 。
figures/scripts/B7-03-heterogeneity.R| 研究篇數 k | tau2 = 0 (no heterogeneity) | I2 about 25% | I2 about 50% | BCG data (I2 about 92%) |
|---|---|---|---|---|
| 3 | 5.2% | 9.1% | 14.6% | 53.4% |
| 5 | 4.7% | 12.0% | 24.4% | 75.1% |
| 8 | 5.0% | 16.1% | 35.0% | 92.8% |
| 10 | 4.9% | 18.5% | 42.2% | 96.4% |
| 15 | 4.5% | 22.9% | 56.3% | 99.5% |
| 20 | 4.8% | 27.9% | 66.8% | 100.0% |
| 30 | 4.3% | 36.9% | 80.5% | 100.0% |
在一個真實 I² 約五成的世界裡、納入 10 篇研究,Q 檢定只有 42.2% 的機率達到顯著。也就是說超過一半的時候,作者會看到一個不顯著的 Q,然後寫下「研究之間未發現異質性」——而那是錯的。
預測區間:讀者真正想問的那個問題
信賴區間回答的是「平均效應 μ 在哪裡」。但臨床上想問的往往是另一個問題:「我的下一批病人、下一個中心、下一篇試驗,大概會落在哪裡?」
那個問題的答案是預測區間(prediction interval),它同時納入 μ 的不確定性與效應本身的分散:
那個分位數 有兩個版本在流通,而且沒有一個是「軟體預設就對」的。 Higgins 等人的原始版本用 分布、自由度 ;metafor 的 predict() 預設用常態分位數 1.96。 大的時候兩者幾乎一樣, 小的時候差很多,所以下表兩個都列——引用預測區間時要說明是哪一個。
在 BCG 資料上,預測區間與信賴區間的差別是決定性的:
| 區間 | 下界 | 上界 | 跨過 1 嗎 |
|---|---|---|---|
| 95% 信賴區間(平均效應在哪) | 0.344 | 0.696 | 否 |
| 95% 預測區間(下一篇研究會落在哪)——常態分位數,metafor 預設 | 0.155 | 1.549 | 是 |
| 95% 預測區間——改用 t 分位數,自由度 k − 2 | 0.134 | 1.785 | 是 |
figures/scripts/B7-03-heterogeneity.R這句話值得寫清楚:這批試驗的平均而言,BCG 疫苗顯著降低結核發生風險;但依現有證據,在一個新的地點做一次新的試驗,結果落在「未偵測到保護效果」那一側是完全可能的。 兩句話都對,只報第一句就是選擇性呈現。
解釋異質性:meta-regression
異質性的正確處理方式不是把它壓下去,而是問它從哪裡來。BCG 這份資料之所以成為經典教材,正因為它的來源看得見:試驗地點的緯度。
ablat 是各試驗地點的絕對緯度。把它當共變項放進模型:
| 項目 | 值 |
|---|---|
| 緯度每增加一度,log RR 改變 | -0.0291(SE 0.0072, p < 0.001) |
| 換算:緯度每高十度,RR 乘上 | 0.748 |
| R²(被解釋掉的研究間變異) | 75.6% |
| 殘餘 τ² | 0.0764(原本 0.3132) |
| 殘餘 I² | 68.4%(原本 92.2%) |
| 殘餘異質性檢定 QE | 30.7(p 0.001) |
figures/scripts/B7-03-heterogeneity.R亞組分析:同一件事的粗糙版本
把研究依某個類別變項切開,各自合併,是最常見的異質性探索方式。用 alloc(該試驗怎麼分配受試者)切:
| 分組 | k | 合併 RR | 95% CI | I² | τ² | 95% 預測區間(常態分位數) |
|---|---|---|---|---|---|---|
| 交替分派(alternate) | 2 | 0.582 | 0.335–1.011 | 82.0% | 0.133 | 0.236–1.435 |
| 隨機分派(random) | 7 | 0.379 | 0.221–0.650 | 89.9% | 0.393 | 0.099–1.449 |
| 系統性分派(systematic) | 4 | 0.654 | 0.323–1.324 | 86.4% | 0.400 | 0.157–2.725 |
τ² 要與 k 一起讀;例如 交替分派(alternate) 組只有 k = 2,其 τ² = 0.133 只是極不穩定的模型估計,不能當成穩定的絕對異質性結論。
點估計看起來差很多(從 0.379 到 0.654),但組間差異的正式檢定未達統計顯著:QM = 1.77,df = 2,p = 0.413。
生態謬誤:研究層級的關聯不是個人層級的關聯
這是本頁最容易在自己分析裡犯的錯,也是 meta-regression 與亞組分析共有的限制。
上面那條緯度的迴歸線,說的是「試驗的平均緯度越高,該試驗觀察到的疫苗效果越好」。它沒有說「同一個試驗裡,住在比較北邊的那些人接種後保護力比較好」。前者是研究層級(aggregate level)的關聯,後者是個人層級(individual level)的關聯,兩者可以完全不同,甚至方向相反。
臨床上更常見的版本:一篇統合分析發現「平均年齡較高的試驗,治療效果較大」,於是被寫成「老年病人受益較多」。這個推論可能是對的,但這份資料撐不起它——平均年齡高的試驗同時也可能收案更嚴、共病更多、追蹤更久、用藥劑量不同。
動手跑一次
library(metafor)
library(metadat)
data(dat.bcg, package = "metadat")
d <- escalc(measure = "RR", ai = tpos, bi = tneg, ci = cpos, di = cneg,
data = dat.bcg, slab = paste(author, year, sep = ", "))
res <- rma(yi, vi, data = d, method = "REML")
res # I^2, H^2, tau^2, Q 一次全在輸出裡
# 預測區間:predict() 的 pi.lb / pi.ub 兩欄,transf = exp 換回 RR 尺度
predict(res, transf = exp) # 預設用常態分位數 1.96
predict(res, transf = exp, pi.type = "riley") # t(k-2) 版本(Higgins et al. 2009)
# I^2 是比例:把每篇研究的變異數乘上 4,tau^2 釘住不動,看 I^2 掉下來
rma(d$yi, d$vi * 4, method = "DL", tau2 = res$tau2)$I2
# ── meta-regression:用緯度解釋異質性 ──
mr <- rma(yi, vi, mods = ~ ablat, data = d, method = "REML")
mr # R^2、殘餘 I^2、殘餘異質性檢定 QE 都在裡面
regplot(mr, xlab = "Absolute latitude", las = 1) # 氣泡圖
# ── 亞組:組間差異要看 QM,不是比較兩組各自的 p ──
rma(yi, vi, mods = ~ factor(alloc), data = d, method = "REML")
# 想要每組各自的合併值,就逐組跑(並各自看預測區間)
for (lv in levels(factor(dat.bcg$alloc))) {
r <- rma(yi, vi, data = d, subset = (dat.bcg$alloc == lv), method = "REML")
print(predict(r, transf = exp))
}驗證環境:R 4.6.0 + metafor 5.0.1 + metadat 1.6.0
import numpy as np
from scipy.stats import norm, t
from statsmodels.stats.meta_analysis import combine_effects
# metadat::dat.bcg 的四格表,13 篇。帶在這裡,這一段才自己跑得動。
tpos = np.array([4, 6, 3, 62, 33, 180, 8, 505, 29, 17, 186, 5, 27])
tneg = np.array([119, 300, 228, 13536, 5036, 1361, 2537, 87886, 7470, 1699,
50448, 2493, 16886])
cpos = np.array([11, 29, 11, 248, 47, 372, 10, 499, 45, 65, 141, 3, 29])
cneg = np.array([128, 274, 209, 12619, 5761, 1079, 619, 87892, 7232, 1600,
27197, 2338, 17825])
log_rr = np.log((tpos / (tpos + tneg)) / (cpos / (cpos + cneg)))
var = 1 / tpos - 1 / (tpos + tneg) + 1 / cpos - 1 / (cpos + cneg)
res = combine_effects(log_rr, var, method_re="dl")
print("I2 =", res.i2, " Q =", res.q, " tau2 =", res.tau2)
# 預測區間要自己算:mu +- c * sqrt(tau2 + SE(mu)^2),c 是那個分位數
k = len(log_rr)
w_re = 1 / (var + res.tau2)
mu = np.sum(w_re * log_rr) / np.sum(w_re)
se = np.sqrt(1 / np.sum(w_re))
spread = np.sqrt(res.tau2 + se ** 2)
# (1) 常態分位數 —— 對應 metafor predict() 的預設,也是上表第二列
half_z = norm.ppf(0.975) * spread
print("PI (normal):", np.exp(mu - half_z), np.exp(mu + half_z))
# (2) t 分位數,自由度 k-2 —— 原始版本(Higgins et al. 2009),上表第三列
# metafor 這一版要寫成 predict(res, pi.type = "riley");選項名字取自
# Riley et al. 2011,不是公式出處那一篇
half_t = t.ppf(0.975, k - 2) * spread
print("PI (t, k-2):", np.exp(mu - half_t), np.exp(mu + half_t))
# meta-regression 得自己用加權最小平方跑,且沒有現成的 R^2 與殘餘 I^2statsmodels 只給 I² 與 Q,沒有預測區間、沒有 meta-regression、沒有亞組間檢定。本頁的內容實務上必須用 R。
怎麼讀報表
- 有沒有同時給 τ²(或 τ)與 I²。 只給 I² 的論文,讀者無法判斷那個「不一致」在臨床上有多大。
- 有沒有預測區間。 隨機效應模型只報信賴區間,是漏掉了模型本身在講的那件事。沒有的話,用 τ 自己粗估一下:效應分布的兩個標準差大約是 exp(±2τ) 倍。
- Q 不顯著時的用詞。 「no heterogeneity was found」與「no statistically significant heterogeneity was detected」在方法學上是兩句不同的話,後者才對。
- 亞組差異有沒有組間檢定。 只列出各組各自的 p 值而沒有 QM,就是「差異之顯著性」謬誤的溫床。
- 亞組與 meta-regression 是事先指定還是事後挖出來的。 計畫書(PROSPERO 註冊號)裡有沒有寫,是可以自己去查的。
- 有沒有把研究層級的關聯講成病人層級的結論。 看到「老年/女性/重症病人受益較多」,先去確認資料是 IPD 還是研究層級的共變項。
常見誤用
| 誤用 | 為什麼錯 |
|---|---|
| 用固定門檻(25/50/75%)判讀 I² | 同一個 I² 在不同資料上代表的臨床落差差很多;Cochrane 已明說不要當分界 |
| 以 I² 高低描述「效果差異有多大」 | I² 是比例,受各研究精確度影響;絕對大小要看 τ² 或預測區間 |
| Q 檢定不顯著就寫「沒有異質性」 | 研究數少時檢定力很低;只能寫「未偵測到統計上顯著的異質性」 |
| 依 Q 檢定的 p 值決定用固定或隨機效應 | 資料驅動的模型選擇,且靠的是一個檢定力很低的檢定 |
| 隨機效應只報信賴區間不報預測區間 | 信賴區間講的是平均,讀者要的是下一篇研究會落在哪 |
| 研究數極少仍報預測區間並據以下結論 | τ² 估不準、區間寬到沒有資訊,且效應分布的常態假設無法檢查 |
| 亞組分析比較「哪一組顯著」 | 差異之顯著性謬誤;要看組間的 QM |
| 事後切亞組並當成結論 | 沒有事先指定的亞組是假說,不是發現 |
| meta-regression 塞很多個共變項 | 樣本數是研究篇數;每個共變項至少要有十篇研究撐 |
| 把研究層級共變項的關聯講成病人層級的效果修飾 | 生態謬誤;要回答那個問題需要 IPD-MA |
| 異質性高就刪掉離群研究讓 I² 下降 | 這是在用結果決定納入條件,且離群值往往正是資訊最多的那幾篇 |
重跑本頁的所有數字
/opt/homebrew/bin/Rscript figures/scripts/B7-03-heterogeneity.R讀讀看這張圖
答案取自產生本頁圖表的同一份統計輸出,不是另外打上去的。
把這 13 篇 BCG 試驗的 τ² 釘死在 0.3132 不動,只把每一篇研究的內部變異數乘上一個倍數,I² 會怎麼變?
看答案與解析
正確答案: 變異數乘到十倍時 I² 掉到 54.25%——研究之間真實效果的差異一個字都沒動,動的只是各研究測得多準
I² 是一個比例:分子是 τ²,分母是 τ² 加上典型的組內變異。分子在這張表裡從頭到尾釘死,分母卻跟著各研究的精確度走,於是同一組真實差異可以顯示成 54.25%,也可以顯示成 99.16%。這導出兩條判讀規則:一群大型精確試驗即使真實差異在臨床上微不足道,I² 也會很高;一群小型不精確的研究即使真實效果天差地遠,I² 也可能不高,因為抽樣誤差把分母撐大了。92.22% 是這批試驗按實際變異數算出來的那一列,它是表上的一格,不是一個固定不動的常數。要回答「差異到底有多大」得看 τ² 或預測區間這種帶單位的絕對量;而低、中、高那組門檻只是一篇方法學文章裡的舉例,Cochrane Handbook 現在明說不要當成分界。
一組模擬顯示:真實 I² 約五成、納入 10 篇研究時,Q 檢定達到顯著的比例只有 42.2%。這對「Q 檢定不顯著,所以改用固定效應模型」這句話說明了什麼?
看答案與解析
正確答案: 說明不顯著只代表這次沒偵測到:異質性再低一階、同樣 10 篇研究時顯著率只剩 18.5%,拿它決定模型等於讓模型被檢定力決定
Q 檢定的樣本數是研究篇數,而研究篇數通常很小。真實 I² 約五成、10 篇研究時它只有 42.2% 的機率顯著,異質性再低一階時只剩 18.5%。所以不顯著的 Q 說的是「這次沒偵測到」,不是「不存在」;拿它做模型選擇會同時犯三個錯——把未偵測到當成不存在、用一個檢定力很低的檢定做決定、讓模型變成資料驅動的。4.9% 是真實 τ² 等於零時的顯著率,那正好落在名目水準上,證明檢定沒有壞,它只是在異質性中等而研究又少的時候看不見東西,這兩件事完全不同。80.5% 是篇數最多那一列的顯著率,即使到了那裡仍有五分之一會漏掉,而多數臨床統合分析根本收不到那麼多篇。正確的講法是「本次分析未偵測到統計上顯著的異質性」,並同時報出 τ² 與預測區間。
同一個隨機效應模型,合併 RR 0.489 的 95% 信賴區間是 0.344 到 0.696,完整落在 1 的左側。為什麼還要另外報一個會跨過 1 的區間?
看答案與解析
正確答案: 因為那是預測區間,回答的是下一個地點做一次新試驗大概落在哪:上界到 1.549,落在未偵測到保護效果那一側是完全可能的
信賴區間回答「平均效應在哪」,預測區間回答「下一篇研究會落在哪」,兩者納入的東西不同:預測區間同時含 τ² 與平均值的標準誤。所以正確的敘述是兩句話——這批試驗的平均而言 BCG 顯著降低結核發生風險,而依現有證據,在一個新地點做一次新試驗、結果落在未偵測到保護效果那一側完全可能,上界 1.549 就是這件事。只報第一句是選擇性呈現。3.270 是預測區間與信賴區間在 log 尺度上的寬度比,它是結果不是理由:預測區間不是把信賴區間放寬的修正版,它回答的是另一個問題。1.785 是改用 t 分位數的上界,兩個版本的差別來自分位數的選擇,引用時該說明用了哪一個,而不是挑比較寬的那個報——挑法本身就是先看結果再決定。
把試驗地點的絕對緯度放進 meta-regression,R² 是 75.6%,殘餘 I² 仍有 68.4%。這個結果撐得起什麼樣的宣稱?
看答案與解析
正確答案: 只撐得起關聯:殘餘 I² 還有 68.39%,而且共變項是觀察來的,年代、菌株、診斷標準都跟著緯度一起變
R² 說的是緯度解釋掉多少研究間變異,它不是因果的證據。共變項是觀察來的、不是隨機分派的:緯度與年代、營養狀態、菌株、診斷標準、研究品質一起變,meta-regression 沒有辦法把它們分開,所以結論永遠是觀察性的、產生假說用的,即使納入的每一篇都是隨機試驗。殘餘 I² 的 68.39% 也提醒緯度沒有把異質性解釋完。第三個選項犯的是生態謬誤:這條迴歸線說的是「試驗的平均緯度越高,該試驗觀察到的效果越好」,不是「同一個試驗裡住在比較北邊的人保護力較好」。要回答個人層級的問題得做個別病人資料的統合分析,在每一篇研究內部估交互作用再合併起來。至於 0.75,那是每高十度的換算值,數字本身沒錯,錯的是把關聯講成因果。而且以這個篇數配一個共變項已經勉強,Cochrane 的經驗規則是每個共變項至少十篇。
亞組分析裡,隨機分派那一組合併 RR 是 0.379、信賴區間不跨 1;系統性分派那一組是 0.654、區間跨 1。可以寫成「只有隨機分派的試驗顯示保護效果」嗎?
看答案與解析
正確答案: 不行。判斷亞組差異要看組間檢定,這裡的組間檢定統計量是 1.768,兩個自由度下未達顯著,兩個獨立檢定的顯不顯著不是差異的檢定
「一組顯著、另一組不顯著」是兩個獨立檢定的比較,不是差異的檢定——這個錯誤有個名字,差異之顯著性謬誤。正確做法只是多看一個數字:組間檢定統計量 1.768,兩個自由度,未達統計顯著,所以這批資料未偵測到分派方式造成的差異。篇數也解釋了為什麼容易誤讀:隨機分派那一組的篇數是另外兩組的好幾倍,篇數少的那組本來就不容易顯著。0.400 是系統性分派那一組的 τ²,它只有四篇研究撐著,這種 τ² 極不穩定,拿它宣告「那是雜訊」等於用一個估不準的量下結論。0.582 是交替分派那一組的 RR,三組的點估計確實排成一個順序,但要把三個點連成趨勢得有組間檢定支持,而它正好不顯著。亞組分析的紀律是事先指定、數量要少、每組要有足夠篇數,並且一定要同時報出組間檢定。
同一個模型報了 I² = 92.22%、τ² = 0.3132、τ = 0.560。要跟臨床同事解釋「這些試驗的結果有多不一致」,哪一個數字最能直接說明?
看答案與解析
正確答案: τ 的 0.56,因為它是 log RR 的標準差,取指數之後就變成「一篇典型偏離平均的試驗,RR 大約是合併值的幾倍」這種醫師聽得懂的話
I² 是比例,會被各研究的精確度牽著走,所以 92.22% 這個數字說不出臨床落差有多大——同一個 I² 在不同資料上對應的實際差異可以差好幾倍。H² 的 12.86 是同一組恆等式的另一種寫法,總變異是抽樣變異的幾倍,它一樣是無單位的相對量,換成倍數並沒有讓它變得可以轉譯。τ 的 0.56 則帶著效果量的單位:它是 log RR 的標準差,取指數之後就直接說出一篇典型偏離平均的試驗,RR 大約是合併值的幾倍或幾分之一。這句話醫師聽得懂,「I² 等於九成」則不然。τ² 的 0.3132 是同一件事的平方,單位是 log RR 的平方,不適合直接唸給人聽。報告時把 τ 或預測區間放在 I² 旁邊,讀者才有辦法判斷那個不一致重不重要。
用到這個方法的章節
延伸觀看
統合分析的異質性(Heterogeneity)
What is Heterogeneity?
統合分析異質性和小樣本研究偏誤素材來源與授權
本頁為原創內容