說起病例對照研究(case control study),相信各位小夥伴並不陌生。簡單來說,就是把患有某種疾病的一組病人作為病例組(case),不患該疾病但是可比的另一組個體作為對照組(control),通過比較兩組中我們關心的暴露因素的比例,從而推斷暴露因素和疾病之間的關聯。

講到這裡,就不得不提到確保病例組和對照組可比性的絕招——匹配!一般來說匹配包括頻數匹配和個體匹配,前者只要保證匹配的因素在兩組分佈比例相同,比如說病例組男、女各半,對照組也應該一樣;後者要求病例組每一個研究對象,在對照組中也有一個匹配因素相近或一致的研究對象與之匹配,比如說病例組有一個23歲男性,對照組中應給他匹配一個23歲左右的男性。

本期和大家一起學習如何使用SPSS搞定病例與對照的1:1匹配。

需要注意的是,SPSS22及以上版本才提供病例對照匹配(Case Control Matching)的功能,其他的版本要想使用這個功能,必須安裝相應插件才能實現。本次使用SPSS22為大家演示。

一、問題與數據

目前對於吸煙與高血壓之間關係仍存在爭議,擬採用巢氏病例對照設計(高血壓組與正常組)探討吸煙與高血壓之間的關係,其中對照組按照年齡±2歲,性別相同與病例組進行匹配。已有的隊列數據在匹配前是這個樣子(見表1),可以看到兩組在匹配之前的性別分佈和年齡均有明顯差異。下面一起看看SPSS如何搞定匹配!

表1. 兩組基線情況比較(匹配前)

二、 SPSS分析方法

1. 數據錄入

(1) 變數視圖

(2) 數據視圖

2. 病例對照匹配

選擇Data→Case Control Matching,就進入病例對照匹配的主對話框。

將需要匹配的變數(Age, Sex)放入Variables to Match on中;

Match Tolerance用來設置匹配條件,一般分類變數要求相同,設置為「0」,對於連續變數,可根據具體情況限定一個範圍 ,比如這裡我們限定年齡±2歲,設置為「2」,但是需要注意,設置匹配條件必須與匹配變數放置順序相一致,並且用「空格」隔開;

Group Indicator指定分組,一般病例組賦值為「1」,對照組賦值為「0」;

Case ID確定觀測對象的ID,一般為病例號,調查編碼等;

Names for Match ID Variables設定一個變數,用來明確對照組中匹配成功的ID;

Names for Matchgroup Variables 設定一個變數,用來明確病例組中相同條件的觀測對象,比如有兩個23歲男性。

3. Options設置

Variable for Number of Eligible Cases設定一個變數,用來明確病例組中某一個觀測對象,在對照組中有多少個觀測對象滿足與其匹配的條件,比如說病例組有一個23歲男性,對照組可能有一個24歲男性,一個22歲男性。

Sampling默認為不放回抽樣。

Give priority to exact matches 優先考慮精確匹配,也就說病例組有一個23歲男性,對照組也應該找到一個23歲男性跟他匹配。

Maximize execution performance 執行最優化操作。

Randomize case order when drawing matches 這裡需要大家著重注意一下,整個匹配過程中,如果對照組有多個滿足匹配條件的觀測對象,那麼SPSS會默認隨機將其與病例組觀測對象匹配。問題來了,因為SPSS默認每次操作給對照組的隨機數字不同,所以如果不特殊設定,每次實際匹配成功的對子是不一樣的,也就說這一次對照組A匹配給病例組B,下一次就可能匹配給病例組C。所以需要勾選這裡,並且在Random Number Seed設定一個隨機數種子,確保匹配過程可以重複。

4. Additional Output設置

這裡把匹配成功的對照組中所有觀測對象單獨輸出一個數據集Control。這裡強烈建議大家勾選並設定,有什麼用呢,下面接著聊~

三、匹配結果

1. 匹配過程

如表2所示,精確匹配28對,模糊匹配178對,共計匹配成功206對。

表2. 匹配統計

表3主要是匹配過程。首先是精確匹配(年齡性別均一致),匹配23170次,不到1%匹配成功;其次在精確匹配成功的前提下,進行Age的模糊匹配(年齡±2歲),匹配23142次,大約6.5%匹配成功;最後在上述兩次匹配成功的前提下,進行Sex的模糊匹配(這裡指性別相同),匹配1501次,大約12%匹配成功。

表3. 匹配容許誤差

2. 匹配後資料庫

原始資料庫中出現之前設定的幾個新變數:

E_case表示對照組中有幾個符合匹配條件的觀測對象(如圖,病例組ID=25,有4個對照組觀測對象符合匹配條件);Match_G與E_case不同,Match_G數字相同,代表病例組匹配條件一致,比如有若干23歲男性觀測對象待匹配;match_id表示對照組匹配成功的ID。

下圖輸出僅包含匹配成功的對照組資料庫,Match_G與原始資料庫一致,match_id表示匹配成功、相對應的病例組ID。

3. 資料庫合併

到這裡,有的小夥伴要問了,兩個庫以後怎麼做數據分析呀?重點來了,資料庫的合併!

(1) 生成病例組數據集:在原始資料庫中, 選擇Data→Select Cases→If condition is satisfied:設定match_id≥1,篩選出匹配成功的病例組→Output中輸出新的數據集Case。

(2) 對照組數據集match_id替換:將Control數據集中變數match_id替換成ID編號→Save

(3) 病例組與對照組數據集合併:在新生成Case資料庫SPSS界面下,選擇Data→Merge Files→Add Cases→選擇Control組→Continue→OK

(4) 排序&保存:選擇Data→Sort cases→按照匹配標識match_id排序→OK→Save(千萬記得保存勞動成果!!!)

大功告成,不過還要看看匹配效果。見表4,高血壓組全部匹配成功,且性別和年齡在兩組間均衡可比。

表4. 兩組基線情況比較(匹配後)

問題又來了,匹配是成功了,怎麼做數據分析呢?推薦大家去看:SPSS實例教程 | 1:m匹配病例對照Logistic回歸

四、總結和拓展

有的小夥伴可能要問了,你這是1:1的病例對照匹配,那1:M呢?這可就有點難為SPSS大兄弟了!目前SPSS中Case Control Matching只提供1:1的病例對照匹配,不過不用著急,後面我們會結合SAS給大家演示1:M的病例對照匹配,敬請期待~~~

(更多內容可關注「醫咖會」微信公眾號:傳播醫學知識和研究進展,探討臨牀研究方法學。)

推薦閱讀:

相關文章