進階已經雙重審閱,尚未人工抽查

ANCOVA、變化量與只看追蹤值

同一份前後測資料的三種分析方式,為什麼隨機化試驗慣用 ANCOVA(線索在基線係數上)、效率的差距隨前後測相關係數怎麼變,以及迴歸到平均長什麼樣子、為什麼只在對照組看得乾淨。

這個問題長什麼樣子

臨床試驗最常見的結構之一是前後測:每個人在隨機分配前量一次(基線),治療結束後再量一次 (追蹤)。血壓、體重、HbA1c、疼痛分數、憂鬱量表,全部都是這個形狀。

拿到這樣的資料,分析的人面前有三條路:

  1. 變化量分析(change score)——算每個人的「追蹤減基線」,再比較各組的平均變化量
  2. ANCOVA(analysis of covariance,共變數分析)——用追蹤值當結果,把基線值當共變項放進 線性迴歸
  3. 只看追蹤值(follow-up only)——完全不理基線,直接比較各組的追蹤平均

三條路都在估「同一個治療效果」,但估得準不準差很多。而且它們的差別可以寫成同一個模型:

Y追蹤=α+βY基線+τZ治療組+εY_{\text{追蹤}} = \alpha + \beta \, Y_{\text{基線}} + \tau \, Z_{\text{治療組}} + \varepsilon

只看追蹤值等於把 β\beta 釘死在 0;變化量分析等於把 β\beta 釘死在 1 (把 Y基線Y_{\text{基線}} 移到左邊就變成變化量);ANCOVA 是讓資料自己決定 β\beta。 本頁其餘部分都在談這一件事的後果。

這一頁的例子

MASS::anorexia 是 72 位厭食症年輕女性的體重,治療前後各量一次(單位是磅)。 三組:CBT(認知行為治療) 29 人、對照組 26 人、 家族治療 17 人,參考組是 CBT。一行就能取得,不必申請任何資料庫權限。

組別n基線平均追蹤平均平均變化量
CBT(認知行為治療)2982.6985.70+3.01
對照組2681.5681.11-0.45
家族治療1783.2390.49+7.26

全體的前後測相關係數是 0.332。這個數字偏低, 而它會決定本頁後半所有的效率比較,所以先把它記住。

散布圖,橫軸是治療前體重(磅,約 70 到 95),縱軸是治療後體重(約 72 到 104)。三組用不同符號與顏色:CBT 是藍色圓點、對照組是褐色三角形、家族治療是紅色方塊,每組各畫一條配適直線。一條斜率為 1 的虛線代表體重沒有變化。家族治療的直線位置最高,整段落在虛線上方且距離明顯;CBT 的直線也整段落在虛線上方、從未與它交叉,但一路向右逐漸靠近它;對照組的直線幾乎是水平的、甚至略微向右下傾,是三條線中唯一穿過虛線的一條——左端在虛線上方,右端落到虛線下方。點的散布相當寬,看得出整體前後測相關只有 0.332。
同一張圖上看得到兩件事:三組的追蹤值高低不同(治療效果),以及基線與追蹤的關聯不算強。ANCOVA 做的事就是在同一個基線值上比較三條線的高度。產圖腳本 figures/scripts/B2-12-ancova.R
library(MASS)
data(anorexia, package = "MASS")

a <- anorexia
a$change <- a$Postwt - a$Prewt

# 1. 變化量分析
summary(lm(change ~ Treat, data = a))

# 2. ANCOVA:追蹤值當結果,基線當共變項
summary(lm(Postwt ~ Prewt + Treat, data = a))

# 3. 只看追蹤值
summary(lm(Postwt ~ Treat, data = a))

# 三者的差別全在基線的係數上:ANCOVA 估它,另外兩個把它釘死
cor(a$Prewt, a$Postwt)

# 迴歸到平均:只在沒有接受治療的對照組裡看
co <- subset(a, Treat == "Cont")
tapply(co$change, co$Prewt <= median(co$Prewt), mean)

