跳到主要內容

LV.03

鍊金工坊:從萃取到效果量

CI → SE、median/IQR → mean/SD、cluster / crossover / 多臂試驗的資料前處理

BOSS
缺值煉金術士
時間
約 45 分鐘
建議先過
LV.02

本關目標

上一關學會了效果量的公式,但現實是殘酷的:論文很少剛好給你 yᵢ 和 vᵢ。有人只給 CI、有人只給 p 值、有人給 median 和 IQR、有人把同一個試驗拆成三列。本關 Boss「缺值煉金術士」專門把殘缺的資料變成看似完整、實則有毒的數字。打完本關,你應該能:

  1. 從 CI、p 值、SE 回推效果量的 SE,並知道 ratio 與 difference 的公式差在哪裡。
  2. 用 Hozo 2005、Wan 2014、Luo 2018 的方法,從 median、IQR、range 估計 mean 與 SD,並說出它們的前提與限制。
  3. 辨認 unit-of-analysis error(分析單位錯誤):cluster RCT、crossover trial、多臂試驗、同一試驗拆成多列。
  4. 處理零事件、量表方向不一致、單位不同等常見前處理問題。

萃取表怎麼設計、雙人萃取怎麼做,是 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,於是有了一系列估計方法。

三種報告情境

情境論文給了什麼
S1min、median、max、n
S2min、Q1、median、Q3、max、n
S3Q1、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 的那幾列,並預設對每列做偏態檢定,偏態顯著的研究不會被估計。

這些方法的限制

  1. 都假設資料近似常態。 偏態越嚴重,估計越不可靠。諷刺的是:作者之所以報 median,往往正是因為資料偏態。
  2. 估計的 SD 是「點估計」,它本身的不確定性沒有被傳遞到 MA 裡。 估計值被當成真值使用,MA 的精確度會被略微高估。
  3. 偏態資料的 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):

分析kHedges’ 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——資料備齊,終於要開爐合併了。

BOSS 戰:缺值煉金術士

HP0/4
  1. 一篇 RCT 只報告 HR 0.80(95% CI 0.64–1.00)。要放進 meta-analysis,ln HR 的 SE 怎麼算?

  2. 某研究只報告住院天數的 median 與 IQR,且資料明顯右偏(median 4 天、IQR 2–12 天)。下列做法何者最恰當?

  3. 一個 cluster RCT 以 20 間診所隨機分派,每間平均 50 人(共 1000 人),ICC = 0.02。若萃取時直接用個人層級資料而未校正,會發生什麼事?

  4. 三臂試驗:藥物低劑量、高劑量、安慰劑。你的 MA 問的是「藥物 vs 安慰劑」。下列做法何者會造成 unit-of-analysis error?