本關目標
上一關學會了效果量的公式,但現實是殘酷的:論文很少剛好給你 yᵢ 和 vᵢ。有人只給 CI、有人只給 p 值、有人給 median 和 IQR、有人把同一個試驗拆成三列。本關 Boss「缺值煉金術士」專門把殘缺的資料變成看似完整、實則有毒的數字。打完本關,你應該能:
- 從 CI、p 值、SE 回推效果量的 SE,並知道 ratio 與 difference 的公式差在哪裡。
- 用 Hozo 2005、Wan 2014、Luo 2018 的方法,從 median、IQR、range 估計 mean 與 SD,並說出它們的前提與限制。
- 辨認 unit-of-analysis error(分析單位錯誤):cluster RCT、crossover trial、多臂試驗、同一試驗拆成多列。
- 處理零事件、量表方向不一致、單位不同等常見前處理問題。
萃取表怎麼設計、雙人萃取怎麼做,是 SR 站的主題(深入請看 → SR 站第 7 關 資料萃取)。本關專注在「拿到數字之後,怎麼把它變成可以合併的 (yᵢ, vᵢ)」。
第一原則:能聯絡作者就先聯絡作者。 以下所有公式都是「次佳方案」,都帶有假設。每一個用公式估計或插補的數字,都應該在 methods 寫明來源,並在 sensitivity analysis 中檢查結論是否依賴它(Cochrane Handbook 第 6、10 章)。
一、從 CI 回推 SE
公式
95% CI 是「估計值 ± 1.96 × SE」,所以 CI 的寬度 = 2 × 1.96 × SE = 3.92 × SE:
差值類(MD、RD、SMD): SE = (UL − LL) / 3.92
比值類(RR、OR、HR): SE = (ln UL − ln LL) / 3.92 ← 先取 log!
比值類的 CI 只有在 log 尺度上才是對稱的,所以一定要先取 log。這是最常見的萃取錯誤之一。若 CI 不是 95%,把 3.92 換成對應的 2 × z(90% CI 用 2 × 1.645 = 3.29)。
Time-to-event 資料也是同一個公式:SE(ln HR) = (ln UL − ln LL) / 3.92(Tierney 2007)。
用 ex1 的結果驗算一次
第 4 關會算出 BCG 資料的 random-effects 合併結果:RR 0.489(95% CI 0.344–0.696),R 回報的 ln RR 的 SE 是 0.1798(results.json:se = 0.17978153)。假裝我們只看到論文上的 RR 與 CI,自己回推一次:
(log(0.69616608) - log(0.34407429)) / (2 * qnorm(0.975))
# 0.1798 ← 與 metafor 回報的 SE 一致
這個驗算的意義是:當原始分析在 log 尺度用常態近似計算 CI 時,CI → SE 的回推是精確的。如果原始研究的 CI 是用其他方法算的(例如 exact CI、t 分布、bootstrap),回推只能算近似。
單組平均值的 CI → SD
若論文只給某一組的 mean 與其 95% CI:
SD = √n × (UL − LL) / 3.92 (大樣本)
樣本數小(例如每組少於 60 人)時,CI 通常是用 t 分布計算,應把 3.92 換成 2 × t₀.₉₇₅, n−1(Cochrane Handbook 第 6 章)。
二、從 p 值、SE、t 值回推
p 值 → SE
若論文只給點估計與精確 p 值(雙尾):
z = Φ⁻¹(1 − p/2) (Φ⁻¹ 是標準常態分布的反函數)
SE = |估計值| / z (比值類用 |ln 估計值|)
Altman & Bland 2011 在 BMJ 的 Statistics Notes 說明了這類由 p 值反推 CI 的方法。再用 ex1 驗算:random-effects 的 ln RR = −0.7145,z 值 = −3.9744(output.txt),所以 SE = 0.7145 / 3.9744 = 0.1798,與上面一致。
p <- 0.00007054 # results.json 的 random_reml$p
z <- qnorm(1 - p / 2) # 約 3.974
0.71453235 / z # 約 0.1798
注意事項:
- 「p < 0.05」「p < 0.001」不能用:不等式只給上限,回推出來的 SE 不準確。
- p 值四捨五入到兩位(例如 p = 0.04)時,誤差可能不小,要標記為近似值。
- 若原始檢定用的是 t 檢定且自由度小,應改用 t 分布反推。
SE → SD
SD = SE × √n (單組平均值的 SE)
論文常把 SE 和 SD 混用,或在表格下方才註明「mean ± SEM」。萃取前務必確認報告的是 SD 還是 SE;若某研究的 SD 比其他研究小很多(例如只有十分之一),很可能是把 SE 當成 SD。
Time-to-event 的其他來源
Tierney 2007 整理了從不完整報告取得 ln HR 的方法,例如由 log-rank 檢定的 O − E(observed minus expected)與其變異數 V:
ln HR = (O − E) / V
SE(ln HR) = 1 / √V
若連這些都沒有,還可以從 Kaplan-Meier 曲線讀點回推,但誤差較大,建議放在 sensitivity analysis。
三、Median / IQR / range → mean / SD
很多臨床研究(尤其 outcome 偏態時,例如住院天數、ICU 天數、生物標記)只報 median。Meta-analysis 的 MD 與 SMD 需要 mean 與 SD,於是有了一系列估計方法。
三種報告情境
| 情境 | 論文給了什麼 |
|---|---|
| S1 | min、median、max、n |
| S2 | min、Q1、median、Q3、max、n |
| S3 | Q1、median、Q3、n |
方法演進
Hozo 2005:最早被廣泛使用的方法,只用 median 與 range(S1),不假設分布形狀。估計 mean 的公式為 (a + 2m + b) / 4(a = min,m = median,b = max)。估計 SD 時依樣本數分段:作者模擬結果建議小樣本用其提出的公式,15 < n ≤ 70 用 range / 4,n > 70 用 range / 6。
Wan 2014:指出 Hozo 的 SD 估計沒有好好利用樣本數,改用常態分布下的期望值,讓除數隨 n 平滑變化;並補上 S2、S3(有 IQR)的公式:
S1:SD ≈ (b − a) / ξ(n), ξ(n) = 2 Φ⁻¹[(n − 0.375) / (n + 0.25)]
S3:SD ≈ (Q3 − Q1) / η(n), η(n) = 2 Φ⁻¹[(0.75n − 0.125) / (n + 0.25)]
n 很大時 η(n) 趨近 1.35,這就是常聽到的「IQR / 1.35 ≈ SD」的來源。
Luo 2018:針對 mean 的估計提出最佳化權重,讓 median 與「中段範圍」的權重隨樣本數平滑變化,改進 Hozo 與 Wan 的 mean 公式。以 S3 為例:
S3:mean ≈ w × (Q1 + Q3)/2 + (1 − w) × median, w = 0.7 + 0.39/n
S1:mean ≈ w × (a + b)/2 + (1 − w) × median, w = 4 / (4 + n^0.75)
(以上 Wan 與 Luo 的公式,已用 metafor 4.8 的 conv.fivenum() 預設方法逐一核對結果一致。)
在 R 裡怎麼做
不必手算。metafor 的 conv.fivenum() 預設就是「mean 用 Luo、SD 用 Wan(五數齊全時用 Shi 等人的方法)」:
library(metafor)
# 教學用的虛構數字:某研究只報告 n = 60,median 30,IQR 24–37
conv.fivenum(q1 = 24, median = 30, q3 = 37, n = 60)
# mean sd
# 30.35325 9.874573
# 若只有 min / median / max:15、30、52
conv.fivenum(min = 15, median = 30, max = 52, n = 60)
# mean sd
# 30.54777 7.999795
同一組 S1 數字若用 Hozo 的 mean 公式 (15 + 2×30 + 52)/4,得到 31.75;用 Luo 的方法得到 30.55。不同方法給出不同的估計值,而這個差距相對於該 outcome 的 SD 並不能忽略;在研究數少的 MA 裡,這類差異可能影響結論,所以 methods 要寫明用了哪個方法。
實際使用時,把 conv.fivenum() 套在整個萃取資料框上,它會只補缺 mean/SD 的那幾列,並預設對每列做偏態檢定,偏態顯著的研究不會被估計。
這些方法的限制
- 都假設資料近似常態。 偏態越嚴重,估計越不可靠。諷刺的是:作者之所以報 median,往往正是因為資料偏態。
- 估計的 SD 是「點估計」,它本身的不確定性沒有被傳遞到 MA 裡。 估計值被當成真值使用,MA 的精確度會被略微高估。
- 偏態資料的 mean 本身可能不是好的摘要。 若多數研究都報 median,也許該考慮用其他效果量(例如 ratio of means 搭配 log 轉換),或把 outcome 放進 sensitivity analysis。
建議做法:在 protocol 中預先寫好「遇到 median 時用哪個方法」,結果中標記哪些研究是估計值,並做「排除估計值研究」的 sensitivity analysis(第 8 關)。
四、Unit-of-analysis error:一個人只能算一次
Meta-analysis 的前提是:每個納入的效果量都來自獨立的資料,且每個病人只被計算一次。違反這一點,該研究的 SE 會被低估、權重會被灌水。Cochrane Handbook 第 23 章專門處理這類「非標準設計」。
1. Cluster RCT
隨機分派的單位是診所、學校、病房,而不是個人。同一 cluster 內的人彼此相似,資訊量少於同數量的獨立個人。若論文用個人層級分析而沒有考慮 clustering,需要校正:
design effect (DE) = 1 + (M − 1) × ICC
有效樣本數 = n / DE (二分類資料:事件數與人數都除以 DE)
M 是平均 cluster 大小,ICC 是 intracluster correlation coefficient。ICC 若論文沒報,可借用類似研究或外部資料,並做 sensitivity analysis 測試不同 ICC 的影響。
舉例(Quiz 第 3 題):每 cluster 50 人、ICC 0.02,DE = 1 + 49 × 0.02 = 1.98,有效樣本數約只有原本的一半。ICC 看起來很小,但 cluster 越大,DE 放大得越快。
2. Crossover trial
每位受試者先後接受兩種治療。Elbourne 2002 整理了 crossover trial 納入 MA 的方法學問題:
- 最理想:用配對分析(paired analysis)的結果,例如受試者內差值的 mean 與 SE。它利用了「自己和自己比」的精確度。
- 論文只報兩期各自的 mean 與 SD 時:若當成平行組試驗處理,會忽略受試者內相關,SE 被高估(權重偏低、偏保守),且同一批人被當成兩組;需要受試者內相關係數才能正確換算,通常得借用或假設。
- 只取第一期資料:等同一個平行組試驗,可避開 carry-over effect(前一期治療殘留效果),但浪費資料,且可能有選擇性報告的問題。
- 適用性:crossover 設計只適合穩定的慢性疾病與效果可逆的治療;對急性、可治癒或不可逆 outcome(例如死亡)不適用。
Elbourne 2002 也指出 crossover trial 的報告品質常常不足,使得正確納入很困難——這時又回到第一原則:聯絡作者。
3. 多臂試驗(multi-arm trial)
一個試驗有 A、B、安慰劑三臂,而你的 MA 問「藥物 vs 安慰劑」。錯誤做法:把 A vs 安慰劑、B vs 安慰劑當成兩個研究放進同一個 MA——安慰劑組的病人被算了兩次。常見的處理(Cochrane Handbook 第 23 章):
| 做法 | 說明 |
|---|---|
| 合併相關的臂 | 把 A、B 合成「藥物組」再與安慰劑比較(連續資料用下方合併公式;二分類直接加總事件數與人數) |
| 拆分共用對照組 | 把安慰劑組的人數(與事件數)平分給兩個比較,兩個比較都放進 MA;可減少重複計算,但兩者仍不完全獨立 |
| 只選一臂 | 依事前規則(例如最接近其他試驗的劑量)選一臂;不可事後挑結果好看的那一臂 |
| Network meta-analysis | 需要同時比較所有臂時使用,模型會正確處理多臂相關(第 11 關) |
4. 同一試驗拆成多列:ex4 的 Orpington
ex4(dat.normand1999,專科中風照護 vs 一般照護的住院天數)是一個真實的教學陷阱:資料中 Orpington 出現三列(Mild、Moderate、Severe),它們是同一個試驗依嚴重度分層,不是三個獨立試驗。
合併多組 mean/SD 要用的公式(同時考慮組內與組間變異):
N = Σ nⱼ
M = Σ nⱼ Mⱼ / N
SD = sqrt( [ Σ (nⱼ − 1) SDⱼ² + Σ nⱼ (Mⱼ − M)² ] / (N − 1) )
ex4 的 R code 就是這樣寫的:
pool_arm <- function(n, m, s) { # combine groups: total n, mean, SD
N <- sum(n); M <- sum(n * m) / N
V <- (sum((n - 1) * s^2) + sum(n * (m - M)^2)) / (N - 1)
c(n = N, m = M, sd = sqrt(V))
}
結果對照(ex4/results.json):
| 分析 | k | Hedges’ g(95% CI) | p |
|---|---|---|---|
| 原始資料(三層當三個研究) | 9 | −0.537(−1.142 至 0.068) | 0.082 |
| Orpington 三層合併為一個研究 | 7 | −0.227(−0.619 至 0.164) | 0.255 |
兩個分析都未達統計顯著,但合併後點估計明顯縮小(−0.537 → −0.227)。原因是 Orpington 的中度與重度層各自的 g 很大(−2.32、−1.89),拆成三列時等於讓同一個試驗投了三票。這類問題在萃取階段就應處理,而不是等到分析時才發現。
5. 同一研究的多個 outcome、多個時間點
同一個試驗報了 3 個月與 12 個月的結果、或同一個概念用兩個量表測——一個 MA 只放一個。選哪一個要在 protocol 中事先規定(例如「最接近 12 個月的時間點」「量表優先順序清單」),以避免選擇性挑選結果(SR 站第 3 關 protocol、第 8 關 RoB 的 selective reporting)。
五、其他常見前處理問題
零事件(zero cells)
某一組事件數為 0 時,ln OR、ln RR 與其變異數無法計算。軟體的預設通常是在 2×2 表的每格加 0.5(continuity correction,連續性校正)。但這不是中性的操作:
- Sweeting 2004 的模擬研究比較了固定加 0.5 與兩種替代校正(依對側組人數調整、依其他研究的合併效果估計),替代校正在幾乎所有情境下表現都優於固定校正;兩組人數越不平衡,各方法的結果差異越大。作者建議例行以多種方法與校正方式做 sensitivity analysis。
- Bradburn 2007 用模擬比較多種稀有事件的合併方法,發現資料稀疏時多數常用方法都有偏誤,其中 inverse variance、DerSimonian-Laird 的 OR 與 RD,以及加 0.5 校正的 Mantel-Haenszel OR 偏誤最大;不加零格校正的 MH OR、logistic regression 與 exact method 表現相近。
- 兩組都是 0 事件的研究:在 OR、RR 的合併中不提供效果方向的資訊,常見軟體預設會排除;RD 則可以納入。
處理原則:在 protocol 中事先規定零事件的處理方式,並以不同方法做 sensitivity analysis。第 4 關的 Mantel-Haenszel 方法在稀疏資料下不需要校正就能計算(只要不是所有研究都零事件)。
量表方向與單位
- 方向:有的量表分數越高越好,有的越高越差。合併前把其中一邊乘以 −1,並在 forest plot 標示「左邊有利於治療」或「右邊有利於治療」。
- 單位:mg/dL 與 mmol/L、天與小時,要先統一。SMD 不需要統一單位,但 MD 需要。
ITT 與分母
二分類資料的分母,原則上用隨機分派的人數(intention-to-treat);若論文只給 per-protocol 分析,要記錄下來並在 RoB 的 missing outcome data domain 中評估(Cochrane Handbook 第 6、8 章;RoB 評估見 SR 站 LV.08)。
缺 SD 的最後手段
若完全無法回推 SD,可考慮借用其他相似研究的 SD 插補。這是最弱的做法,必須標記並做 sensitivity analysis。
六、萃取資料的一份標準格式
建議把每個比較整理成一列,保留原始數字與轉換來源,方便稽核與重現:
# 前兩列取自 ex4(dat.normand1999)的原始數字;第三列示範「論文只給 median/IQR」的研究
dat <- data.frame(
study = c("Edinburgh", "Umea", "Study X (median only)"),
n1i = c(155, 110, 60), m1i = c(55, 21, NA), sd1i = c(47, 16, NA),
n2i = c(156, 183, 60), m2i = c(75, 31, NA), sd2i = c(64, 27, NA),
source = c("ex4 data", "ex4 data", "median/IQR -> conv.fivenum()"),
flag_est = c(FALSE, FALSE, TRUE) # 估計值標記,供 sensitivity analysis 使用
)
# Study X 的 mean/SD 用 conv.fivenum() 補上後再算效果量:
# dat <- escalc(measure = "MD", m1i = m1i, sd1i = sd1i, n1i = n1i,
# m2i = m2i, sd2i = sd2i, n2i = n2i, data = dat)
關鍵欄位:source(數字從哪裡來)與 flag_est(是否為估計值)。最後的 sensitivity analysis 可以直接 subset = !flag_est。
常見錯誤與誤讀
| 錯誤 | 正確做法 |
|---|---|
| 比值類用 (UL − LL) / 3.92 算 SE | 先取 log:(ln UL − ln LL) / 3.92 |
| 用「p < 0.05」反推 SE | 只有精確 p 值才能反推 |
| 把 SE 當 SD 萃取 | 確認表格註記;SD 異常小時要懷疑 |
| median 直接當 mean、IQR 直接當 SD | 用 Wan / Luo 方法估計,並標記、做 sensitivity analysis |
| 多臂試驗的共用對照組重複計算 | 合併臂、拆分對照組,或改用 NMA |
| 同一試驗的分層當成多個研究 | 先用合併公式整併(ex4 Orpington) |
| Cluster RCT 未校正 clustering | 以 design effect 縮小有效樣本數 |
| 零事件一律加 0.5 不說明 | 事前規定方法並做 sensitivity analysis |
本關重點小抄
- 第一原則:先聯絡作者。 公式都是次佳方案,估計值要標記、要做 sensitivity analysis。
- CI → SE:差值 (UL − LL)/3.92;比值 (ln UL − ln LL)/3.92。ex1 驗算:0.344–0.696 → SE 0.1798,與 metafor 一致。
- p → SE:z = Φ⁻¹(1 − p/2),SE = |估計值|/z;不等式 p 值不能用。
- SE → SD:SD = SE × √n。
- Median/IQR → mean/SD:Hozo 2005 → Wan 2014(SD,考慮 n)→ Luo 2018(mean,最佳權重);R 用
metafor::conv.fivenum();前提是近似常態。 - Unit-of-analysis:cluster 用 DE = 1 + (M − 1)ICC;crossover 優先用配對分析;多臂不要重複計算對照組;同一試驗的分層先整併(ex4:g 從 −0.537 變 −0.227,兩者都未達統計顯著)。
- 零事件:0.5 校正不是中性的,事前規定 + sensitivity analysis。
延伸閱讀
- Higgins JPT, Thomas J, Chandler J, et al., eds. Cochrane Handbook for Systematic Reviews of Interventions, version 6(2019;線上持續更新版)。第 6 章(效果量與從報告數據計算)、第 23 章〈Including variants on randomized trials〉。https://training.cochrane.org/handbook
- Hozo SP, Djulbegovic B, Hozo I. Estimating the mean and variance from the median, range, and the size of a sample. BMC Med Res Methodol. 2005;5:13. DOI: 10.1186/1471-2288-5-13
- Wan X, Wang W, Liu J, Tong T. Estimating the sample mean and standard deviation from the sample size, median, range and/or interquartile range. BMC Med Res Methodol. 2014;14:135. DOI: 10.1186/1471-2288-14-135
- Luo D, Wan X, Liu J, Tong T. Optimally estimating the sample mean from the sample size, median, mid-range, and/or mid-quartile range. Stat Methods Med Res. 2018;27(6):1785-1805. DOI: 10.1177/0962280216669183
- Altman DG, Bland JM. How to obtain the confidence interval from a P value. BMJ. 2011;343:d2090. DOI: 10.1136/bmj.d2090
- Tierney JF, Stewart LA, Ghersi D, Burdett S, Sydes MR. Practical methods for incorporating summary time-to-event data into meta-analysis. Trials. 2007;8:16. DOI: 10.1186/1745-6215-8-16
- Elbourne DR, Altman DG, Higgins JPT, et al. Meta-analyses involving cross-over trials: methodological issues. Int J Epidemiol. 2002;31(1):140-149. DOI: 10.1093/ije/31.1.140
- Sweeting MJ, Sutton AJ, Lambert PC. What to add to nothing? Use and avoidance of continuity corrections in meta-analysis of sparse data. Stat Med. 2004;23(9):1351-1375. DOI: 10.1002/sim.1761
- Bradburn MJ, Deeks JJ, Berlin JA, Russell Localio A. Much ado about nothing: a comparison of the performance of meta-analytical methods with rare events. Stat Med. 2007;26(1):53-77. DOI: 10.1002/sim.2528
- Buscemi N, Hartling L, Vandermeer B, et al. Single data extraction generated more errors than double data extraction in systematic reviews. J Clin Epidemiol. 2006;59(7):697-703. DOI: 10.1016/j.jclinepi.2005.11.010
- Viechtbauer W. Conducting meta-analyses in R with the metafor package. J Stat Softw. 2010;36(3):1-48. DOI: 10.18637/jss.v036.i03
下一關:第 4 關 Fixed vs random effects——資料備齊,終於要開爐合併了。