驗證環境:R 4.6.0 + MASS 7.3.65。三個模型的 Treat 都以 CBT 為參考組,所以係數可以直接對照。

三種做法,同一份資料

森林圖,橫軸是相對於 CBT 的差異(磅),垂直虛線畫在 0。上半三條是對照組 vs CBT:變化量分析 -3.46、信賴區間橫跨 0;ANCOVA -4.10、區間整段落在 0 的左側;只看追蹤值 -4.59、區間也整段落在左側。下半三條是家族治療 vs CBT:變化量分析 4.26、區間橫跨 0;ANCOVA 4.56 與只看追蹤值 4.80、區間都整段落在 0 的右側。每一列右邊標著各自的標準誤與 p 值;兩個對比裡都是變化量分析的橫線最長。
同一份資料、同一個對比、三種分析。點估計彼此接近,差別主要在區間的長度,也就是標準誤。產圖腳本 figures/scripts/B2-12-ancova.R
對比做法估計(磅)SEp
對照組 vs CBT變化量-3.462.030.094
ANCOVA-4.101.890.034
只看追蹤值-4.591.970.023
家族治療 vs CBT變化量4.262.300.068
ANCOVA4.562.130.036
只看追蹤值4.802.230.035

先講最容易被講歪的一件事。變化量分析在兩個對比上的 p 值分別是 0.094 與 0.068, 在 0.05 的水準下未達統計顯著;ANCOVA 的兩個 p 值則低於 0.05。

這不代表變化量分析「證明了沒有效果」,也不是「換個方法就做出顯著」的成功故事。 三種做法的點估計其實相當接近——對照組的三個估計落在 -4.59 到 -3.46 之間, 彼此的差距還不到一個標準誤。真正在動的是標準誤

  • 對照組的對比,SE 由大到小是變化量 2.03、 只看追蹤值 1.97、ANCOVA 1.89
  • 家族治療的對比順序相同:2.30、 2.23、2.13

ANCOVA 在這份資料上確實是三者中最精確的。 但要注意幅度:它比只看追蹤值只窄了 3.8%(對照組的對比), 比變化量分析窄 6.9%。 在這種量級之下,p 值跨不跨過 0.05 是一件很脆弱的事,不值得當成結論來講。 效率的差距為什麼這麼小,下一節與第五節分別回答。

為什麼隨機化試驗慣用 ANCOVA

線索在基線那一項的係數上。ANCOVA 估出來的 β^\hat\beta = 0.434 (SE 0.161,95% CI 0.11–0.76)。

拿它去對兩個「被釘死的值」各做一次檢定:

虛無假設哪一種做法在假設它tp
基線係數 = 0只看追蹤值2.700.009
基線係數 = 1變化量分析-3.51< 0.001

兩個假設都被這份資料拒絕了。 基線與追蹤明顯有關(所以不能當它不存在), 但關聯遠遠沒有到一比一(所以也不能直接相減)。ANCOVA 在這份資料上效率最好, 就是因為它不必事先猜這個係數——它從資料裡估。 (它是不是永遠最好,是下一節的問題,答案不是「是」。)

效率的差距隨相關係數怎麼變

教科書常說「前後測相關越高,ANCOVA 越有利」。這句話沒有辦法用一份資料驗證, 因為一份資料只有一個相關係數。所以這一節改用模擬:固定樣本數與真實效果, 只讓相關係數從 0 掃到 0.9。

參數是 每組 36 人(合計剛好等於 anorexia 的 72 人)、 真實差異 0.5 個標準差、 每個格點重複 2000 次、 α\alpha = 0.05、seed 固定為 20260823。

