SPSS操作:搞定病例与对照的1:1匹配
说起病例对照研究(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的病例对照匹配,敬请期待~~~
(如果你想使用文中数据进行练习,请随时给小咖(微信:xys2016ykf)发消息,小咖将原始数据发给你。)
精彩回顾
关注医咖会,轻松掌握统计学!
有临床研究设计或统计学方面的难题?快加小咖个人微信(xys2016ykf),加入医咖会统计讨论群,和小伙伴们一起交流学习吧。我们诚邀各位小伙伴加入我们,一起创作有价值的内容,将知识共享给更多人!
点击左下角“阅读原文”,看看医咖会既往推送了哪些研究设计或统计学文章。