配對:建立一個公平的比較組
到現在,你已經知道整個系列的核心問題:一個因果主張,本質上是關於反事實的主張——如果我們當初用不同方式對待「同一批人」,會發生什麼。取得這個反事實的黃金標準,是隨機對照試驗,因為隨機分派讓實驗組與對照組在平均意義上可以互換。但很多時候你無法隨機分派:可能不合倫理、太昂貴,或事情早已發生。這篇指南談的,就是面對這些情況時的實務工具箱——而同樣重要的是,誠實面對這個工具箱能與不能承諾什麼。
先從最直覺的方法開始:配對(matching)。假設你想知道一個免費職業訓練計畫是否能提高月薪。會去報名的人並不是母體的隨機切片——他們往往比較年輕、經驗較少、目前薪水也較低,而這常常正是他們報名的原因。如果你直接拿兩群人現狀相比,等於拿蘋果比橘子。假設原始數字長這樣:受訓者之後月薪 24,000 元新台幣,未受訓者月薪 26,000 元。照字面看,訓練似乎「降低」了薪水——但這幾乎肯定是「誰選擇去報名」造成的假象。
配對的做法,是拒絕把兩群人「整批」相比。取而代之,對每一位受訓者,你都去找出一位(或數位)在「你能測量到的背景特徵」上與他幾乎一模一樣的未受訓者——同一年齡層、同樣的受教育年數、相同的先前薪資、相同的地區。接著你只拿每位受訓者跟他的「分身」相比。在這些變數上完成配對後,比較結果可能逆轉:配對後的受訓者,每月比他們的配對對照者多賺 300 元。天真比較與配對比較之所以結論不同,是因為兩群人從一開始就不可比——這正是本系列稍早講過的選擇偏誤。
一張有三個節點的因果圖:干擾因子 X 有箭頭分別指向處理 T 與結果 Y,另外還有一支從 T 直接指向 Y 的箭頭。X 到 T 與 X 到 Y 這兩支箭,在 T 與 Y 之間形成一條後門路徑。
幾個實用名詞。精確配對(exact matching)要求分身在每個變數上都完全相同;它很乾淨,但只要變數一多就很快變得不可能。最近鄰配對(nearest-neighbour matching)則依某種距離挑出最接近的對照者。卡尺(caliper)是一條規則:「若在這個距離內找不到對照者,寧可讓這位受訓者落單,也不要硬湊出一對爛配對。」而共同支持(common support,又稱重疊 overlap)則要求:對你研究的那類人,實驗與對照的例子都真的存在——如果你的資料裡根本沒有任何年輕的未受訓者,你就無法替一位 22 歲的受訓者找到配對。
完成配對後,估計值簡單到幾乎令人不好意思:就是取配對內各組的平均結果差。當你把每位受處理者配上一位可比的對照者時,你通常估計的是「受處理者的平均處理效果」(ATT)——也就是「實際接受處理的那類人」的效果,這不一定等於「對所有人」的效果。
受處理者效果的配對估計式:對每一位受處理者 i(共 N_t 位),減去其配對對照者 m(i) 的結果,再取平均。可與你稍早認識的平均處理效果對照。
傾向分數
在少數幾個變數上配對沒問題。但真實問題往往有許多干擾因子——年齡、教育、先前薪資、地區、產業、家庭人數、過去失業的次數,等等等等。一旦有二十個變數,要找到一位在全部變數上都與受處理者完全相同的對照者,機率幾乎跌到零。這就是維度的詛咒(curse of dimensionality):你每加一個維度,空間就更空曠,任何兩點都不再彼此靠近。
傾向分數(propensity score)是繞過這個難題的一個漂亮捷徑。你不再一次在二十個變數上配對,而是把它們壓縮成一個數字:每個人「在其可測背景下、會接受處理的機率」。稱它為 e(x)。一個 e(x) = 0.30 的人,意思是依其背景來看,他有 30% 的機率會去報名。Rosenbaum 與 Rubin 的深刻結果是:若兩個人的傾向分數相同,那麼在那個分數內,實驗與對照在「所有進到分數裡的變數」上都會達到平衡。於是你只需要在這「一個數字」上做配對、分層或加權即可。
傾向分數是「在可測特徵 X = x 之下、會接受處理(T = 1)」的機率。實務上你要去估計它——最簡單的做法,就是用一個以共變數預測「是否接受處理」的邏輯迴歸。
import statsmodels.formula.api as smf
# 1) Estimate the propensity score: predict TREATMENT from covariates
ps_model = smf.logit(
"enrolled ~ age + education + prior_wage + region",
data=df,
).fit()
df["pscore"] = ps_model.predict(df)
# 2) Inverse-probability weights
df["w"] = df["enrolled"] / df["pscore"] + \
(1 - df["enrolled"]) / (1 - df["pscore"])
# 3) Compare weighted average wages (then ALWAYS check balance + overlap)使用這個分數有三種常見方式。傾向分數配對(傾向分數配對)把每位受處理者配上一位分數幾乎相同的未受處理者——這是你最常聽到的名稱。分層(stratification)則把所有人依分數切成(例如)五個桶,並在每個桶內比較實驗與對照。反機率加權(inverse-probability weighting,IPW)則保留所有人,但重新給權重:那些「稀有卻受處理」與「稀有卻未受處理」的人會被加重,使加權後的實驗組與對照組看起來像同一個「虛擬母體」。
反機率加權的一行式:每個受處理者的結果除以「他被處理的機率」,每個對照者的結果除以「他成為對照的機率」。除以一個很小的機率,就會把稀有的個案加重。
有兩項檢查,能區分「可信的傾向分數分析」與「脆弱的傾向分數分析」。第一是平衡(balance):配對或加權後,兩群人的共變數分配應該真的看起來相似——分析者會報告「標準化平均差」並希望它很小。整件事的重點本來就是平衡,所以你必須驗證自己真的做到了。第二是重疊/正性(overlap / positivity):每一類人都必須真的有機會落在任一組。如果有些人的傾向分數幾乎是 1——他們無論如何都會被處理——那就沒有可比的對照者,而 IPW 裡除以一個接近零的機率,會讓估計值爆掉。
而這一節誠實的重點是:傾向分數解決的是維度問題,不是知識問題。它平衡的,是「你測量並建模過的變數」——也就是配對本來會用的那同一批變數。一個用年齡與教育建出來的傾向分數,對「動機」一無所知,只要動機從未進到資料裡。方法更優雅了,但底層的假設一模一樣。
對未測量干擾的敏感度
前兩節的每一種方法,都建立在一個你無法檢驗的假設上:不存在重要的未測量干擾因子。統計學家稱之為「條件可忽略性」(conditional ignorability)或「可觀測變數下的選擇」(selection on observables),但白話意思更簡單——「凡是同時影響『誰接受了處理』與『他發生了什麼』的東西,我都測量到了。」你永遠無法從資料證明這件事,因為那個缺失的變數,依定義就是缺失的。所以成熟的做法,不是斷言這個假設然後繼續往下走,而是去問:一個隱藏的干擾因子,要強到什麼程度,才足以推翻我的結論?
這就是敏感度分析(sensitivity analysis),它把一個「是或否」的無解問題,轉成一個有用的、可量化的問題。經典例子是 1950 年代的吸菸與肺癌。當時沒有隨機試驗——你不可能指派某些人連抽三十年菸。批評者說,基因可能是一個隱藏的干擾因子,同時造成「想抽菸的衝動」與「罹癌」。統計學家 Jerome Cornfield 用一個敏感度論證回應:若要靠一個隱藏因子解釋掉觀察到的關聯——當時吸菸者的罹癌率約是九倍——那個因子本身在吸菸者中出現的頻率,就得是非吸菸者的九倍以上。沒有任何合理的候選者接近這個門檻。這個因果主張之所以站得住,不是因為假設被證明了,而是因為要打破它,需要一個強到不合理的隱藏干擾因子。
這個想法有一個現代的、現成的版本:E 值(E-value)。一個結果的 E 值,是指「在你已調整的變數之外,一個未測量的干擾因子若要完全解釋掉你估計的效果,它與處理、以及與結果之間(在風險比尺度上)所需具備的最小關聯強度」。E 值大,代表你的發現很穩健:只有非常強的隱藏干擾因子才抹得掉它;E 值小,代表你的發現很脆弱:連一個溫和的未測量因子都足以解釋它。你會把 E 值就寫在估計值旁邊,讓讀者自己判斷。
預先分析計畫與紀律
觀察性因果研究之所以危險,有一個與干擾因子無關的原因:站得住腳的選擇太多了。要調整哪些共變數?用哪種配對方法、哪個卡尺、哪段結果觀察窗、哪個次群體?每一個都是岔路,而多數分析者會——完全出於真心地——一路選岔路,直到結果看起來漂亮為止。Andrew Gelman 稱之為「岔路花園」(garden of forking paths)。其結果,正是你在 A/B 測試系列裡認識過的那種病,名字叫做偷看與多重比較:只要你試夠多種設定,總有一種會純靠運氣而「顯著」。
解方借自臨床試驗:預先分析計畫(pre-analysis plan,PAP)。在你看任何結果之前,你先把「你將會怎麼做」完整寫下來——最好還加上時間戳記或公開註冊。這把你的分析,從「在搜尋中倖存下來的那個」變成「我事先承諾的單一檢定」。這跟你在蒐集資料前先把假設檢定敲定,是同一套邏輯,只是套用到更雜亂的觀察性設計世界裡。
- 在看到結果之前,寫明因果問題與確切的假設。
- 界定母體、處理,以及唯一的主要結果(次要結果另外列出)。
- 畫出有向無環圖,明確指出你將調整哪些變數——以及你刻意「不」調整哪些變數。
- 事先固定方法:配對方案、傾向模型、加權方式,以及標準誤的算法。
- 事先指定敏感度分析,以及「要多穩健你才會相信這個結果」。
- 把其餘一切標示為探索性——它依然有價值,但屬於「產生假設」,而非「確認假設」。
結合實驗與因果模型
在真實實務中,這些工具並非彼此競爭;你會把它們混著用。第一個問題永遠相同:你能做實驗嗎?只要你能對問題哪怕一部分做隨機分派——一場隨機試驗或線上A/B 測試——就去做,因為隨機分派是唯一能「免費」處理掉未測量干擾因子的一招。當完整實驗不可能時,你就拿出上一篇講的自然實驗設計——工具變數、雙重差分或迴歸不連續——它們利用的是世界遞給你的一個準隨機推力。唯有當以上都不可得時,你才退而求其次,用配對或傾向分數做調整,並搭配敏感度分析。
一張隨時間變化的折線圖,有兩條線:實驗組與對照組,在標記的介入時點之前平行移動;介入之後,實驗組那條線跳到它原本平行路徑之上,實際實驗線與那條投影路徑之間的垂直差距,被標示為估計的效果。
其中最有力的一招,是三角驗證(triangulation):用多種「以不同方式失效」的方法去攻同一個問題,看它們是否一致。一場 A/B 測試、一個對歷史資料做的雙重差分,以及一個傾向配對分析,各自倚賴不同的假設;若三者都指向大致相同的效果,你的信心理應遠高於其中任何一個單獨能支撐的程度。而當它們彼此矛盾時,那個矛盾本身就是資訊——它告訴你,是哪一個假設在挑大梁。
實驗與因果模型也會直接互相幫忙。一個小而乾淨的實驗,可以用來校準或驗證一條你打算大規模執行的、較便宜的觀察性流程:若在「兩者都有」的地方,你的觀察性方法重現了實驗的答案,那麼在「只有觀察資料」的地方,你就更能信任它。而即便在隨機實驗內部,有向無環圖也物有所值——它提醒你去檢查隨機分派是否真的成立、去處理那些中途退出或不遵從的人,並避免靠「調整一個在處理之後才測量的變數」來『修補』分析,因為那會重新引入偏誤。
決策指南:何時用哪一種方法
讓我們把整個系列濃縮成一道實用的階梯。從最上層讀起;停在你「真的站得上去」的第一階。階梯越高,你要求讀者吞下的、無法檢驗的假設就越少。
- 你能隨機分派嗎?可以的話,就做隨機實驗或 A/B 測試。這是最高的一階;底下任何一階都沒它可信。
- 世界裡有沒有準隨機的變異?那就用工具變數、雙重差分或迴歸不連續——並說清楚每一種各需要什麼假設。
- 你是否真心相信自己測到了關鍵的干擾因子?是的話就做調整——迴歸、配對、傾向分數或 IPW——並在旁邊附上敏感度分析。
- 若連這一步都站不穩,就明說這個結果是描述性或探索性的——它是一個關聯、一條線索,而非因果主張。
- 在每一階都一樣:先畫有向無環圖,這樣你才知道該調整什麼——而同樣關鍵的是,該放過什麼。
最後一點值得特別警告,因為應用因果工作裡最常見的新手錯誤,就是「把手上有的變數通通控制進去」。共變數越多,並不會自動越安全。調整一個中介變數——一個正好落在「處理通往結果」那條路徑上的變數——會抹掉你本來想測量的一部分效果。更糟的是,調整一個對撞因子——一個被處理與結果「共同造成」的變數——會憑空製造出一個虛假的關聯,它是選擇偏誤的近親。決定哪些變數該進模型的,是有向無環圖,不是你試算表的大小。
一張因果圖,處理 T 與結果 Y 各有一支箭指向第三個變數 C,也就是對撞因子。T 與 Y 之間有一條虛線,被標示為「只有在你對 C 設條件時才出現」的虛假關聯。
還有一個貫穿每一階的提醒:統計顯著不等於因果效果,而兩者也都不等於實務上的重要性。一個圍繞著「被精準估計的數字」的窄信賴區間,若那個數字回答的是錯的(非因果的)問題,就一文不值。精準與因果是兩種不同的美德;你兩者都需要。
因果推論所要求的謙遜
如果這個系列想灌輸一種態度,那就是「掙來的謙遜」。一個來自觀察性資料的因果主張,永遠不是無條件的。它總是附帶著你無法檢驗的假設:你測到了正確的干擾因子、存在重疊、沒有對撞因子偷溜進模型、設計的那個特殊假設(平行趨勢、有效的工具、銳利的切點)真的成立。好的實務不會藏起這些假設——它會把它們列出來、為它們辯護,並透過敏感度分析,展示這個結論能承受多少隱藏偏誤。
這也是為什麼「相關不等於因果」這句話,是對話的開始,而不是結束。成熟的版本是:在明說的條件與站得住腳的設計下,相關「會」成為因果的可信證據。整個系列所做的,就是把那些條件攤開、給你能滿足它們的設計,以及在它們未被滿足時、坦白承認的誠實。
當你無法做出那個完美的實驗時——而你通常真的做不到——支持因果最有力的論據,是「殊途同歸」。流行病學家把這份直覺,濃縮成一小組觀點,有時稱作 Bradford Hill 準則:大效果比小效果更難被解釋掉;劑量反應的型態(暴露越多、結果越多)令人安心;一個合理的機制有幫助;而跨不同母體與不同方法的一致性,最為重要。沒有任何單一一條算是證明,也沒有哪一條是可以打勾的清單項目——但合在一起,它們描繪出一個「可信的因果故事」應有的樣子。
這就是因果系列的終點——而恰如其分地,它的結尾不是一條公式,而是一種姿態。資料中最難的問題,是 X 是否真的造成 Y,而誠實的答案幾乎總是:「這是我們最好的估計、這是它所倚賴的假設,以及它得錯到多離譜,我們的結論才會改變。」把這句話帶進你做的每一次分析,你就已經學到這門學問所能教給你的、最有價值的那件事。