兩個並排的折線圖,橫軸都是前後測相關係數 0 到 0.9。左圖縱軸是平均標準誤:變化量分析(褐色)從最高處一路陡降;ANCOVA(藍色)起點就比較低並持續下降,全程都在褐色線下方;只看追蹤值(紅色)幾乎是一條水平線。褐色線在相關 0.5 附近由上往下穿過紅色線。左圖有兩條垂直參考線,一條在 anorexia 實際的相關 0.33,一條在 0.5。右圖縱軸是檢定力百分比:變化量分析從約 33% 一路爬升到接近 100%;ANCOVA 從約 56% 起步,在 18 個格點高於變化量分析,只有在相關最高的那一點兩條線收在一起打平;只看追蹤值幾乎是一條水平線,全程落在 53% 到 58% 之間。
每組 36 人、真實差異固定,只有前後測相關在變。變化量分析要到相關 0.5 才追上只看追蹤值,而且全程沒有超過 ANCOVA。產圖腳本 figures/scripts/B2-12-ancova.R
相關係數SE:變化量SE:ANCOVASE:只看追蹤值檢定力:變化量檢定力:ANCOVA檢定力:只看追蹤值
0.000.3330.2370.23533.3%56.3%57.0%
0.200.2970.2330.23640.0%56.0%54.5%
0.350.2690.2220.23545.9%61.4%57.1%
0.500.2340.2050.23556.8%66.0%53.9%
0.700.1820.1690.23576.2%82.1%53.4%
0.900.1050.1030.23599.9%99.9%56.1%

三件事,照實講:

  • 變化量分析在 19 個格點裡,一個都沒有贏過 ANCOVA (精確地說是 0 個)。 它與只看追蹤值的交叉點落在相關係數 0.50, 相關低於這個值時,做變化量分析比乾脆不看基線還糟
  • ANCOVA 也不是每個格點都最好。 它在 19 個格點裡贏了 16 個; 相關係數等於 0.00、0.05、0.10 時, 只看追蹤值的 SE 反而略小(相關為 0 時是 0.235 對 0.237)。原因很單純:ANCOVA 多估了一個參數, 當那個參數其實沒有用時,那個自由度就是白花的。差距很小,但它是真的。
  • anorexia 的相關落在 0.332, 離模擬格點最近的是 0.35。在那裡 ANCOVA 的 SE (0.222)只比只看追蹤值 (0.235)好一點點—— 這正是本頁第三節那個「只窄了幾個百分點」的來源。

迴歸到平均

迴歸到平均(regression to the mean)是指:因為每次測量都帶有隨機成分, 基線量到特別低的人,下一次量通常會高一些;基線特別高的,下一次通常會低一些。 這不需要任何治療,也不需要任何真實的變化,光靠測量的隨機性就會發生。

最乾淨的觀察位置是沒有接受治療的對照組。把對照組依基線體重中位數 (80.65 磅)切成兩半:

對照組的一半n基線平均追蹤平均平均變化量
基線較輕的一半1376.8380.68+3.85
基線較重的一半1386.2881.53-4.75

基線較輕的一半平均增加 3.85 磅, 基線較重的一半平均減少 4.75 磅, 兩者相差 8.61 磅 (Welch t = 3.22,p = 0.004)。 而整個對照組的平均變化量只有 -0.45 磅—— 這些人沒有接受任何治療。

散布圖,只畫對照組。橫軸是治療前體重(約 70 到 92 磅),縱軸是體重變化量(約 -12 到 +16 磅)。褐色三角形散布其上,一條深色配適直線由左上往右下明顯下降。一條水平虛線畫在變化量為 0 處,一條垂直點線畫在基線中位數 80.65 處。左半部有一段藍色水平線標出該半的平均變化量 +3.85 磅,位於零線上方;右半部有一段紅色水平線標出該半的平均變化量 -4.75 磅,位於零線下方。兩段線分別在零線的兩側。
沒有接受治療的對照組。基線輕的一半平均變重、基線重的一半平均變輕,兩段水平線落在零線的兩邊。產圖腳本 figures/scripts/B2-12-ancova.R

常見誤用

誤用為什麼錯
事後從三種做法裡挑 p 值最小的報同一批人三次機會,等於未申報的多重比較
把變化量分析未達顯著寫成「治療沒有效果」未達顯著只代表這個分析沒有偵測到差異
因為「隨機化後基線已平衡」就不校正基線校正基線是為了降低殘差變異,不是修正不平衡
看到基線不平衡才臨時決定要校正分析取決於結果,p 值與信賴區間失效
認為 ANCOVA 在任何情況下都最有效率相關很低時它多花一個自由度,可能略遜於只看追蹤值
認為變化量分析總比不看基線好相關低於 0.5 時它的標準誤反而更大
單臂研究拿「前後有進步」當療效證據迴歸到平均與自然病程都會產生同樣的結果
用極端值收案之後再比較前後收案條件本身就保證了迴歸到平均
把有治療組的「輕的進步比較多」當成迴歸到平均的證據治療效果與迴歸到平均混在一起,拆不開
把變化量對基線迴歸的斜率當成迴歸到平均的大小基線的測量誤差也算進去了,不是無偏估計
三組資料只報整體 F 檢定就結束讀者要的是各組對比的估計與區間
把 ANCOVA 的基線係數當成「基線的療效」解讀它是共變項的斜率,不是任何組間對比

重跑本頁的所有數字

/opt/homebrew/bin/Rscript figures/scripts/B2-12-ancova.R

讀讀看這張圖

答案取自產生本頁圖表的同一份統計輸出,不是另外打上去的。

Control 相對於 CBT 這個對比,change score、ANCOVA、只用追蹤值三種做法給出三個估計。它們的差別在哪裡?

看答案與解析

正確答案: ANCOVA 給 -4.10——三者的差別在於對基線係數的假設不同,ANCOVA 讓資料自己決定

ANCOVA 給 -4.10,change score 給 -3.46,只用追蹤值給 -4.59。三種做法估的是同一個對比,差別只在對「基線係數」的假設:change score 把它釘在一(假設基線一分完全轉移到追蹤值),只用追蹤值把它釘在零(假設基線完全不影響),而 ANCOVA 讓資料自己決定。所以它們既不是不同的對比,點估計也不相同——差別來自三個不同的假設,而其中兩個是被硬性指定的。

ANCOVA 模型裡基線體重那個係數的信賴區間,同時排除了零與一。這件事說明了什麼?

看答案與解析

正確答案: 係數是 0.434——區間排除零否定了只用追蹤值,排除一否定了 change score

係數估計是 0.434,區間是 0.113 到 0.756。排除零,代表基線確實影響追蹤值,只用追蹤值那個做法(等於把係數當成零)站不住;排除一,代表基線並不是一分不差地轉移到追蹤值,change score 那個做法(等於把係數當成一)也站不住。0.113 與 0.756 是區間的兩端,任何一端單獨拿出來都只能否定一邊。這也說明為什麼「要不要校正基線」不是一個風格問題——資料對這個係數是有話說的。

把完全沒有接受治療的 control 組按基線體重分成兩半,兩半的平均變化一個往上、一個往下,而且差距達到統計顯著。這是什麼?

看答案與解析

正確答案: 基線較低那一半平均變化 3.85——按基線分組再看變化必然製造出這種對稱的假效果

這一組完全沒有接受任何治療,基線較低那一半平均變化是 +3.85,較高那一半是 -4.75,兩者差 8.61 且達到統計顯著。既然沒有治療,這個差就不可能是治療反應:測量帶有誤差,被分到「較低」那一半的人裡有一部分只是那天量得偏低,再量一次自然往上——這就是回歸到平均。按基線值把人分組再看變化,一定會製造出這種對稱的假效果,而它在報告裡讀起來很像「基線越差的人進步越多」。

素材來源與授權

本頁為原創內容

回報內容問題

這個站的統計內容由 AI 撰寫、AI 互審,人工只做抽查。你看得出來的錯,我們不一定看得出來。

寫得越具體越修得動,例如哪一句話跟哪本教科書/哪篇論文的說法不一致。

留了才回得了信;不留也會看。

一併送出的資訊

這些是自動帶上的,每一項都可以取消。